Есть желание завести в системе несколько таймеров с разрешающей способностью в 10 миллисекунд и размером в 2 байта. Запрограммирую, например таймер 0 на прерывание раз в 10 миллисекунд.
Объявлю, например 4 таймера: volatile u16 Timers00, Timers01, Timers02,Timers03;
В обработчике прерывания буду уменьшать до 0;
SIGNAL (SIG_OVERFLOW0) // { if Timers00 Timers00--; if Timers01 Timers01--; if Timers02 Timers02--; if Timers03 Timers03--; }
Но поскольку процессор 8-ми битный то присвоение значения таймеру и проверка на равенство его нулю в основной программе может быть прервана прерыванием. В результате таймер будет функционировать не правильно. Запрещать и разрешать прерывания как-то не “красиво” нужно постоянно помнить о состоянии флага прерывания. Есть ли изящное решение или специальные функции, встроенные в WinAvr? Спасибо.