资深版主
- 积分
- 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的。 |
|