初级会员

- 积分
- 115
- 金钱
- 115
- 注册时间
- 2015-9-27
- 在线时间
- 23 小时
|
1金钱
如题,我在探索者板子上移植了UCOSIII和STemWin,做时间片那个视频的实验的时候,OS_CFG_TICK_RATE_HZ定义的是1000u
OSSchedRoundRobinCfg(DEF_ENABLED,10,&err);
时间片长度是10*1=10ms对吧?
void TASK2_Task(void *p_arg)
{
OS_ERR err;
while(1)
{
printf("Task2:789abc\r\n");
OSTimeDlyHMSM(0, 0, 1, 0, OS_OPT_TIME_HMSM_STRICT, &err);
}
}
void TASK1_Task(void *p_arg)
{
OS_ERR err;
while(1)
{
printf("Task1:123456\r\n");
OSTimeDlyHMSM(0, 0, 1, 0, OS_OPT_TIME_HMSM_STRICT, &err);
}
}
创建任务时两个任务的时间片长度的参数都是2,2*10=20ms
实际的输出是
Task1:12345Task2:7896
ab
反正就是视频教程里出现的类似,TASK1在自己的时间片里没执行完就执行TASK2,然后TASK2的时间片,完了又回来继续执行TASK1
两个任务就是简单的串口输出,要是我时间片长度没算错是20ms的话,这不合理啊
OSTaskCreate(......
(OS_TICK )2,
......);
红色的这个参数我改成过10、20、100、500、1000、5000、10000,结果都一样没啥效果
我就想可能是我移植的过程中哪里出错了,我就用原子哥的例6-3的时间片调度的例子来改
OS_CFG_TICK_RATE_HZ定义的是1000u
OSSchedRoundRobinCfg(DEF_ENABLED,10,&err);
OSTaskCreate(......
(OS_TICK )2,
......);
改的就这几个,最后发现和我自己移植的程序的效果是一样一样的,请教这是怎么回事?
|
最佳答案
查看完整内容[请看2#楼]
啊,OSSchedRoundRobinCfg设置的是默认的时间片长度,就是多少个时钟节拍
OSTaskCreate(......
(OS_TICK )2,
......);
这个是设置这个任务的时间片长度是多少个时钟节拍,不是设置它是默认时间片长度的多少倍
|