koyodza (13.10.2010 12:08, просмотров: 126) ответил fk0 на Во-первых надуманно, во-вторых есть методы обхода. Да, у каждого модуля есть функция, которую нужно вызывать регулярно. Не обязательно раз в 10мс, как можно чаще, но не реже, чем раз в 100мс -- вот так верней. Функция внутри сама проверяет время
всё верно, только чтобы не морочиться с атомарностью доступа к глобальному таймеру, доступ к нему вне функции main у меня отсутствует, а его значение передаётся при вызове задачи если поправить Ваш код, выглядит это примерно так:
int main()
{
/* do some initialization.. */
module1_init();
module2_init();
...
/* main loop */
while (1)
{
module1_func(clock());
module2_func(clock());
...
}
}
void module1_func(clock_t tm)
{
static clock_t prevTime = 0;
switch (state) {
case STATE1:
...
break;
case STATE2:
if (tm - prevTime < DELAYTIME)
break;
prevTime = tm;
do_something();
break;
}
}