打印
[其它]

定时器之任务调度

[复制链接]
412|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jimmhu|  楼主 | 2022-11-24 11:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 eltonchang2001 于 2022-11-24 11:57 编辑

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

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

TASK TASK_T[TASK_MAX_LENGTH]={
        {0,50,0},
        {0,1000,0},
        {0,10,0},
        {0,10,0},
        {0,5000,0}
};
//1ms中断一次,0.1ms 10%CPU
void TIM0_INT(void) interrupt 1
{
        int i;
        task4_run();
        for(i=0;i<TASK_MAX_LENGTH;i++){
                TASK_T[i].Cnt++;
                if(TASK_T[i].Cnt==TASK_T[i].DelayCnt){
                        TASK_T[i].Flag=1;
                    TASK_T[i].Cnt=0;
                }
        }
}
typedef struct _TASK{
        int Flag;//任务运行控制位
        int DelayCnt;//任务周期时间数
        int Cnt;     //定时时间数
} TASK;
void task0_run(){
        if(TASK_T[0].Flag==1){
                TASK_T[0].Flag=0;
                //具体的任务代码
        }
}

while(1){
        task0_run();
        task1_run();
        task2_run();
        task3_run();
        task5_run();
}


使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

16

主题

3528

帖子

4

粉丝