初级会员

- 积分
- 52
- 金钱
- 52
- 注册时间
- 2015-5-28
- 在线时间
- 1 小时
|
发表于 2015-6-26 08:40:41
|
显示全部楼层
回复【5楼】isky:
---------------------------------
让我们看到函数OSTimeDlyHMSM()中的这一行:
ticks = ((INT32U)hours * 3600L + (INT32U)minutes * 60L + (INT32U)seconds) * OS_TICKS_PER_SEC
+ OS_TICKS_PER_SEC * ((INT32U)ms + 500L / OS_TICKS_PER_SEC) / 1000L;
根据你的问题,我们重点关注这部分:
OS_TICKS_PER_SEC * ((INT32U)ms + 500L / OS_TICKS_PER_SEC) / 1000L .................(1)
我们约定: 用k代表 OS_TICKS_PER_SEC , 用 x 表示ms ,则式(1)等价为:
k*(x + 500/k)/1000;
当系统节拍为5ms时,OS_TICKS_PER_SEC = 200, 上式等价为:
200*(x + 2)/1000;
因为 x 是 INT16U 类型, 所以:
当 x < 3 时, ticks = 0 , 无延时;
当 x = 3 时, ticks = 1, 5ms;
当 x = 4 时, ticks = 1, 5ms;
当 x = 6时, ticks = 1, 5ms;
...
其他条件下,也可以用同样的方法类推,希望对你有帮助! |
|