Встроенный Linux — постоянное время цикла

Для специальной проверки наличия одного пробела используйте

if [ "$VAR" = ' ' ]; then
    print 'No special card found'
else
    # do something else
fi

Если вы хотите проверить, является ли переменная пустой , используйте

if [ -z "$VAR" ]; then
   # etc.
2
17.12.2019, 13:24
2 ответа

Хотя инструкции могут работать с постоянным числом тактовых циклов для каждого цикла, нет гарантии, что они будут иметь постоянное тактовое время для выполнения.

Существует множество других вещей, которые ядро ​​должно решить, используя тактовые циклы, которые не будут доступны вашему циклу. Обновление системных часов, проверка запуска других процессов, включая возможные задания cronи множество других вспомогательных задач. Такие вещи, вероятно, находятся вне вашего контроля, и поэтому циклы, доступные для вашего кода, непредсказуемы, и количество собранных образцов будет постоянно меняться.

Единственное решение, которое я могу предложить, состоит в том, чтобы оценить, какие параметры являются действительно важными, и определить, как лучше всего их контролировать, принимая при этом изменчивость всех остальных.

1
27.01.2020, 22:16

Основным недостатком вашего кода является использование time(). Это возвращает значение в секундах, поэтому ваш цикл может длиться от 4 до 5 секунд. Вместо этого вы должны использовать gettimeofday(), который предоставляет поле микросекунд (, хотя разрешение может быть хуже, чем ).

Вы также можете уменьшить изменчивость, сделав свой процесс реальным -временным процессом. Используйте chrt -fдля запуска вашей команды или вызовите sched_setscheduler()с помощью SCHED_FIFO.

0
27.01.2020, 22:16

Теги

Похожие вопросы