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()详细见下表。
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()详细见下表。
相关文章推荐
- msp430中adc12与PWM配合使用
- 基于LaunchPad的Nokia5110显示
- msp430 按键 中断 轮询
- msp430 timerA interrupt
- MSP430 AD 单通道单次转换
- i/O 中断
- MSP430F149学习笔记——时钟
- MSP430F149学习笔记——时钟
- 对于MSP430与SIM900A无法通信的问题解决
- MSP430仿真器降级失败的解决办法
- msp430学习笔记之时钟
- msp430学习笔记之uart
- msp430学习笔记之中断处理函数
- 关于软件I2C与MSP430通信的问题
- μC/OS-II 常用函数参考手册
- MSP430 Launchpad MSP430g2452 SHT10 温湿度传感器
- 手把手教你使用TI MSP430 LaunchPad
- [MSP430] 1.第一个工程
- [MSP430] 3.UART
- 一个关于msp430 编译的错误