①时间片轮转调度:
UCOSIII允许在同一优先级下有多个任务。
每个任务执行指定的时间(时间片),然后轮到下一个任务执行,当一个任务不想再运行的时候就可以放弃该任务的时间片(OSTaskCreate函数定义时间片)。
②任务如何被调度和运行:
先判断该任务的时间片是否有剩余,如果有就直接返回不切换;如果没有,就进行切换。每次任务切换后运行的都是处于就绪任务列表OSRdyList[ ]链表头的任务,当这个任务的时间片用完后这个任务就会被放到链表尾,然后再运行新的链表头的任务。
步骤:
1,使能OS_CFG_SCHED_ROUND_ROBIN_EN为1
2,start任务函数中编写OSSchedRoundRobinCfg()函数来使能 UCOSIII 如:OSSchedRoundRobinCfg(DEF_ENABLED,1,&err);
3,start任务函数中编写任务函数中的片转时间属性;
OSTaskCreate((OS_TCB *)&Task2_TaskTCB,
(CPU_CHAR *)"task2 task",
(OS_TASK_PTR )task2_task,
(void *)0,
(OS_PRIO )TASK2_TASK_PRIO,
(CPU_STK *)&TASK2_TASK_STK[0],
(CPU_STK_SIZE )TASK2_STK_SIZE/10,
(CPU_STK_SIZE )TASK2_STK_SIZE,
(OS_MSG_QTY )0,
(OS_TICK )2, //2 个时间片,时间片可通过参数预设
(void *)0,
(OS_OPT )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR,
(OS_ERR *)&err);