方法一:
[cpp] view plain copy
- void TimerX_handler(void)
- {
- ms_cnt++;
- }
初始化設置該定時器x毫秒中斷一次,即ms_cnt作為一個毫秒計時器。
[cpp] view plain copy
- main(void)
- {
- while(1)
- {
- if(ms_cnt%x==0)
- {
- task1();
- }
- if(ms_cnt%y==0)
- {
- task2();
- }
- }
- }
主循環(huán)中,每隔x毫秒執(zhí)行一次task1,每隔y毫秒執(zhí)行一次task2。
方法二:
[cpp] view plain copy
- 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};
定義任務結(jié)構(gòu)體,每隔x時間置位task1執(zhí)行標志位task1.run_flag,在main loop中掃描并執(zhí)行;同理task2。
[cpp] view plain copy
- 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;
- }
- }
[cpp] view plain copy
- 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;
- }
- }
- }
|