OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5319|回复: 7

OSSchedRoundRobinCfg该函数第二个参数不管设多少,轮转的时间不变,哪里出问题了?

[复制链接]

18

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
90
金钱
90
注册时间
2015-10-24
在线时间
36 小时
发表于 2016-11-10 09:29:38 | 显示全部楼层 |阅读模式
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
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

5

主题

99

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
289
金钱
289
注册时间
2016-10-27
在线时间
76 小时
发表于 2016-11-10 09:29:39 | 显示全部楼层
你好 刚才关于这个函数我查了下  OSSchedRoundRobinCfg这个函数的第二个参数是默认的时间片长度的意思,也就是说如果你创建任务时设置的时间片长度为0,那么系统会用这个值来代替,不知你明白了吗,如果你想用这个函数改变时间片的话,创建任务时需要将时间片设为0
回复

使用道具 举报

5

主题

99

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
289
金钱
289
注册时间
2016-10-27
在线时间
76 小时
发表于 2016-11-10 09:49:38 | 显示全部楼层
本帖最后由 ljz1987cj 于 2016-11-10 10:09 编辑

是不是应该先将任务停下来再设置呢  还有是否有相同优先级的任务 时间片只对相同优先级的任务起作用。
回复

使用道具 举报

18

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
90
金钱
90
注册时间
2015-10-24
在线时间
36 小时
 楼主| 发表于 2016-11-10 14:10:51 | 显示全部楼层
ljz1987cj 发表于 2016-11-10 09:49
是不是应该先将任务停下来再设置呢  还有是否有相同优先级的任务 时间片只对相同优先级的任务起作用。

我程序里创建了2个优秀级相同的任务 Task1 和Task2的!
任务1和任务2是有轮转起来的,但是时间片不随着OSSchedRoundRobinCfg(DEF_ENABLED,1,&err);  这函数的第二个参数的变化而变化
回复

使用道具 举报

18

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
90
金钱
90
注册时间
2015-10-24
在线时间
36 小时
 楼主| 发表于 2016-11-11 14:23:12 | 显示全部楼层
ljz1987cj 发表于 2016-11-10 15:19
你好 刚才关于这个函数我查了下  OSSchedRoundRobinCfg这个函数的第二个参数是默认的时间片长度的意思,也 ...

谢谢这位仁兄解答!
我按照你的意思,又去试了下,确实当创建任务时设置的时间片长度为0时,OSSchedRoundRobinCfg这个函数的第二个参数设置就起的作用。
我又重新看了遍手册,是我对创建函数的那个设置时间参数理解有误。
创建函数这个时间参数也是对时间片长度的设置!
那如果我对创建函数时间参数做了设置,是不是OSSchedRoundRobinCfg这个函数的第二个参数的设置就不起作用,此函数就只有打开时间片轮转,使任务调度的作用了???
回复

使用道具 举报

5

主题

99

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
289
金钱
289
注册时间
2016-10-27
在线时间
76 小时
发表于 2016-11-11 15:34:05 | 显示全部楼层
db520136 发表于 2016-11-11 14:23
谢谢这位仁兄解答!
我按照你的意思,又去试了下,确实当创建任务时设置的时间片长度为0时,OSSchedRoun ...

是的 就是这个意思
回复

使用道具 举报

18

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
90
金钱
90
注册时间
2015-10-24
在线时间
36 小时
 楼主| 发表于 2016-11-13 21:41:57 | 显示全部楼层
ljz1987cj 发表于 2016-11-11 15:34
是的 就是这个意思

谢谢解惑
回复

使用道具 举报

2

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
113
金钱
113
注册时间
2016-9-5
在线时间
21 小时
发表于 2020-2-18 21:05:31 | 显示全部楼层
原子的使用手册写的有点模糊,我一直认为是OSSchedRoundRobinCfg()和创建任务是的时间片长度共同作用了,看了你们的回复才知道是什么意思
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 16:57

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表