初级会员
- 积分
- 90
- 金钱
- 90
- 注册时间
- 2015-10-24
- 在线时间
- 36 小时
|
20金钱
#if OS_CFG_SCHED_ROUND_ROBIN_EN
OSSchedRoundRobinCfg(DEF_ENABLED,1,&err);
#endif
我看原子哥的视频还有看了手册,这个函数的第二个参数我理解成一个时间片的时间长度!
比如是1那么就是 一个时间片:1*5 =5ms
若是2那么就是一个时间片:2*5 =10ms
若是0那么默认一个时间片: 100ms
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,
(OS_TICK )2,
(void * )0,
(OS_OPT )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR,
(OS_ERR * )&err);
然后OSTaskCreate函数的参数 (OS_TICK) 这里就是设置该任务最大执行时间!
比如我这里设置了2,那么就是该任务最多有2个时间片的时间执行!
若是设置成3,那么就是该任务最多有3个时间片的时间执行!
以上是我的理解!
但是我在程序中,改了下OSSchedRoundRobinCfg(DEF_ENABLED,1,&err); 中的第2个参数值,发现任务执行的时间根本没变!
不管我把这个值改成0还是多少,任务最大执行时间都是固定。
只有我改了OSTaskCreate函数的参数 (OS_TICK) ,任务最大执行时间才会随之改变!
这样就让我感觉一个时间片的长短是固定的,不是随着OSSchedRoundRobinCfg(); 中的第2个参数值而改变的!
求原子哥或者懂的各位解惑下!万分感谢!! |
最佳答案
查看完整内容[请看2#楼]
你好 刚才关于这个函数我查了下 OSSchedRoundRobinCfg这个函数的第二个参数是默认的时间片长度的意思,也就是说如果你创建任务时设置的时间片长度为0,那么系统会用这个值来代替,不知你明白了吗,如果你想用这个函数改变时间片的话,创建任务时需要将时间片设为0
|