本帖最后由 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();
}
|