ucos-ii 中OSTaskResume函数理解

简介: OSTaskResume() 的返回值为下述之一: * OS_NO_ERR:函数调用成功。

OSTaskResume() 的返回值为下述之一:

* OS_NO_ERR:函数调用成功。

* OS_TASK_RESUME_PRIO:要唤醒的任务不存在。

* OS_TASK_NOT_SUSPENDED:要唤醒的任务不在挂起状态。

* OS_PRIO_INVALID:参数指定的优先级大于或等于OS_LOWEST_PRIO。

 

#if OS_TASK_SUSPEND_EN > 0

INT8U OSTaskResume (INT8U prio)

{

#if OS_CRITICAL_METHOD == 3                     

    OS_CPU_SR cpu_sr;

#endif

    OS_TCB    *ptcb;                  //创建临时变量ptcb,用来指向任务控制块

#if OS_ARG_CHK_EN > 0

    if (prio >= OS_LOWEST_PRIO) {                               //检查优先级的有效性

        return (OS_PRIO_INVALID);

    }

#endif             

OS_ENTER_CRITICAL();

//获得该优先级的任务控制块,并判断是否存在。如果不存在,返回OS_TASK_RESUME_PRIO

if ((ptcb = OSTCBPrioTbl[prio]) == (OS_TCB *)0) {          

       OS_EXIT_CRITICAL();

              return (OS_TASK_RESUME_PRIO);

}

(说明:

uCOS_II.H中定义的:

#define OS_STAT_RDY              0x00         /* Ready to run                         00000000     

#define OS_STAT_SEM              0x01        /* Pending on semaphore                00000001

#define OS_STAT_MBOX          0x02        /* Pending on mailbox                   00000010

#define OS_STAT_Q                 0x04         /* Pending on queue                      00000100

#define OS_STAT_SUSPEND          0x08        /* Task is suspended                     00001000

#define OS_STAT_MUTEX            0x10     /* Pending on mutual exclusion semaphore      00010000

#define OS_STAT_FLAG              0x20        /* Pending on event flag group             00100000

)

    if ((ptcb->OSTCBStat & OS_STAT_SUSPEND) != 0x00) {                     //判断是否是被挂起的任务

        if (((ptcb->OSTCBStat &= ~OS_STAT_SUSPEND) == OS_STAT_RDY) &&    

             (ptcb->OSTCBDly == 0)) {                                    

(说明:后3位置0,即将其转为OS_STAT_RDY状态,并且,任务没有被删除时,修改OSRdyGrpOSRdyTbl[]的值,将其变为就绪任务。其中OSTCBYOSTCBBitX是任务控制块的元素。OSTCBY=priority>>3OSTCBX=priority&0x07OSTCBBitY=OSMapTbl[priority>>3]OSTCBBitX=OSMapTbl[priority&0x07])

            OSRdyGrp               |= ptcb->OSTCBBitY;                   

            OSRdyTbl[ptcb->OSTCBY] |= ptcb->OSTCBBitX;

            OS_EXIT_CRITICAL();

            OS_Sched();                                                     //任务切换

        } else {

            OS_EXIT_CRITICAL();

        }

        return (OS_NO_ERR);

    }

    OS_EXIT_CRITICAL();

    return (OS_TASK_NOT_SUSPENDED);

}

#endif

目录
相关文章
|
1月前
|
人工智能 分布式计算 DataWorks
大数据AI产品月刊-2025年7月
大数据& AI 产品技术月刊【2025年7月】,涵盖7月技术速递、产品和功能发布、市场和客户应用实践等内容,帮助您快速了解阿里云大数据& AI 方面最新动态。
|
11月前
一文带你了解 PoE 标准和功率
【10月更文挑战第1天】
1425 0
一文带你了解 PoE 标准和功率
|
存储 安全 开发工具
Git 保姆级教程(一):Git 基础
Git 保姆级教程(一):Git 基础
|
NoSQL Linux 数据安全/隐私保护
轻松搭建Neo4j图数据库:一步步教你在Docker上安装Neo4j Community Server
轻松搭建Neo4j图数据库:一步步教你在Docker上安装Neo4j Community Server
|
SQL 数据库 数据安全/隐私保护
Android Studio App开发中数据库SQLite的解析及实战使用(包括创建数据库,增删改查,记住密码等 附源码必看)
Android Studio App开发中数据库SQLite的解析及实战使用(包括创建数据库,增删改查,记住密码等 附源码必看)
1085 0
|
数据采集 Serverless Python
Python代码示例:数据清洗、表合并和分组计算销售额
Python代码示例:数据清洗、表合并和分组计算销售额
230 1
|
计算机视觉
Crack Slide | hb省建筑市场监管公共服务平台滑块分析(一个从开始就失败的案例,0.1星)
Crack Slide | hb省建筑市场监管公共服务平台滑块分析(一个从开始就失败的案例,0.1星)
160 0
|
JavaScript 数据可视化 开发者
[开源] Gio.js -- 一个基于 Three.js 的 Web3D 地球数据可视化库
在这里和大家分享一个和小伙伴们一起开发的开源库 Gio.js 。Gio.js 是一个基于 Three.js 的 web 3D 地球数据可视化的开源组件库。使用 Gio.js 的网页应用开发者,可以快速地以申明的方式创建自定义的 Web3D 数据可视化模型,添加数据,并且将其作为一个组件整合到自己的应用中。
4195 0
百度问卷,问卷网,问卷星,腾讯问卷,四大问卷调查系统测评!
目前无论是学校还是企业公司,都用到了问卷系统,因为它带来方便的同时,提高了收集数据的效率。
3963 0