Ⅰ、写在前面html
学习本文以前能够参看我前面的文章:微信
UCOS2系统内核讲述(一)_整体描述electron
上一篇文章讲述了关于OSInit函数体中几个关于系统内核重要的函数,本文将针对上一篇文章中OS_InitTCBList(初始化任务控制块)函数重点讲述一下TCB(Task Control Block)任务控制块。学习
TCB任务控制块是用来记录任务的堆栈指针、任务的当前状态、任务的优先级别等一些与任务有关属性的一个数据结构表(所以,学习本文以前须要了解数据结构)。任务控制块至关于一个任务的“身份证”,它记录着任务的重要信息。测试
对于系统内核而言,各个任务就是经过控制任务块将其连接成一个表。所以,任务控制块在任务中占据重要地位。spa
本文还是结合前面移植好、能够运行的源代码来进行讲述关于最新版本UCOS2系统内核部分代码(围绕源代码来说述)。操作系统
对于想学习UCOS的朋友,本文讲述的内容可不用深刻理解,能够先作个了解。3d
关于本文的更多详情请往下看。
Ⅱ、全局TCB
在上一篇文章中讲述的OS_InitTCBList是整个系统初始化重要的一个函数。
在该函数中能够看到OS_TCB这么一个数据类型,在第一条执行语句中能够看到“OSTCBTbl”这个TCB表,下面能够看到“OSTCBPrioTbl”、“OSTCBList”、“OSTCBFreeList”等一些关于TCB数据类型的变量。由此可知道,这个函数体里面的内容全是关于OS_TCB类型的。
跟踪代码能够知道“OSTCBTbl”这些变量定义在ucos_ii.h中,其实这些变量是控制整个系统任务的一些全局TCB.
从变量后面的注释能够知道关于任务的切换须要修改多少变量(指针),下一章节咱们将进一步讲述关于“OS_TCB”这个数据结构体。
Ⅲ、OS_TCB数据结构体
要想理解OS_TCB结构体,须要理解数据结构(也就是C语言中结构体、指针、链表等这些知识),由于OS_TCB里面使用的就是这些知识,先看一下ucos_ii.h中定义的OS_TCB结构体,以下图:
上面的截图就是整个“OS_TCB”结构体的内容,最重要的几个参数就是我用红色框出来的那些,其余都是次要,或者没必要要的参数。
下面就重点讲述一下红色标记的几个参数:
1. 三个重要的OS_TCB参数
OS_STK *OSTCBStkPtr; 指向当前栈顶的指针
struct os_tcb *OSTCBNext; 指向(TCB链表中)下一个TCB的指针
struct os_tcb *OSTCBPrev; 指向(TCB链表中)上一个TCB的指针
将这三个参数结合在一块儿来说述是为了便于理解任务控制块之间的关联。学过链表的人应该知道这个写法,其实它就是将各个TCB构成一个关联的表,利用指针将一个个TCB关联起来。
指向上一个TCB的指针、指向当前TCB的指针、指向下一个TCB的指针,初学者只须要将这三个结合起来思考,理解起来就不难了。
2. 任务运行时重要的OS_TCB参数
这里说的参数见上面截图中最后红色标记部分,这些参数是任务运行是重要的参数。
A.INT32U OSTCBDly; 任务延时滴答 或 事件超时等待:
这个参数结合实例中三个任务的OSTimeDly函数一块儿理解就容易多了。OSTimeDly就是将该任务延时(该任务挂起)多少个滴答,其中重要的一个参数就是这里说的“OSTCBDly”,这个参数传递的信息就是延时。
B.INT8U OSTCBStat; 任务状态:
这个参数就是一个标示,标示任务处于什么状态。包括运行、挂起等,具体见ucos_ii.h第101行“TASK STATUS”的宏定义。
C.INT8U OSTCBStatPend; 任务悬挂状态:
这个参数和上面“任务状态”相似。主要包括三个状态:OS_STAT_PEND_OK、OS_STAT_PEND_TO和OS_STAT_PEND_ABORT。详情可见ucos_ii.h第117行“TASK PEND STATUS”的宏定义。
D.INT8U OSTCBPrio; 任务优先级:
任务优先级在学习UCOS以前都据说过这个词,这个参数就是标明任务优先级的参数。提示的是:任务优先级值越小,其优先级越高。因此,空闲任务优先级是设置最低。
E.优先级计算参数:
INT8U OSTCBX; 优先级低3位对应的数值,即=prio&0x07
INT8U OSTCBY; 优先级高3位对应的数值,即=prio>>3
OS_PRIO OSTCBBitX; "对应"就绪表组的值 OSRdyTbl[OSTCBY] |= OSTCBBitX
OS_PRIO OSTCBBitY; 就绪表组 OSRdyGrp |= OSTCBBitY 即上面的"对应"组
这四个参数是计算任务优先级用的,至因而如何计算的,能够本身研究一下。
Ⅳ、实例工程下载
笔者针对于初学者提供的例程都是去掉了许多没必要要的功能,精简了官方的代码,对初学者一看就明白,以简单明了的工程供你们学习。
笔者提供的实例工程都是在板子上通过屡次测试并无问题才上传至360云盘,欢迎下载测试、参照学习。
我将最新UCOS2.92操做系统移植到F0、F一、F三、F4各个硬件平台上,能够根据你芯片系列选择下载。
UCOS基于STM32F0、F一、F三、F4系列实例工程源代码(汇总):
https://yunpan.cn/cM9Fjv88cXbjI 访问密码 048d
本文所讲述部分注释修改为中文(软件工程源代码):
https://yunpan.cn/cMGZKfnVVb2Li 访问密码 49c2
基于STM32平台的UCOS源代码工程(官方原始软件工程)
官网下载(须要帐号):
360云盘下载:
https://yunpan.cn/cM9Gzv4drXqxv 访问密码 c82c
Ⅴ、说明
UCOS相关的文章我会第一时间在微信公众号里面和你们分享,也能够到我博客上查看。
当你掌握UCOS在一种平台上的移植,其余平台移植原理相似,请不要局限某一平台。
以上总结仅供参考,如有不对之处,敬请谅解。
Ⅵ、最后
更多精彩文章我将第一时间在微信公众号里面分享,若是不想错过,能够关注个人微信公众号。
本着免费分享的原则,方便你们手机学习知识,按期在微信平台分享技术知识。若是你以为分享的内容对你有用,又想了解更多相关的文章,请用微信搜索“EmbeddDeveloper” 或者扫描下面二维码、关注,将有更多精彩内容等着你。