Для специальной проверки наличия одного пробела используйте
if [ "$VAR" = ' ' ]; then
print 'No special card found'
else
# do something else
fi
Если вы хотите проверить, является ли переменная пустой , используйте
if [ -z "$VAR" ]; then
# etc.
Хотя инструкции могут работать с постоянным числом тактовых циклов для каждого цикла, нет гарантии, что они будут иметь постоянное тактовое время для выполнения.
Существует множество других вещей, которые ядро должно решить, используя тактовые циклы, которые не будут доступны вашему циклу. Обновление системных часов, проверка запуска других процессов, включая возможные задания cron
и множество других вспомогательных задач. Такие вещи, вероятно, находятся вне вашего контроля, и поэтому циклы, доступные для вашего кода, непредсказуемы, и количество собранных образцов будет постоянно меняться.
Единственное решение, которое я могу предложить, состоит в том, чтобы оценить, какие параметры являются действительно важными, и определить, как лучше всего их контролировать, принимая при этом изменчивость всех остальных.
Основным недостатком вашего кода является использование time()
. Это возвращает значение в секундах, поэтому ваш цикл может длиться от 4 до 5 секунд. Вместо этого вы должны использовать gettimeofday()
, который предоставляет поле микросекунд (, хотя разрешение может быть хуже, чем ).
Вы также можете уменьшить изменчивость, сделав свой процесс реальным -временным процессом. Используйте chrt -f
для запуска вашей команды или вызовите sched_setscheduler()
с помощью SCHED_FIFO
.