任务控制块是任务管理的核心数据结构,操作系统在启动的时候,首先要在内存中创建一定数量的任务控制块。

以下是OS_TCB的数据结构:

 1 typedef struct os_tcb {
 2     OS_STK          *OSTCBStkPtr;           /* Pointer to current top of stack                         */
 3
 4 #if OS_TASK_CREATE_EXT_EN > 0u
 5     void            *OSTCBExtPtr;           /* Pointer to user definable data for TCB extension        */
 6     OS_STK          *OSTCBStkBottom;        /* Pointer to bottom of stack                              */
 7     INT32U           OSTCBStkSize;          /* Size of task stack (in number of stack elements)        */
 8     INT16U           OSTCBOpt;              /* Task options as passed by OSTaskCreateExt()             */
 9     INT16U           OSTCBId;               /* Task ID (0..65535)                                      */
10 #endif
11
12     struct os_tcb   *OSTCBNext;             /* Pointer to next     TCB in the TCB list                 */
13     struct os_tcb   *OSTCBPrev;             /* Pointer to previous TCB in the TCB list                 */
14
15 #if (OS_EVENT_EN)
16     OS_EVENT        *OSTCBEventPtr;         /* Pointer to          event control block                 */
17 #endif
18
19 #if (OS_EVENT_EN) && (OS_EVENT_MULTI_EN > 0u)
20     OS_EVENT       **OSTCBEventMultiPtr;    /* Pointer to multiple event control blocks                */
21 #endif
22
23 #if ((OS_Q_EN > 0u) && (OS_MAX_QS > 0u)) || (OS_MBOX_EN > 0u)
24     void            *OSTCBMsg;              /* Message received from OSMboxPost() or OSQPost()         */
25 #endif
26
27 #if (OS_FLAG_EN > 0u) && (OS_MAX_FLAGS > 0u)
28 #if OS_TASK_DEL_EN > 0u
29     OS_FLAG_NODE    *OSTCBFlagNode;         /* Pointer to event flag node                              */
30 #endif
31     OS_FLAGS         OSTCBFlagsRdy;         /* Event flags that made task ready to run                 */
32 #endif
33
34     INT32U           OSTCBDly;              /* Nbr ticks to delay task or, timeout waiting for event   */
35     INT8U            OSTCBStat;             /* Task      status                                        */
36     INT8U            OSTCBStatPend;         /* Task PEND status                                        */
37     INT8U            OSTCBPrio;             /* Task priority (0 == highest)                            */
38
39     INT8U            OSTCBX;                /* Bit position in group  corresponding to task priority   */
40     INT8U            OSTCBY;                /* Index into ready table corresponding to task priority   */
41     OS_PRIO          OSTCBBitX;             /* Bit mask to access bit position in ready table          */
42     OS_PRIO          OSTCBBitY;             /* Bit mask to access bit position in ready group          */
43
44 #if OS_TASK_DEL_EN > 0u
45     INT8U            OSTCBDelReq;           /* Indicates whether a task needs to delete itself         */
46 #endif
47
48 #if OS_TASK_PROFILE_EN > 0u
49     INT32U           OSTCBCtxSwCtr;         /* Number of time the task was switched in                 */
50     INT32U           OSTCBCyclesTot;        /* Total number of clock cycles the task has been running  */
51     INT32U           OSTCBCyclesStart;      /* Snapshot of cycle counter at start of task resumption   */
52     OS_STK          *OSTCBStkBase;          /* Pointer to the beginning of the task stack              */
53     INT32U           OSTCBStkUsed;          /* Number of bytes used from the stack                     */
54 #endif
55
56 #if OS_TASK_NAME_EN > 0u
57     INT8U           *OSTCBTaskName;
58 #endif
59
60 #if OS_TASK_REG_TBL_SIZE > 0u
61     INT32U           OSTCBRegTbl[OS_TASK_REG_TBL_SIZE];
62 #endif
63 } OS_TCB;

转载于:https://www.cnblogs.com/xiaofeng6636/p/3512952.html

uCOS-II 学习笔记之任务管理--------任务控制块OS_TCB相关推荐

  1. ucos iii学习笔记——为什么选择ucos iii

    首先我们得先讨论前后台系统和RTOS(Real Time OS)的区别.前后台系统,也即是我们所说的裸机程序,它的结构通常包括一个死循环和若干个中断服务程序,直接上图,我们有一个直观认识: 假如Tas ...

  2. 工程师的NIOS II学习笔记(转)

    来源:嵌入式在线 作者:山城棒棒儿军 发布时间:2009-09-22 12:29:31 Nios Development Board Reference Manual, Stratix II Edit ...

  3. UC/OS III操作系统学习笔记

    UCOS操作系统学习笔记 1.UCOSIII任务 1.1任务管理 1.2 任务创建和删除.挂起和恢复 1.3 系统内部任务 2.UCOSIII中断和时间管理 2.1 中断管理 2.2 时间管理 3.U ...

  4. ucos II任务管理之三:删除任务

    ucos II任务管理之三:删除任务 有了前面的经历之后,mcu21决定全面地学习了任务的管理.这样在项目编程中才能做到"信手拈来". 在ucos II 里,创建一个任务之后,可以 ...

  5. 实时操作系统UCOS学习笔记1----UCOSII简介

    前面我们所有的实验都是跑的裸机程序(裸奔),从本章开始,我们开始介绍UCOSII(实时多任务操作系统内核). UCOSII简介 UCOSII的前身是UCOS,最早出自于1992年美国嵌入式系统专家Je ...

  6. UCOS内核结构学习笔记

    呵呵,大家好,暑假一直在实验室,校园网一直打不开我的BLOG,全国大赛结束后,我虽然没有参加,但是我也是经历了的,只是没有参赛而已.呵呵,感觉全国大赛不是比各高校学生的能力,而是各高校老师的能力.相信 ...

  7. ucos II任务管理之一:挂起任务

    Ucos II 任务管理之一 创建好了任务之后,就已经初步跨进了ucos II 的编程了.随着进一步的编程,发现学会创建了任务还是不够的. 在我的项目里,需要实现485通信功能,我创建了任务1用于串口 ...

  8. 简单入门——深度学习笔记(Part II)

    更多深度文章,请关注:https://yq.aliyun.com/cloud 作者介绍:Deepak Shah Deepak Shah毕业于德克萨斯奥斯汀分校,徒步旅行爱好者,目前是深度学习\数据科学 ...

  9. 实时操作系统UCOS学习笔记5----UCOSIII移植

    在2009年Micrium公司推出了UCOSIII,相对于UCOSII性能有了进一步的提升,支持时间片轮转调度,极短的关中断事件等.本章讲解如何在STM32F103开发板上移植UCOSIII操作系统. ...

  10. B站台湾大学郭彦甫|MATLAB 学习笔记|09 图像处理II Image Processing

    MATLAB学习笔记(09 图像处理II Image Processing) 如果想获得更好浏览体验的朋友可以转到下面链接 09 1. 提出问题 题目:如何找出图片中的米粒,并且确定他们的大小? 老师 ...

最新文章

  1. Mysql新安装服务启动失败
  2. EmEditor编辑器正则表达式的优点
  3. 再次学习mysql优化
  4. c语言 程序循环,C语言程序设计-循环例子
  5. mpi由于目标计算机积极拒绝,windows系统lammps安装MPICH2的问题
  6. 【转】博客园中应用LaTex进行公式编写
  7. 温故js系列(4)-运算符详解
  8. python3环境变量和pip_Tool_linux环境安装python3和pip
  9. 常见的提高高并发下访问的效率的手段
  10. 一个很小的 截图 库。 只需要依赖 jQuery
  11. 为了永不停机的计算服务 | 凌云时刻
  12. 乐优商城第九天,第十天,(商品规格参数模版的新增,商品的新增)
  13. DelayQueue使用
  14. 吞食天地2刘蜀传1.8版本图文攻略
  15. Cesium 多边形(polygon)extrudedHeight 和 height 的区别
  16. Python 3 字符串 rsplit( ) 方法
  17. 高中数学关于计算机的知识,高中数学必修三-算法概念基础知识解读
  18. 【Python+QGIS将地名批量标注于高德地图】
  19. to be solved
  20. 获取所有股票历史行情数据

热门文章

  1. 数字证书(Certificate)
  2. 专注于钢铁行业电子商务的服务网站,钢铁行业的网上贸易市场 一起成长
  3. Android 原生开发、H5、React-Native Flutter 使用利弊和场景技术分享
  4. Idea 工具在java文件中怎么避免 import .*包
  5. react-native 错误捕捉与处理
  6. 牛皮!竟然有大佬基于 Spring Boot + Vue 开发了一套网易云QQ音乐(附源码)。。。...
  7. 开发经理是否应该写代码?​
  8. Chrome 上最必不可少的29 款插件,超级提高效率
  9. 流行的Spring Boot + Vue架构整合开发的网易云,附源码!
  10. 中国顶级程序员有多牛?一个弄哭韩国,一个堪称阿里“扫地僧”