在使用UcosIII时,想使任务1工作时间比任务2的时间长 
现有疑问如下: 
1、我对OSTaskCreate()函数中的参数 (OS_TICK     )    20, 理解是,控制任务1工作的时间是200个时间片 
2,我对OSSchedRoundRobinCfg(DEF_ENABLED,1,&err)中的参数"1"的理解是,设置一个时间片长度(比如5ms) 
我这样理解应该是正确的吧? 
 
,我在OSTaskCreate()函数里把任务1与任务2分别设置为20   4  但是发现运行结果和都是3  3的结果一样,都是分别打印5次 
我认为,结果应该是:任务1打印次数应该远远多于任务2 
 
 
请问,这该怎么解释? 
 
//创建TASK1任务 
        OSTaskCreate((OS_TCB*    )      &Task1_TaskTCB,             //任务控制块 
                     (CPU_CHAR*  )     "task1 task",               //任务名字 
                     (OS_TASK_PTR)     task1_task,                 //任务函数 
                     (void *     )     0,                          //传递给任务函数的参数 
                                                         (OS_PRIO    )     TASK1_TASK_PRIO,            //任务优先级 
                                                         (CPU_STK*   )     &TASK1_TASK_STK[0],         //任务堆栈基地址 
                                                         (CPU_STK_SIZE)    TASK1_STK_SIZE/10,          //任务堆栈深度限位 
                                                         (CPU_STK_SIZE)    TASK1_STK_SIZE,             //任务堆栈大小 
                                                         (OS_MSG_QTY  )    0,                          //任务内部消息队列能够接收 
                                                                                                       //的最大消息数目,为0时禁止接收消息 
                                                          
                                                          
                                                         (OS_TICK     )    20,                          //当使能时间片轮转时的时间片长度,为0时为默认长度 
                                                         (void *      )    0,                          //用户补充的存储区 
                                                                  
                                                         (OS_OPT      )    OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR,   //任务选项 
                                                         (OS_ERR*     )    &err    );                   //存放该函数错误时的返回值 
         
         
                                                          
                                                         //创建TASK2任务 
        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,                          //任务内部消息队列能够接收 
                                                                                                       //的最大消息数目,为0时禁止接收消息 
                                                          
                                                          
                                                         (OS_TICK     )    4,                          //当使能时间片轮转时的时间片长度,为0时为默认长度 
                                                         (void *      )    0,                          //用户补充的存储区 
                                                                  
                                                         (OS_OPT      )    OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR,   //任务选项 
                                                         (OS_ERR*     )    &err    );                   //存放该函数错误时的返回值 
 
 
 
 
//task1任务函数 
void task1_task(void *p_arg) 
{ 
        u8 i,task1_num=0; 
        OS_ERR err; 
        p_arg = p_arg; 
          
        POINT_COLOR = RED; 
        LCD_ShowString(30,130,110,16,16,"Task1 Run:000"); 
        POINT_COLOR = BLUE; 
        while(1) 
        { 
                task1_num++;        //任务1执行次数加1 注意task1_num1加到255的时候会清零!! 
                LCD_ShowxNum(110,130,task1_num,3,16,0x80);        //显示任务执行次数 
                for(i=0;i<5;i++) printf("Task1:01234\r\n"); 
                LED0 = ~LED0; 
                OSTimeDlyHMSM(0,0,1,0,OS_OPT_TIME_HMSM_STRICT,&err); //延时1s 
                 
        } 
} 
 
 
 
//task2任务函数 
void task2_task(void *p_arg) 
{ 
        u8 i,task2_num=0; 
        OS_ERR err; 
        p_arg = p_arg; 
         
        POINT_COLOR = RED; 
        LCD_ShowString(30,150,110,16,16,"Task2 Run:000"); 
        POINT_COLOR = BLUE; 
        while(1) 
        { 
                task2_num++;        //任务2执行次数加1 注意task1_num2加到255的时候会清零!! 
                LCD_ShowxNum(110,150,task2_num,3,16,0x80);  //显示任务执行次数 
                for(i=0;i<5;i++) printf("Task2:56789\r\n"); 
                LED1 = ~LED1; 
                OSTimeDlyHMSM(0,0,1,0,OS_OPT_TIME_HMSM_STRICT,&err); //延时1s 
        } 
} 
 
 
 
 
 
                                                  
                                                          
 
 |