请选择 进入手机版 | 继续访问电脑版

EDABOSS电子论坛

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 619|回复: 0

[转帖] uC/OS-II学习笔记—任务控制块实体

[复制链接]

9

主题

0

回帖

51

E币

技术员

Rank: 2

积分
18
发表于 2019-9-17 08:47:48 | 显示全部楼层 |阅读模式
uC/OS-II是如何生成任务控制块的实体的呢?答案很简单,uC/OS-II是以结构体数组的形式生成了任务控制块的实体。任务控制块实体的声明如下:

040242wbfmafom72momix4.jpg

该代码在ucos_ii.h中,OS_MAX_TASKS为最多的用户任务数,OS_N_SYS_TASKS为系统任务数,一般情况下为2。因此,在内存中分配了OS_MAX_TASKS+OS_N_SYS_TASKS个任务控制块,这些任务控制块占用了(OS_MAX_TASKS+OS_N_SYS_TASKS)*SizeOf(OS_TCB)个内存空间。
宏OS_MAX_TASKS在OS_CFG.h中定义,OS_CFG.h是整个操作系统的配置文件。宏OS_N_SYS_TASKS在ucos_ii.h中定义,它的值与另一个宏OS_TASK_STAT_EN有关,代码如下所示:

040242w14l1zc4yxmjf4aj.jpg

OS_TASK_STAT_EN>0表示系统具有统计任务的时候,OS_N_SYS_TASKS的值应为2,否则应为1.
OS_TASK_STAT_EN在OS_CFG.h中定义,意义为系统是否具有统计任务,OS_TASK_STAT_EN的默认值是1,表示有统计任务,如果确实不需要统计任务,可以把OS_TASK_STAT_EN的值设置为0,这时候系统任务只有空闲任务,因此OS_N_SYS_TASKS的值就是1.反之,系统如果有统计任务,再加上空闲任务,那么系统任务的数量就是2,OS_N_SYS_TASKS的值就是2.
于是,系统任务总数=OS_MAX_TASKS+OS_N_SYS_TASKS,那么上面程序中的代码定义的任务控制块的数量就等于系统的任务总数。
uC/OS-II最多可以管理64个任务,因此,在有统计任务的情况下,OS_MAX_TASKS不能超过62。通常,为节省内存,提高运行效率 ,在实际情况下,如果用户只有5个任务,完全可以把OS_MAX_TASKS的值设置为5,这样既节省了大量的内存资源,又提高了运行效率。
任务控制块实体的声明的程序代码定义了系统任务总数个任务控制块数组,于是这些任务控制块序号分别是0,1,2,……,OS_MAX_TASKS+OS_N_SYS_TASKS-1,对应的数组元素为OSTCBTbl[0]~OSTCBTbl[OS_MAX_TASKS+OS_N_SYS_TASKS-1],他们占用连续的内存空间。
如下图所示,列出了系统初始化后实际的任务控制块,其中第一个任务控制块的内容被展示出来。

040245f9k8ms6wp5g8m8mm.jpg
如上图所示是系统实际运行时,内存中的实际信息。可见,第一个任务控制块即OSTCBTbl[0]是从地址0x00433300开始的,包含了前面讲到的所有任务控制块成员。该任务控制块的优先级是0x3f,对应十进制的63,所以是优先级最低的空闲任务,任务名称OSTCBTaskName的内容是“uC/OS-II Idle”。
积分规则
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|EDABOSS电子论坛

GMT+8, 2024-4-16 17:21 , Processed in 0.044067 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表