关于ucos-iii相同优先级时间片调度的问题
我想请教一下,ucos-iii相同优先级时间片调度的问题,是怎么工作的,是时间片到了就强制切换task吗?不用等当前活动的那个主动释放,好像freertos是这样子的! 像VC的多线程 时间到了就进行一次任务调度,至于是不是会将当前的任务挂起,这个要看是否有和当前任务优先级别相同的其他任务。 我的测试程序的如下:int main()
{
OS_ERR err;
OSInit(&err);
OSTaskCreate( (OS_TCB *) &Task1TCB,
(CPU_CHAR*) "Task1 Start",
(OS_TASK_PTR) Task1,
(void *) 0,
(OS_PRIO ) 3,
(CPU_STK *) &Task1Stk,
(CPU_STK_SIZE) 12,
(CPU_STK_SIZE) 128,
(OS_MSG_QTY) 0,
(OS_TICK) 1,
(void *) 0,
(OS_OPT) (OS_OPT_TASK_STK_CHK | OS_OPT_TASK_STK_CLR),
(OS_ERR*) &err);
OSStart(&err);
}
staticvoidTask1(void *p_arg)
{
OS_ERR err;
SystemInit();
SysTick_Configuration();
OSTaskCreate( (OS_TCB *) &Task3TCB,
(CPU_CHAR*) "Task3 Start",
(OS_TASK_PTR ) Task3,
(void *) 0,
(OS_PRIO ) 3,
(CPU_STK *) &Task3Stk,
(CPU_STK_SIZE) 12,
(CPU_STK_SIZE) 128,
(OS_MSG_QTY) 0,
(OS_TICK) 0,
(void *) 0,
(OS_OPT) (OS_OPT_TASK_STK_CHK | OS_OPT_TASK_STK_CLR),
(OS_ERR*) &err);
OSTaskCreate( (OS_TCB *) &Task2TCB,
(CPU_CHAR*) "Task2 Start",
(OS_TASK_PTR ) Task2,
(void *) 0,
(OS_PRIO ) 3,
(CPU_STK *) &Task2Stk,
(CPU_STK_SIZE) 12,
(CPU_STK_SIZE) 128,
(OS_MSG_QTY) 0,
(OS_TICK) 0,
(void *) 0,
(OS_OPT) (OS_OPT_TASK_STK_CHK | OS_OPT_TASK_STK_CLR),
(OS_ERR*) &err);
while(1)
{
OSTimeDly(200,OS_OPT_TIME_DLY,&err);
}
}
staticvoidTask2(void *p_arg)
{
OS_ERR err;
CPU_INT32U cout;
OSSchedRoundRobinCfg(DEF_ENABLED,0,&err);
while(1)
{
// OSTimeDly(200,OS_OPT_TIME_DLY,&err);
while(cout++ < 10000000);
cout = 0;
}
}
staticvoidTask3(void *p_arg)
{
OS_ERR err;
CPU_INT32U cout;
while(1)
{
// OSTimeDly(200,OS_OPT_TIME_DLY,&err);
while(cout++ < 10000000);
cout = 0;
}
}
如果程序总是在Task3里运行,无法运行Task2, freertos运行我这样子的程序,两个任务都可以运行的到! 不知ucos的时间片调度是怎么个原理!
页:
[1]