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