ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
2 июня
232952 Топик полностью
fk0, легенда (11.01.2011 08:43, просмотров: 86) ответил mazur на Есть вопросик о таймерах. До этого я делал библиотеку таймеров, таймеры работали следующим образом:
Многобукавниасилел. Рассказываю как я делаю: есть функция возвращающая время. В принципе этого достаточно, чтоб в основном цикле измерять задержки (считается разница с запомненным, если больше чем -- время вышло). Да, это неэффективно и тратит циклы CPU на бесполезные вычисления. Но при отсутствии ОС это не важно (не совсем так, ещё есть вопрос пониженного потребления, но это пока пропустим -- вообще здесь нужен какой-то механизм "событий" и умение засыпать при их отсутствии). А таймеры используются для очень быстрых процессов, вызываемых из прерываний... Можно использовать аппаратные. Но поскольку их часто не хватает, то используется один аппаратный таймер, к нему очередь (отсортированная по-времени...) из десятка программных. Аппаратный таймер программируется на время срабатывания наиболее раннего программного. Когда сработает -- вызывается функция обслуживающая (из прерывания всё) данный таймер, потом программируется следующий таймер... ну есть функции установки/выключения таймера. Срабатывания только однократные. Есть функция получения текущего времени высокого разрешения (только младшие биты, чтоб не получать long long). Таймеры устанавливаются на абсолютное значение времени когда сработать (N тиков или позже), а не на относительное. Смысл в том, что это позволяет не накапливать погрешность если нужны периодические срабатывания.
[ZX]