OpenEdv-开源电子网

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

关于时间片轮转调度中时间片默认长度的问题

[复制链接]

11

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
120
金钱
120
注册时间
2015-10-12
在线时间
18 小时
发表于 2015-11-18 11:12:20 | 显示全部楼层 |阅读模式
5金钱
如果OSSchedRoundRobinCfg(DEF_ENABLED,1,&err);第二个参数为0的话
 0 means assumes OSCfg_TickRate_Hz / 10
这样是不是意味着我们选择的时钟频率为20hz?
20hz 为50ms
不太明白时间片默认值是100ms是如何算出来的。。
请指教,谢谢。

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2015-11-18 12:54:49 | 显示全部楼层
1、假如OS_CFG_TICK_RATE_HZ就为200,那么UCOSIII的时钟节拍为5ms,
2、默认OSCfg_TickRate_Hz等于OS_CFG_TICK_RATE_HZ,也就是200,OSCfg_TickRate_Hz / 10=20,注意了,函数OSSchedRoundRobinCfg()中的参数dflt_time_qauanta的单位是节拍,不是HZ,见下图UCOSIII中的注释!,所以这个20是20个系统节拍!不是20HZ!


3、那么20个系统节拍是多少时间呢?20*5ms=100ms,100ms不就这么出来了。
4、在邵贝贝的UCOSIII的书的387页讲解OSSchedRoundRobinCfg()函数的时候,把OSSchedRoundRobinDfltTimeQuanta的单位理解成了频率,但是你去看UCOSIII的源码 ,比如函数OSTaskCreate()中会将OSSchedRoundRobinDfltTimeQuanta赋值给OS_TCB控制块的字段TimeQuantaCtr(如果你的任务使能了时间片轮转调度的话),而OS_TCB控制块的字段TimeQuantaCtr单位是时钟节拍。所以书中讲解是貌似是错误的。你也可以使用默认值测试一下,看是100ms还是50ms的。
开往春天的手扶拖拉机
回复

使用道具 举报

11

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
120
金钱
120
注册时间
2015-10-12
在线时间
18 小时
 楼主| 发表于 2015-11-18 15:45:19 | 显示全部楼层
我试了,两个任务的时间片数都是1(创建任务的时候),然后在任务函数的while(1)中都只printf的语句,但是感觉没有明显的差别啊

回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-23 16:41

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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