UCOS 的延时函数OSTimeDlyHMSM()实现精确延时 .
来源:互联网 发布:西门子802d编程实例 编辑:程序博客网 时间:2024/04/27 10:35
UCOS 的延时函数OSTimeDlyHMSM()实现精确延时
介绍UCOS的资料汗牛,但详细解说OSTimeDlyHMSM()函数的不多,经过本人仔细研究该函数代码并通过调试发现:要想实现精确延时的对代码进行相应的修正。
本人实现的是UCOS在2812上的移植,在其它DSP型号上移植情况是一样的,相差不大。
以下是OSTimeDlyHMSM()函数的代码片段:
ticks = ((INT32U)hours * 3600L + (INT32U)minutes * 60L + (INT32U)seconds) * OS_TICKS_PER_SEC
+ OS_TICKS_PER_SEC * ((INT32U)milli + 1000L / OS_TICKS_PER_SEC) / 1000L;
loops = ticks / 65536L; /* Compute the integral number of 65536 tick delays */
ticks = ticks % 65536L;
OSTimeDly(ticks);
while (loops > 0) {
OSTimeDly(32768);
OSTimeDly(32768);
loops--;
由ticks表达式看出:ticks的值与OS_TICKS_PER_SEC宏(一般设为100或200)的大小相关,为精确延时,请务必注意两点:
1、OS_TICKS_PER_SEC取100或200时OS_TICKS_PER_SEC * ((aINT32U)milli + 1000L / OS_TICKS_PER_SEC) / 1000L部分中的分子1000L应作相应的调整,比如当OS_TICKS_PER_SEC取100时,分子应为500L,而200时为1000L。
2、以上只是实现精确延时的第一步,我们知道,时钟节拍ticks是通过定时器中断来实现,在配置定时器时,函数
void ConfigCpuTimer(struct CPUTIMER_VARS *Timer, float Freq, float Period)中的 float Freq和 float Period俩参数取值有讲究:Freq要求为Mhz,其对应DSP的SysCtrlRegs.HISPCP的工作频率,Period单位为US,一般取为1000000/OS_TICKS_PER_SEC,为什么这样,请大家自己好好琢磨,只有这样才记得深刻,对吧!
完成以上两步,你便可放心大胆的运用该函数了,好好品味那种随心所欲驾驭任何长时间延时的成就感吧!!
介绍UCOS的资料汗牛,但详细解说OSTimeDlyHMSM()函数的不多,经过本人仔细研究该函数代码并通过调试发现:要想实现精确延时的对代码进行相应的修正。
本人实现的是UCOS在2812上的移植,在其它DSP型号上移植情况是一样的,相差不大。
以下是OSTimeDlyHMSM()函数的代码片段:
ticks = ((INT32U)hours * 3600L + (INT32U)minutes * 60L + (INT32U)seconds) * OS_TICKS_PER_SEC
+ OS_TICKS_PER_SEC * ((INT32U)milli + 1000L / OS_TICKS_PER_SEC) / 1000L;
loops = ticks / 65536L; /* Compute the integral number of 65536 tick delays */
ticks = ticks % 65536L;
OSTimeDly(ticks);
while (loops > 0) {
OSTimeDly(32768);
OSTimeDly(32768);
loops--;
由ticks表达式看出:ticks的值与OS_TICKS_PER_SEC宏(一般设为100或200)的大小相关,为精确延时,请务必注意两点:
1、OS_TICKS_PER_SEC取100或200时OS_TICKS_PER_SEC * ((aINT32U)milli + 1000L / OS_TICKS_PER_SEC) / 1000L部分中的分子1000L应作相应的调整,比如当OS_TICKS_PER_SEC取100时,分子应为500L,而200时为1000L。
2、以上只是实现精确延时的第一步,我们知道,时钟节拍ticks是通过定时器中断来实现,在配置定时器时,函数
void ConfigCpuTimer(struct CPUTIMER_VARS *Timer, float Freq, float Period)中的 float Freq和 float Period俩参数取值有讲究:Freq要求为Mhz,其对应DSP的SysCtrlRegs.HISPCP的工作频率,Period单位为US,一般取为1000000/OS_TICKS_PER_SEC,为什么这样,请大家自己好好琢磨,只有这样才记得深刻,对吧!
完成以上两步,你便可放心大胆的运用该函数了,好好品味那种随心所欲驾驭任何长时间延时的成就感吧!!
http://blog.csdn.net/fengfei2000/article/details/3183090
- UCOS 的延时函数OSTimeDlyHMSM()实现精确延时 .
- UCOS 的延时函数OSTimeDlyHMSM()实现精确延时
- 按时分秒延时函数 OSTimeDlyHMSM()
- 按时分秒延时函数 OSTimeDlyHMSM()
- ucos精确延时
- 精确延时的实现
- stm32f051精确延时的实现
- ucos 任务延时函数
- 精确延时函数DelayTime
- 精确延时函数DelayTime .
- 怎样编写精确的延时函数
- 利用stm32f103的TIM2实现精确延时
- MSP430的精确延时
- STM32的精确延时
- uCOS-II任务延时函数
- ucos II 任务延时函数
- Ucos II 任务延时函数
- DOS下面关于精确延时1ms的函数(理论上可以非常精确延时到10微妙级别)
- git 源码安装
- iPhone 的国际化
- poj(2635 大数取模)
- RMAN异机恢复,将指定的表空间恢复到8月12号2点8分
- [学习笔记] 查找相关文档
- UCOS 的延时函数OSTimeDlyHMSM()实现精确延时 .
- 利用webservice和jms实现系统间的数据同步之二
- ZOJ 1115 Digital Roots
- ROBBIN - NoSQL数据库探讨之一 - 为什么要用非关系数据库?
- Oracle字符串函数
- 再来一个VMP破解 爱天空手机QQ聊天记录查看器 MobileQQk0708sp3.exe
- javascript对象的property和prototype是这样一种关系
- [学习笔记] 文件操作
- android将图片转成字符串,再将字符串转成图片 (base64处理的字符串)