[其它] 定时器之任务调度

[复制链接]
573|0
 楼主| jimmhu 发表于 2022-11-24 11:00 | 显示全部楼层 |阅读模式
本帖最后由 eltonchang2001 于 2022-11-24 11:57 编辑

需要用定时器,设计一个最基本的任务时间调度器,将CPU的时间切割为一个小小的时间片,用定时器中断将CPU切割为一个个1ms的小时间片,然后将所有的任务按照要求的调度周期安排在不同的时间片上。

  1. #define TASK_MAX_LENGTH  5
  2. /*任务调度器*/
  3. typedef struct _TASK{
  4.         int Flag;/*任务控制位*/
  5.         int DelayCnt;/*任务调度周期值*/
  6.         int Cnt;/*任务时间计数值*/
  7. } TASK

  8. TASK TASK_T[TASK_MAX_LENGTH]={
  9.         {0,50,0},
  10.         {0,1000,0},
  11.         {0,10,0},
  12.         {0,10,0},
  13.         {0,5000,0}
  14. };
  15. //1ms中断一次,0.1ms 10%CPU
  16. void TIM0_INT(void) interrupt 1
  17. {
  18.         int i;
  19.         task4_run();
  20.         for(i=0;i<TASK_MAX_LENGTH;i++){
  21.                 TASK_T[i].Cnt++;
  22.                 if(TASK_T[i].Cnt==TASK_T[i].DelayCnt){
  23.                         TASK_T[i].Flag=1;
  24.                     TASK_T[i].Cnt=0;
  25.                 }
  26.         }
  27. }
  28. typedef struct _TASK{
  29.         int Flag;//任务运行控制位
  30.         int DelayCnt;//任务周期时间数
  31.         int Cnt;     //定时时间数
  32. } TASK;
  33. void task0_run(){
  34.         if(TASK_T[0].Flag==1){
  35.                 TASK_T[0].Flag=0;
  36.                 //具体的任务代码
  37.         }
  38. }

  39. while(1){
  40.         task0_run();
  41.         task1_run();
  42.         task2_run();
  43.         task3_run();
  44.         task5_run();
  45. }


您需要登录后才可以回帖 登录 | 注册

本版积分规则

20

主题

3840

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部