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” 或者扫描下面二维码、关注,将有更多精彩内容等着你。


UCOS2系统内核讲述(二)_初始化调用函数的更多相关文章
- UCOS2系统内核讲述(四)_创建任务
		Ⅰ.写在前面 学习本文之前可以参看我前面的文章: UCOS2_STM32移植详细过程(汇总文章) UCOS2系统内核讲述(一)_总体描述 UCOS2系统内核讲述(二)_初始化调用函数 UCOS2系统内 ... 
- UCOS2系统内核讲述(三)_TCB任务控制块
		Ⅰ.写在前面 学习本文之前可以参看我前面的文章: UCOS2_STM32F1移植详细过程(汇总文章) UCOS2系统内核讲述(一)_总体描述 UCOS2系统内核讲述(二)_初始化调用函数 上一篇文章讲 ... 
- UCOS2系统内核讲述(五)_初始化TCB详情
		Ⅰ.写在前面 学习本文之前可以参看我前面的文章: UCOS2系统内核讲述(四)_创建任务 上一篇文章讲述了关于函数“OSTaskCreateExt”创建任务函数体里面重要一些的内容,本文接着上一张讲述 ... 
- UCOS2系统内核讲述_总体描述
		Ⅰ.写在前面 学习本文之前可以参考我前面基于STM32硬件平台移植UCOS2的几篇文章,我将其汇总在一起: UCOS2_STM32F1移植详细过程(汇总文章) 要想学习,或使用系统配套的资源(如:信号 ... 
- ca71a_c++_指向函数的指针_通过指针调用函数txwtech
		/*ca71a_c++_指向函数的指针_通过指针调用函数用typedef简化函数指针的定义简化前: bool(*pf)(const string&, const string &); ... 
- C语言 函数指针二(正向调用)
		//函数指针做函数参数 #include<stdio.h> #include<stdlib.h> #include<string.h> #include<Wi ... 
- matlab初学者_脚本文件调用函数文件
		问题: matlab里面有两种文件,一种是脚本文件,一种是函数文件,为了模块化程序,我们需要把专门的功能写成一个函数封装到某个函数文件里面. 那么来看如何在脚本文件里调用函数文件中的函数. 注意点: ... 
- javascript学习笔记(二):定义函数、调用函数、参数、返回值、局部和全局变量
		定义函数.调用函数.参数.返回值 关键字function定义函数,格式如下: function 函数名(){ 函数体 } 调用函数.参数.返回值的规则和c语言规则类似. <!DOCTYPE ht ... 
- C++_进阶之函数模板_类模板
		C++_进阶之函数模板_类模板 第一部分 前言 c++提供了函数模板(function template.)所谓函数模板,实际上是建立一个通用函数,其函数类型和形参类型不具体制定,用一个虚拟的类型来 ... 
随机推荐
- 如何在Visual Studio(VS)2012里使用libsvm工具箱
			原文:http://blog.csdn.net/u014691453/article/details/40393137 软件版本: Visual Studio版本:VS2012 (注:使用方法在 VS ... 
- Jfinal极速开发微信系列教程(二)--------------让微信公众平台通过80端口访问本机
			概述: 微信公众平台要成为开发者,需要填写接口配置信息中的“URL”和“Token”这两项(参见:http://mp.weixin.qq.com/wiki/index.php?title=%E6%8E ... 
- FileUpload类中FileUpload1.FileName和FileUpload1.PostedFile.FileName的区别
			FileUpload1.FileName 用来获取客户端上使用 FileUpload 控件上载的文件的名称.此属性返回的文件名不包含此文件在客户端上的路径.FileUpload1.PostedFile ... 
- 执行次数最多的sql语句
			执行次数最多的sql语句 * FROM ( creation_time N'语句编译时间' ,DB_NAME(st.dbid) AS dbname ,OBJECT_NAME(st.objectid) ... 
- 关于ibatis的实体类部分属性无法映射
			今天在编码中不小心就遇到了一个ibatis初学者偶尔会遇到的问题. 先来看这张图中的DictionPo的部分属性赋值都为空.其实,数据库中是有数据的. 再来看看mapper的写法 上面那个对象查询语句 ... 
- this详解与面向对象编程
			原文链接:http://www.cnblogs.com/kongxy/p/4581223.html JS中的this对象详解 声明:文章转载自上面地址,版权归阿孔所有,这里仅供本人学习笔记使用 t ... 
- 30、Arrays工具类
			1.查询元素 int binarySearch(type[] a,type key):使用二分法查询key元素值在a数组中出现的索引:如果a数组不包含key元素,则返回负数.调用该方法时要求数组中元素 ... 
- Tomcat中配置MySQL数据库连接池
			Web开发中与数据库的连接是必不可少的,而数据库连接池技术很好的优化了动态页与数据库的连接,相比单个连接数据库连接池节省了很大的资源.用一个通俗的比喻:如果一个人洗澡需花一桶水,那一百个人就要花一百桶 ... 
- OFBiz:扩展controller.xml
			如何扩展controller.xml?两种方法:一种方法是直接修改原先的controller.xml,这种方法不方便后续升级.第二种方法是新建一个extended.xml文件,再在controller ... 
- Linux下源码安装JDK7
			安装说明 安装环境:Red Hat Enterprise Linux7.1安装方式:源码安装 软件:jdk-7u80-linux-x64.gz 安装 #首先查看系统原有JDK信息 rpm -qa | ... 
