lwh1027 发表于 2012-7-12 10:08:03

关于ucos-iii相同优先级时间片调度的问题

         我想请教一下,ucos-iii相同优先级时间片调度的问题,是怎么工作的,是时间片到了就强制切换task吗?不用等当前活动的那个主动释放,好像freertos是这样子的! 像VC的多线程

tiancaigao7 发表于 2012-7-12 13:52:28

时间到了就进行一次任务调度,至于是不是会将当前的任务挂起,这个要看是否有和当前任务优先级别相同的其他任务。

lwh1027 发表于 2012-7-13 16:21:47

我的测试程序的如下:
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]
查看完整版本: 关于ucos-iii相同优先级时间片调度的问题