在使用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
}
}
|