UCOS2系统内核讲述(二)_初始化调用函数

Ⅰ、写在前面

学习本文之前可以参看我前面的文章:

UCOS2_STM32F1移植详细过程(汇总文章)

UCOS2系统内核讲述_总体描述


还是按照上一篇文章的思维(从外到内),本文(结合源代码)进一步深入UCOS系统内核,我会将讲述过的源代码注释修改为中文,提供给大家参考。

 

上一篇文章总体描述了一下整个工程“外围”的代码,本文将进一步“入围”,进一步讲述OSInit所调用的函数。

 

本文还是结合前面移植好、可以运行的源代码来进行讲述关于最新版本UCOS2系统内核部分代码(围绕源代码来讲述)。

 

本文讲述的内容不必深入理解,可以先做个了解。

关于本文的更多详情请往下看。

 

OSInit所调用的函数

上一篇文章大概讲述了关于该函数的内容,本文将进一步讲述OSInit系统初始化。

我将OSInit所调用的函数分为两类:必须类非必须类


必须类:与系统、任务紧密相关的初始化。其实这些初始化就是对变量、结构体等赋予初始值。(如:系统运行标志位初始化暂停运行、最高优先级指向空等)它们的初始化位于系统内核os_core.c里面。

 

非必须类:这一类就是可以不调用来初始化的一类。从代码可以看他们前面有一个预处理标志位【如:#if (OS_FLAG_EN > 0u) && (OS_MAX_FLAGS > 0u)】,这些标志位位于os_cfg.h(前面说过系统的裁剪),当我们不使用这些功能时,也就是系统裁剪掉了这些功能,它们就不会被初始化。

 

事件标志组、内存管理、消息队列等这些就属于非必须类,它们的初始化位于自身的.c文件里面(不位于os_core.c)。【如:OS_FlagInit位于os_flag.c文件里面】

 

下面讲述一下必须类(非必须类在后面结合相关资源讲述):

1. OS_InitMisc(必须类)

这个函数会被OSInit()调用来初始化各项变量。对红色框内参数初始化数值,这些参数是系统必须的变量,类似于我们定义一个全局变量,初始的时候对它进行赋值


 

2. OS_InitRdyList(必须类)

这个函数被OSInit()调用来初始化就绪表。这里说的就绪表其实指的是把一个一个任务排列成一个表,要将这个表初始化的意思。要执行响应任务就需要知道任务的优先级、任务控制块、目前指向的任务等一系列信息。


 

3. OS_InitTCBList(必须类)

这个函数会被OSInit()调用来初始化空闲TCB(任务控制块)。这个初始化函数包含的信息是比较难的,也是系统比较重要的(后面会对TCB进行讲述)。

所谓任务控制块,就是控制任务相关变量数据信息各类的结构体的归类,其结构体里面包含的信息是很多的。

理解TCB就需要对数据结构有一定的熟悉才行。


 

4. OS_InitEventList(必须类)

这个函数会被OSInit()调用来初始化空闲ECB(事件控制块)。这个函数虽然我把它归类到系统必须类这一块,其实不完全正确。这里所说的事件,其实就是系统相关资源(消息队列、邮箱、信号量、互斥信号量等)的一个或集。在ucos_ii.h中可以看到下面宏定义:

#define  OS_EVENT_EN    (((OS_Q_EN > 0u) && (OS_MAX_QS > 0u)) || (OS_MBOX_EN > 0u) || (OS_SEM_EN > 0u) || (OS_MUTEX_EN > 0u))

 

消息队列、邮箱、信号量、互斥信号量等这些资源要被系统所调用,就需要进行初始化。系统把他们定义为事件,而使用是需要调用相关数据,系统就把他们定义为ECB(事件控制块),有点类似于TCB(任务控制块)。


 

5. OS_InitTaskIdle(必须类)

这个函数会被OSInit()调用来创建空闲任务。这个函数在本节开头截图中没有截取出来(屏幕高度有限),其实这个函数也是属于系统必须初始化的函数。空闲函数其实就是系统把所创建的任务都处理完了,那些都挂起了,或删除了,系统空闲没事做了,它就会来执行这个空闲任务

空闲任务在统计中起到一定作用,所谓统计,就是我们都知道的CPU占用率,空闲统计的越多,CPU空闲越多,那么CPU占用率就越低。【从CPU使用率应该很容易理解为什么要创建空闲任务】


 

Ⅲ、实例工程下载

笔者针对于初学者提供的例程都是去掉了许多不必要的功能,精简了官方的代码,对初学者一看就明白,以简单明了的工程供大家学习。

笔者提供的实例工程都是在板子上经过多次测试并没有问题才上传至360云盘,欢迎下载测试、参照学习。

我将最新UCOS2.92操作系统移植到F0、F1、F3、F4各个硬件平台上,可以根据你芯片系列选择下载。

UCOS基于STM32F0系列实例:

https://yunpan.cn/cByHFxCfpaIbh  访问密码 4437

 

UCOS基于STM32F1系列实例:

https://yunpan.cn/cByHum5BStkEK  访问密码 00a6

 

UCOS基于STM32F3系列实例:

https://yunpan.cn/cByHrMmkekIar  访问密码 da90

 

UCOS基于STM32F4系列实例:

https://yunpan.cn/cByHx47jehTgX  访问密码 5a04

 

本文所讲述部分注释修改为中文:

https://yunpan.cn/cMGZKfnVVb2Li  访问密码 49c2

 

Ⅳ、说明

UCOS相关的文章我会第一时间在微信公众号里面和大家分享,也可以到我博客上查看。

当你掌握UCOS在一种平台上的移植,其他平台移植原理类似,请不要局限某一平台。

以上总结仅供参考,若有不对之处,敬请谅解。

 

Ⅴ、最后

更多精彩文章我将第一时间在微信公众号里面分享,如果不想错过,可以关注我的微信公众号。

本着免费分享的原则,方便大家手机学习知识,定期在微信平台分享技术知识。如果你觉得分享的内容对你有用,又想了解更多相关的文章,请用微信搜索EmbeddDeveloper” 或者扫描下面二维码、关注,将有更多精彩内容等着你。




几年前,邵贝贝教授将MicroC/OS-II The Real-Time Kernel一书译成了中文,并在中国出版,说明该书的价值得到了更多人的认可。2002年上半年,笔者出版了这本书的第2版本,对书的内容和书后所附的源代码都做了大量的改动。笔者相信,翻译第2版本的工作量决不会少于第1版本。感谢邵教授百忙中抽时间完成这一繁琐的工作。 过去几年中,一直有很多中国用户与笔者保持着通信联系。中国用户对嵌入式系统、特别是对μC/OS-II表现出极大的兴趣。多数通信交往来自学术界,随着基地在中国的电子产品制造业的发展,他们对μC/OS-II的兴趣也越来越浓厚。 对于大专院校的学生,μC/OS-II是实时操作系统(RTOS)的极好教材。试着用一用RTOS,获得一些RTOS的使用经验,不需要花什么钱,μC/OS-II是在校学生完成研究生论文和本科生毕业设计的绝好工具。μC/OS-II可以使读者专注于自己的研究课题,而不必为程序结构花很多时间。有大量移植范例可以从Micrium的??(www.micrium.com)上免费下载。μC/OS-II的性能可以与许多高端商业软件产品媲美,某些性能比它们还要好。 μC/OS-II已经在世界范围内得到广泛使用,包括诸多领域,如手机、路由器、集线器、不间断电源、飞行器、医疗设备及工业控制等。实际上,μC/OS-II已经通过了非常严格的测试,并且得到了美国航空管理局(Federal Aviation Administration)的认证,可以用在飞行器上。这说明μC/OS-II是稳定可靠的,可用于与人性命攸关的安全紧要(safety critical)系统;当然,也可用于非安全紧要系统。 μC/OS-II一直在不断地向前发展。书的出版有个过程,书出版时,书中描述的可能已不是当前的最新版本;故我请邵教授在翻译这本书时,仍用μC/OS-II的V2.52版本,以同原书版本一致。笔者建议,如果读者只想学习μC/OS-II,仍应使用V2.52版本。如果想将μC/OS-II嵌入到商业产品中,请与我们Micrium公司(或我们的中国代理)联系,以获得使用许可证并得到最新版本。关于使用许可证,可直接向以下地址申请:licensing@micrium.com,请附上用户姓名、公司名以及联系电话。 关于μC/OS-II今后升级方面的设想是多方面的,请关注Micrium网站。笔者打算今后将μC/OS-II可以管理的任务数目增加到250个,进一步改进调度算法,使之效率更高。将来的μC/OS-II可以在任务或中断服务子程序中直接给别的任务发消息,而不必通过诸如消息队列等。也还会给μC/OS-II增加一些新的功能函数。 1999年,笔者注册了一家名为Micrium的公司,目的是开发并销售类似μC/OS-II的软件。目前可提供的其他软件产品还有: ●μC/GUI (嵌入式用户图形界面); ●μC/FS (嵌入式文件系统)。 Micrium计划中的产品也都是专门面向嵌入式系统应用的。所有产品都提供源代码,其中大多数软件的质量也同μC/OS-II一样好。 多年来,我一直参加美国的嵌入式系统年会(Embedded System Conference),并在会上做两三次讲演。我也打算参加一次中国的嵌入式系统年会,或许我们能在会上见面。 如果发e-mail给我,我会尽力给予回复;但是请用英文书写,以谅解我不懂中文。不必顾虑自己的英文不够好,总比我的中文要好得多吧。 如同笔者从写书得到乐趣,愿读者从阅读此书中得到更多的乐趣。 μC/OSII是著名的、源码公开的实时内核,是专为嵌入式应用设计的,可用于各类8位、16位和32位单片机或DSP。从μC/OS算起,该内核已有10余年应用史,在诸多领域得到了广泛应用。   本书是MicroC/OSII The Real Time Kernel一书的第2版本,在第1版本(V2.0)基础上做了重大改进与升级。通过对μC/OSII源代码的分析与描述,讲述了多任务实时的基本概念、竞争与调度算法、任务间同步与通信、存储与定时的管理以及如何处理优先级反转问题;介绍如何将μC/OSII移植到不同CPU上,如何调试移植代码。在所附光盘中,给出已通过FAA安全认证的μC/OSII V2.52的全部源码以及可在PC机上运行的移植范例。   本书可用做高等院校嵌入式实时系统课程教材或工程师培训教材,也可供嵌入式应用开发人员研究与使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

strongerHuang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值