Я создаю устройство на платформе AVR. Устройству потребуется некоторая информация о времени, поэтому я подумал о повторной реализации millis
функциональности, подобной Arduino (хотя и не совсем такой ). Тем не менее, после выполнения некоторых расчетов обратного конверта (частично на основе этого поста ), мне стало казаться, что millis
съедает не менее 5% процессорного времени на 20-мегагерцовом процессоре и пропорционально больше, чем на 16-мегагерцовом:
millis
PUSH
+ POP
плюс CLR
, IN
, иRETI
Мне не нужна millis
точность, поэтому я рассматриваю возможность реализации centis
или даже decis
сохранения циклов процессора для других вещей. Это неразумно? Мои расчеты неверны? Казалось бы, странный выбор дизайна, или я что-то упускаю?
50 тактов — это не 50 мкс при работе на частоте 16 МГц, это около 3 мкс. Так что 0,3% накладных расходов, а не 5%. Вы, конечно, можете это сделать, но у меня никогда раньше не было проблем с запуском небольшого ISR на частоте 1 кГц. Возможно, было бы неплохо повторно реализовать его, чтобы вы могли добавить больше вещей для запуска на каждом такте таймера или запланировать запуск вещей на будущие такты. Метод, который я использую довольно часто, заключается в том, чтобы запланировать выполнение чего-либо, например, с интервалом в 1 секунду, сохраняя текущее время + интервал в переменной, а затем, когда время превышает будущую временную метку, я увеличиваю временную метку на интервал, а затем запускаю код. Если тик пропускается, то текущий вызов просто задерживается на один тик. Было бы очень легко использовать этот метод для запуска вещей с интервалами в 10 мс или 100 мс.
Игнасио Васкес-Абрамс
Том Л.
ангелбольшой
ангелбольшой
Игнасио Васкес-Абрамс
ангелбольшой
Том Л.
Том Л.