ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
12 июля
430197 Топик полностью
Apтём (05.08.2013 15:02, просмотров: 80) ответил mazur на Например, у меня таймерная служба. На асме я в файле таймерной службы создал макрос автоматического добавления порядкового номера таймера и автоматического добавления блока в ОЗУ. При компиляции создаются порядковые номера и очередь таймеров.
На плюсах можно что-то похожее замутить (или вам голый Си только годится?):  #define MAX_TIMER_NUMBER 10 class SoftTimer_t { static SoftTimer_t * List[MAX_TIMER_NUMBER]; static unsigned char TimerCounter; static void AddNewTimer(SoftTimer_t * new_timer) { if (TimerCounter<(MAX_TIMER_NUMBER-1)) { List[TimerCounter++]=new_timer; } else { while (1) ; } } public: unsigned short TimerValue; SoftTimer_t(unsigned short init_value) { AddNewTimer(this); TimerValue=init_value; } static void Exec() { for (unsigned char i=0; i<TimerCounter; i++) { if (List[i]->TimerValue) { List[i]->TimerValue--; } } } void Restart(unsigned short new_timeout) { TimerValue=new_timeout; } }; SoftTimer_t * SoftTimer_t::List[MAX_TIMER_NUMBER]; unsigned char SoftTimer_t::TimerCounter; SoftTimer_t T1(10), T2(20); ISR(TIMER1_COMPA_vect) { SoftTimer_t::Exec(); } void Func1() { //..... T1.Restart(100); //..... } void Func2() { //..... T2.Restart(10000); //..... }