您的位置:首页 > 其它

MSP430移植μCOS-II系统之时间管理函数OSTimeDlyHMSM()延时不准确解析

2015-11-09 21:45 519 查看
    前端时间做了 μCOS-II系统在MSP430F5529上面的移植,OSTimeDlyHMSM()这个时间延时不准,找了一下原因,是因为时钟节拍的问题。

OSTimeDlyHMSM()中主要还是调用了OSTimeDly函数实现的,这个函数分辨率是时钟节拍,那问题来了,时钟节拍是多少?

时钟节拍在OS_CPU_ASM.asm文件中的 TICK ISR,我在移植时使用的是看门狗定时器,默认32ms。

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这个变量很关键,决定了这个函数延时的准确性。


这个变量在OS_CFG.H中有定义,你只需要根据你的时钟节拍,修改这个数值就可以了,我在此处的设置就是1/32ms =33左右。

--------------------------------------------------------------------------------------------分割线
下文部分摘自http://blog.csdn.net/wavemcu/article/details/6252124;

同时μCOS-II还提供了另一个系统延时函数OSTimeDlyHMSM()函数。下面来说说这个函数的基本应用。这个函数是以小时(H)、分(M)、秒(S)和毫秒(m)四个参数来定义延时时间的,函数在内部把这些参数转换为时钟节拍,再通过单次或多次调用OSTimeDly()进行延时和任务调度,所以延时原理和调用延时函数OSTimeDly()是一样的。OSTimeDlyHMSM()详细见下表。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息