延时函数
来源:互联网 发布:网络运营商排行榜 编辑:程序博客网 时间:2024/05/19 18:10
- OSTimeDly()虽然是一个非常有用的函数,但用户的应用程序需要知道延时时间对应的时钟节拍的数目。用户可以使用定义全局常数OS_TICKS_PER_SEC(参看OS_CFG.H)的方法将时间转换成时钟段,但这种方法有时显得比较愚笨。笔者增加了OSTimeDlyHMSM()函数后,用户就可以按小时(H)、分(M)、秒(S)和毫秒(m)来定义时间了,这样会显得更自然些。与OSTimeDly()一样,调用OSTimeDlyHMSM()函数也会使µC/OS-Ⅱ进行一次任务调度,并且执行下一个优先级最高的就绪态任务。任务调用OSTimeDlyHMSM()后,一旦规定的时间期满或者有其它的任务通过调用OSTimeDlyResume()取消了延时(参看5.02,恢复延时的任务OSTimeDlyResume()),它就会马上处于就绪态。同样,只有当该任务在所有就绪态任务中具有最高的优先级时,它才会立即运行。
- 程序清单 L5.2所示的是OSTimeDlyHMSM()的代码。从中可以看出,应用程序是通过用小时、分、秒和毫秒指定延时来调用该函数的。在实际应用中,用户应避免使任务延时过长的时间,因为从任务中获得一些反馈行为(如减少计数器,清除LED等等)经常是很不错的事。但是,如果用户确实需要延时长时间的话,µC/OS-Ⅱ可以将任务延时长达256个小时(接近11天)。
- OSTimeDlyHMSM()一开始先要检验用户是否为参数定义了有效的值[L5.2(1)]。与OSTimeDly()一样,即使用户没有定义延时,OSTimeDlyHMSM()也是存在的[L5.2(9)]。因为µC/OS-Ⅱ只知道节拍,所以节拍总数是从指定的时间中计算出来的[L5.2(3)]。很明显,程序清单 L5.2中的程序并不是十分有效的。笔者只是用这种方法告诉大家一个公式,这样用户就可以知道怎样计算总的节拍数了。真正有意义的只是OS_TICKS_PER_SEC。[L5.2(3)]决定了最接近需要延迟的时间的时钟节拍总数。500/OS_TICKS_PER_SECOND的值基本上与0.5个节拍对应的毫秒数相同。例如,若将时钟频率(OS_TICKS_PER_SEC)设置成100Hz(10ms),4ms的延时不会产生任何延时!而5ms的延时就等于延时10ms。
- µC/OS-Ⅱ支持的延时最长为65,535个节拍。要想支持更长时间的延时,如L5.2(2)所示,OSTimeDlyHMSM()确定了用户想延时多少次超过65,535个节拍的数目[L5.2(4)]和剩下的节拍数[L5.2(5)]。例如,若OS_TICKS_PER_SEC的值为100,用户想延时15分钟,则OSTimeDlyHMSM()会延时15x60x100=90,000个时钟。这个延时会被分割成两次32,768个节拍的延时(因为用户只能延时65,535个节拍而不是65536个节拍)和一次24,464个节拍的延时。在这种情况下,OSTimeDlyHMSM()首先考虑剩下的节拍,然后是超过65,535的节拍数[L5.2(7)和(8)](即两个32,768个节拍延时)
0 0
- 延时函数
- 延时函数
- 延时函数
- 延时函数
- 延时函数
- 延时函数
- 延时函数
- 延时函数
- 延时函数
- 延时函数
- 延时函数
- 延时函数
- js的延时函数
- Linux中的延时函数
- js的延时函数
- linux延时函数
- linux延时函数
- c++延时函数
- JAVA学习重点笔记01
- 干货:结合Scikit-learn介绍几种常用的特征选择方法 (文章实在找不到最原始出处了,个人感觉是kaggle上的大神写的)
- 面试准备---java设计模式
- 成员变量初始化的问题
- 【并发】简单粗暴之锁文件
- 延时函数
- android实现抖动效果
- JDK、JVM、JRE的区别和联系
- jQuery响应式多级下拉导航菜单特效
- Unity3d面试题
- 简单的java多线程源码分享(一)
- hdu1024 scut训练1 dp
- 1009
- 对有n个人围成的一个圆圈进行按报数规则全部取数出列