五、时间管理---任务延时[OSTimeDly()]--OS_TIME.C
2015-08-04 15:21
246 查看
函数作用:就是申请让该任务延时一段时间后再在任务就绪表上登记,在此段时间里面该任务在任务就绪表的标志位会被置为‘0’;为什么要延时,很简单就是为了进行任务切换,让比这个任务优先级更低的任务运行。而系统实时都运行任务就绪表里面优先级最高的任务。一旦规定的时间期满或者有其他任务通过调用OSTimeDlyResume()取消延时。任务就会马上进入就绪状态。
函数如何实现:很简单就是让当前任务的从任务就绪表了注销(把OSRdyTbl[ ]里面对应的优先级位置‘0’)。然后进行一次任务调度。
void OSTimeDly (INT16U ticks) reentrant
{
if (ticks > 0) { /* 判断延时时间是否大于0 */
OS_ENTER_CRITICAL(); //关闭中断
if ((OSRdyTbl[OSTCBCur->OSTCBY] &= ~OSTCBCur->OSTCBBitX) == 0) { /* 将任务就绪表对应的任务优先级位置0*/
OSRdyGrp &= ~OSTCBCur->OSTCBBitY;
}
OSTCBCur->OSTCBDly = ticks; /*把要延时的时间放到任务控制块的OSTCBDly里面,用在系统时钟滴答来减减使任务退出延时 */
OS_EXIT_CRITICAL(); //打开中断
OSSched(); /* 进行任务调度,查找任务就绪表里面最高优先级的任务进行任务切换 */
}
}
函数如何实现:很简单就是让当前任务的从任务就绪表了注销(把OSRdyTbl[ ]里面对应的优先级位置‘0’)。然后进行一次任务调度。
void OSTimeDly (INT16U ticks) reentrant
{
if (ticks > 0) { /* 判断延时时间是否大于0 */
OS_ENTER_CRITICAL(); //关闭中断
if ((OSRdyTbl[OSTCBCur->OSTCBY] &= ~OSTCBCur->OSTCBBitX) == 0) { /* 将任务就绪表对应的任务优先级位置0*/
OSRdyGrp &= ~OSTCBCur->OSTCBBitY;
}
OSTCBCur->OSTCBDly = ticks; /*把要延时的时间放到任务控制块的OSTCBDly里面,用在系统时钟滴答来减减使任务退出延时 */
OS_EXIT_CRITICAL(); //打开中断
OSSched(); /* 进行任务调度,查找任务就绪表里面最高优先级的任务进行任务切换 */
}
}
相关文章推荐
- Mootools 1.2教程 函数
- autoit InputBox 函数
- 文件遍历排序函数
- Oracle 函数大全[字符串函数,数学函数,日期函数]第1/4页
- ASP下经常用的字符串等函数参考资料
- PostgreSQL教程(五):函数和操作符详解(1)
- DOS批处理 函数定义与用法
- asp Chr 函数 数字转字母的方法
- Lua中的函数精讲笔记
- Lua中的闭合函数、非全局函数与函数的尾调用详解
- Lua中调用C++函数示例
- Lua实现split函数
- Lua常用时间函数使用实例
- Lua函数与字符串处理简明总结
- Lua学习笔记之表和函数
- Lua中实现sleep函数功能的4种方法
- Lua函数用法研究
- Lua基础教程之赋值语句、表达式、流程控制、函数学习笔记
- PowerShell函数简明教程
- 探索PowerShell(十一)函数介绍