前端时间做了 μ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_CFG.H中有定义,你只需要根据你的时钟节拍,修改这个数值就可以了,我在此处的设置就是1/32ms =33左右。
--------------------------------------------------------------------------------------------分割线下文部分摘自http://blog.csdn.net/wavemcu/article/details/6252124;
同时μCOS-II还提供了另一个系统延时函数OSTimeDlyHMSM()函数。下面来说说这个函数的基本应用。这个函数是以小时(H)、分(M)、秒(S)和毫秒(m)四个参数来定义延时时间的,函数在内部把这些参数转换为时钟节拍,再通过单次或多次调用OSTimeDly()进行延时和任务调度,所以延时原理和调用延时函数OSTimeDly()是一样的。OSTimeDlyHMSM()详细见下表。