时间片轮询方法
方法一:
void TimerX_handler(void) { ms_cnt++; }初始化设置该定时器x毫秒中断一次,即ms_cnt作为一个毫秒计时器。
main(void) { while(1) { if(ms_cnt%x==0) { task1(); } if(ms_cnt%y==0) { task2(); } } }主循环中,每隔x毫秒执行一次task1,每隔y毫秒执行一次task2。
方法二:
typedef _TASK_STRUCT { <span style="white-space:pre"> </span>u32 time_cnt; <span style="white-space:pre"> </span>u8 run_flag; }TASK; TASK task1 = {x,0}; TASK task2 = {y,0};定义任务结构体,每隔x时间置位task1执行标志位task1.run_flag,在main loop中扫描并执行;同理task2。
void TimerX_handler(void) { if(task1.run_flag == 0) { task1.time_cnt--; } if(task1.time_cnt == 0) { task1.run_flag = 1; task1.time_cnt = x; } if(task2.run_flag == 0) { task2.time_cnt--; } if(task2.time_cnt == 0) { task2.run_flag = 1; task2.time_cnt = y; } }
void main(void) { while(1) { if(task1.run_flag == 1) { task1(); task1.run_flag = 0; } if(task2.run_flag == 1) { task2(); task2.run_flag = 0; } } }
(附:待完善)