есть системный таймер uint32_t sysTimer_ms который инкрементируется
каждую 1мс. При необходимости можно любой добавить - 100мс, 1с,
1час. Потом для таймера завожу переменную uint32_t timer_n. Ну и
дальше просто: //запуск отсчета:
timer_n = sysTimer_ms;
//проверка условия:
if (sysTimer_ms - timer_n > needInterval)
{
// если таймер периодический, обновляем отсчет
timer_n = sysTimer_ms;
// делаем что надо по таймеру.
}
в общем то достаточно примитивно и надежно, основное условие - все переменные должны быть unsigned и одного размера, для некоторых компиляторов, если needInterval число, его надо явно обозначать как беззнаковое типа "1000U".