单片机程序架构(一)时间片轮询

来源:互联网 发布:mac内存清理软件 编辑:程序博客网 时间:2024/06/04 08:40

时间片轮询方法


方法一:

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;}}}


(附:待完善)

0 0
原创粉丝点击