UC/OS-II的函数------OSTimeDly
2016-05-14 11:32
246 查看
功能:调用该函数的任务将自己延时一段时间并执行一次任务调度,一旦规定的延时时间完成或有其它的任务通过调用OSTimeDlyResume()取消了延时,调用OSTimeDly()函数的任务马上进入就绪状态(前提是先将任务调度后执行的任务执行到程序尾,且调用OSTimeDly的任务此时优先级最高)。
//将一个任务延时若干个时钟节拍 //描述:将一个任务延时若干个时钟节拍。如果延时时间大于0,系统将立即进行任务调度。延时时间的长度 // 可从0到65535个时钟节拍。延时时间0表示不进行延时,函数将立即返回调用者。延时的具体时间依 // 赖于系统每秒钟有多少时钟节拍(由文件OS_CFG.H中的常量OS_TICKS_PER_SEC设定) // //附加:调用该函数会使uCOS-II进行一次任务调度,并且执行下一个优先级最高的就绪态任务。任务调用 // OSTimeDly()后,一旦规定的时间期满或者有其它的任务通过调用OSTimeDlyResume()取消了延时, // 它就会马上进入就绪状态。注意,只有当该任务在所有就绪任务中具有最高的优先级时,它才会立即 // 运行。 // //参数:ticks 为要延时的时钟节拍数。(一个1到65535之间的数) // //注意:注意到延时时间0表示不进行延时操作,而立即返回调用者,为了确保设定的延时时间,建议用户设定 // 的时钟节拍数加1。例如,希望延时10个时钟节拍,可设定参数为11。 // //任务延时函数(时钟节拍数) void OSTimeDly (INT16U ticks) { #if OS_CRITICAL_METHOD == 3 //中断函数被设定为模式3 OS_CPU_SR cpu_sr; #endif if (ticks > 0) { //如果延时设定为0值,表示不想对任务延时,返回调用任务 OS_ENTER_CRITICAL(); //关闭中断 if ((OSRdyTbl[OSTCBCur->OSTCBY] &= ~OSTCBCur->OSTCBBitX) == 0) { /* Delay current task */ OSRdyGrp &= ~OSTCBCur->OSTCBBitY; } //非0值会使得任务延时函数OSTimeDly()将当前任务从就绪表中移除 OSTCBCur->OSTCBDly = ticks; //接着,这个延时节拍数会被保存在当前任务的OS_TCB中 OS_EXIT_CRITICAL(); //打开中断 OS_Sched(); //既然任务已经不再处于就绪任务,(任务调度),任务调度程序会执行下一个优先级最高的就绪任务 } }
相关文章推荐
- java打印九九乘法表,嵌套for循环,二维数组
- Get方式请求网络数据+Fragment+SharedPreferences
- 自己动手写计算器v1.1
- equals()和hashCode()区别?
- LINUX RPM卸载
- 总结thinkphp快捷查询getBy、getField、getFieldBy用法及场景
- 总结thinkphp快捷查询getBy、getField、getFieldBy用法及场景
- 腾讯云在线直播一
- Linux 是世界上最大的软件开发项目
- hdu 1558 Segment set
- QEMU-KVM中的多线程压缩迁移技术
- Servlet学习(一)Servlet简介以及实现Hello World
- 今年暑假不ac
- 总结thinkphp快捷查询getBy、getField、getFieldBy用法及场景
- XML语言
- 【转】keypress keydown keyup 区别
- 我自己总结的C#开发命名规范整理了一份
- JavaWeb学习笔记——Tomcat数据源
- c#串口温度数据的波形采集
- 拉低程序员社会地位的十大因素