askhua520
askhua520
typedef struct SortTimer { uint32_t timestart; uint32_t interval; uint32_t repeat; void (*timeout_cb)(); struct SortTimer* next; } SortTimer; 结构体timeout修改为timestart,增加一个interval; if (_timer_ticks - target->timestart > target->interval) 这样就不存在定时时间必须小于UINT32_MAX/2问题,但是还是存在一个长定时而且主循环超时导致时间点错过的问题 以byte类型为例,假如当前tick为254,定时时长253,这样只有3次tick满足,如果主循环超过3次tick,就会造成错过时间点。 而if((int32_t)((uint32_t)(target->timeout -_timer_ticks)) timestart >...
我一般这样用 #ifndef _TIMER_H_ #define _TIMER_H_ #include "NewType.h" #define tType uint16 enum TimerOut { TIMERRST = 0, TIMEROUT = 1 }; typedef struct TIMER { uint8 TimeOut; tType Value; } Timer,...