恢复任务,OSTaskResume()
来源:互联网 发布:c语言教材 编辑:程序博客网 时间:2024/06/03 22:41
- 在上一节中曾提到过,被挂起的任务只有通过调用OSTaskResume()才能恢复。OSTaskResume()函数的代码如程序清单 L4.17所示。因为OSTaskSuspend()不能挂起空闲任务,所以必须得确认用户的应用程序不是在恢复空闲任务[L4.17(1)]。注意,这个测试也可以确保用户不是在恢复优先级为OS_PRIO_SELF的任务(OS_PRIO_SELF被定义为0xFF,它总是比OS_LOWEST_PRIO大)。
- 要恢复的任务必须是存在的,因为用户要需要操作它的任务控制块OS_TCB[L4.17(2)],并且该任务必须是被挂起的[L4.17(3)]。OSTaskResume()是通过清除OSTCBStat域中的OS_STAT_SUSPEND位来取消挂起的[L4.17(4)]。要使任务处于就绪状态,OS_TCBDly域必须为0[L4.17(5)],这是因为在OSTCBStat中没有任何标志表明任务正在等待延时的期满。只有当以上两个条件都满足的时候,任务才处于就绪状态[L4.17(6)]。最后,任务调度程序会检查被恢复的任务拥有的优先级是否比调用本函数的任务的优先级高[L4.17(7)]。
- 程序清单 L 4.17 OSTaskResume().
- INT8U OSTaskResume (INT8U prio)
- {
- OS_TCB *ptcb;
- If (prio >= OS_LOWEST_PRIO) { (1)
- return (OS_PRIO_INVALID);
- }
- OS_ENTER_CRITICAL();
- If ((ptcb = OSTCBPrioTbl[prio]) == (OS_TCB *)0) { (2)
- OS_EXIT_CRITICAL();
- return (OS_TASK_RESUME_PRIO);
- } else {
- if (ptcb->OSTCBStat & OS_STAT_SUSPEND) { (3)
- if (((ptcb->OSTCBStat &= ~OS_STAT_SUSPEND) == OS_STAT_RDY) && (4)
- (ptcb->OSTCBDly == 0)) { (5)
- OSRdyGrp |= ptcb->OSTCBBitY; (6)
- OSRdyTbl[ptcb->OSTCBY] |= ptcb->OSTCBBitX;
- OS_EXIT_CRITICAL();
- OSSched(); (7)
- } else { OS_EXIT_CRITICAL();
- }
- return (OS_NO_ERR);
- } else {
- OS_EXIT_CRITICAL();
- return (OS_TASK_NOT_SUSPENDED);
- }
- }
- }
0 0
- 恢复任务,OSTaskResume()
- 恢复任务,OSTaskResume()
- 对恢复任务函数OSTaskResume()的理解
- 任务挂起和恢复
- ucos恢复任务
- UCOSII任务挂起,删除,恢复
- FreeRTOS 任务挂起和恢复
- freeRTOS 任务挂起和恢复
- ucos-ii 中OSTaskResume函数理解
- 恢复任务管理器(Task Manager)界面
- Oracle恢复失败多次定时任务
- 恢复消失的Win7任务管理器
- Oracle DB还原和恢复任务
- ucos 任务的挂起与恢复
- 恢复误删除的crontab计划任务
- Oracle数据库Java备份恢复定时任务
- FreeRTOS学习1--任务挂起与恢复
- FreeRTOS之任务挂起和恢复函数
- String cannot be resolved to a type
- Javascript模块化编程(三):require.js的用法
- 跨域访问-预请求及跨域常见问题
- Linux jar 后台运行解决方案,nohup: ignoring input and redirecting stderr to stdout 解决方案
- 凸多边形三角划分 catelan数
- 恢复任务,OSTaskResume()
- 移动端 touch 手机拖动 css停止问题
- 如何从零构建实时的个性化推荐系统?
- Linux环境变量
- 机智云智能家电运营管理服务平台获艾普兰智能创新奖
- Java 和 JavaScript 是两门不同的编程语言。
- 坑
- creator 监听事件
- python2.7+opencv2.4.10安装及对mp4的操作