找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 20320|回复: 31
收起左侧

从0到1教你写uCOS-III教程(基于STM32单片机)

  [复制链接]
ID:384378 发表于 2018-8-8 22:12 | 显示全部楼层 |阅读模式
1.1 如何学习本书
本书与市面上的任何一本 uC/OS-III 相关的书都不一样,它们要么是翻译官方的参考手册,要么是讲如何使用 uC/OS-III,要么是讲 uC/OS-III 的源码,而本书是教你怎么从 0 开始把 uC/OS-III 写出来,既讲了源码实现,也讲了 API 如何使用。当你拿到本书开始学习的时候你一定会惊讶,原来 RTOS 的学习并没有那么复杂,反而是那么的有趣,原来自己也可以写 OS,成就感立马爆棚。

全书内容循序渐进,不断迭代,前一章都是后一章的基础,必须从头开始阅读,不能进行跳跃式的阅读。在学习的时候务必做到两点:一是不能一味地看书,要把代码和书本结合起来学习,一边看书,一边调试代码。看书倒是很简单,那如何调试代码?即单步执行每一条程序,看看程序的执行流程和执行的效果与自己大脑所想是不是一样;二是在每学完一章之后,必须将配套的例程重写一遍(切记不要复制,哪怕是一个分号,但可以抄),做到举一反三,确保真正理解。在自己写的时候肯定会错漏百出,这个时候要珍惜这些错误,好好调试,这是你提高编程能力的最好的机会。记住,程序不是写出来的,而是调试出来的。
1.2 本书的参考资料
1、 uC/OS-III 官方源代码
2、 uCOS-III 中文翻译 (电子版)
3、 嵌入式操作系统 uCOS-II(第二版) (电子版)
4、 嵌入式实时操作系统μCOS-II 原理及应用 任哲编著 (电子版)
5、 CM3 权威指南 CnR2 (电子版)
6、 STM32F10xxx Cortex-M3 programming manual (电子版)
1.3 本书的编写风格
本书以 uC/OS-III 官方源码为蓝本,抽丝剥茧,不断迭代,教你怎么从 0 开始把uC/OS-III 写出来。书中涉及到的数据类型,变量名称、函数名称,文件名称,文件存放的位置都完全按照 uC/OS-III 官方的方式来实现,当你学完这本书之后可以无缝地切换到原版的 uC/OS-III 的使用。要注意的是,在实现的过程中,某些函数我会去掉一些形参和一些冗余的代码,只保留核心的功能,但这并不会影响我们学习。
0.png

第2章 如何学习 RTOS

2.1 为什么要学习 RTOS
当我们进入嵌入式这个领域的时候,往往首先接触的都是单片机编程,单片机编程又首选 51 单片机来入门。这里面说的单片机编程通常都是指裸机编程,即不加入任何 RTOS(Real Time Operation System 实时操作系统)的程序。常用的 RTOS 有国外的 FreeRTOS、ucOS、RTX 和国内的 Huawei LiteOS、和 RT-Thread 等,其中尤以开源且免费的 FreeRTOS的市场占有率最高,历史悠久的 ucos 屈居第二。

在裸机系统中,所有的程序基本都是自己写的,所有的操作都是在一个无限的大循环里面实现。现实生活中的很多中小型的电子产品用的都是裸机系统,而且也能够满足需求。但是为什么还要学习 RTOS 编程,偏偏还要整个操作系统进来。一是项目需要,随着产品要实现的功能越来越多,单纯的裸机系统已经不能够完美地解决问题,反而会使编程变得更加复杂,如果想降低编程的难度,我们可以考虑引入 RTOS 实现多任务管理,这是使用RTOS 的最大优势。二是学习的需要,必须学习更高级的东西,实现更好的职业规划,为将来走向人生巅峰迎娶白富美做准备,而不是一味的在裸机编程上面死磕。作为一个合格的嵌入式软件工程师,学习是永远不能停止的事,时刻都在为将来准备。书到用时方恨少,我希望机会来临时你不要有这种感觉。
为了帮大家理清 RTOS 编程的套路,下面我们简单的分析下这两种编程方式的区别,这个区别我称它为学习 RTOS 的命门,只要打通这个任督二脉,以后的 RTOS 学习可以说是易如反掌。在讲解这两种编程方法的区别的时候,我们主要讲方法论,不会涉及到具体的代码编程,主要还是通过伪代码来讲解。

2.2 如何学习 RTOS
裸机编程和 RTOS 编程的风格有些不一样,而且有很多人说 RTOS 的学习很难,这就导致学习的人一听到 RTOS 编程就在心理面忌惮三分,结果就是出师未捷身先死。那么到底如何学习一个 RTOS?最简单的就是在别人移植好的系统之上,看看 RTOS里面的 API 使用说明,然后调用这些 API 实现自己想要的功能即可。完全,不用关心底层的移植,这是最简单快速的入门方法。这种方法各有利弊,如果是做产品,好处是可以快速的实现功能,将产品推向市场,赢得先机,弊端是当程序出现问题的时候,因对这个RTOS 不够了解,会导致调试困难,焦头烂额,一筹莫展。如果是学习,那么只会简单的调用 API,那是不可取的,我们应该深入的学习其中一款 RTOS。目前市场上现有的 RTOS,它们的内核实现方式都差不多,我们只需要深入学习其中一款就行。万变不离其宗,以后换到其它型号的 RTOS,使用起来,那自然是得心应手。那如何深入的学习一款 RTOS?这里有一个最有效也是最难的方法,就是阅读 RTOS 的源码,深究内核和每个组建的实现方式,这个过程枯燥且痛苦。但为了能够学到 RTOS 的精华,你不入地狱谁入地狱?

市面上虽然有一些讲解相关 RTOS 源码的书,如果你基础不够,且先前没有使用过该款 RTOS,那么源码看起来还是会非常枯燥,且并不能从全局掌握整个 RTOS 的构成和实现。
现在,我们采用一种全新的方法来教大家学习一款 RTOS,即不是单纯的讲里面的API 如何使用,也不是单纯的拿里面的源码一句句来讲解。而是,从 0 开始,层层叠加,不断地完善,教大家怎么把一个 RTOS 写 0 到 1 写出来,让你在每一个阶段都能享受到成功的喜悦。在这个 RTOS 实现的过程中,只需要你具备 C 语言的基础就行,然后就是跟着我们这个教程笃定前行,最后定有所成。
这个用来教学的 RTOS,我们不会完全自己写一个,不会再重复的造轮子,而是选取年龄最大(26 岁)、商业化最成功、安全验证最多的 uC/OS-III 为蓝本,将其抽丝剥茧,层层叠加,从 0 到 1 写出来。在实现的过程中,数据类型、变量名、函数名称、文件类型等都完全按照 uC/OS-III 里面的写法,不会自己再重新命名。这样学完我们这个课程之后,就可以无缝地过度到 uC/OS-III 的使用。
2.3 如何选择 RTOS
选择一个 RTOS 要看下你是学习还是做产品,如果是学习则选择一个年龄最大,商业化最成功,安全验证最多的来学习,而且是深入学习。那么符合前面这几个标准的只有ucos,所以,学一个 RTOS,首选 ucos,而且 ucos 的资料是最多的。当然,选择其他的RTOS 来学习也是可以的。学完之后就是要用了,如果是产品中使用 ucos 就要面临授权的问题,就是要给版权费。一听到要给钱,大家肯定是不乐意了,所以开源免费的FreeRTOS 就受到各个半导体厂商和开发者的青睐。目前,FreeRTOS 是市场占有率最高的RTOS,非常适合用来做产品。另外,国内的 RT-Thread 也在迅速的崛起,同样是开源免费。

第3章 新建工程—软件仿真
  在开始写 RTOS 之前,我们先新建一个工程,Device 选择 Cortex-M3 内核的处理器,调试方式选择软件仿真,到最后写完整个 RTOS 之后,我们再把 RTOS 移植到野火 STM32开发板上,到了最后的移植其实已经非常简单,只需要换一下启动文件和添加 bsp 驱动就行。

3.1 新建本地工程文件夹
在开始新建工程之前,我们先在本地电脑端新建一个文件夹用于存放工程。文件夹名字我们取为 RTOS,然后再在该文件夹下面新建各个文件夹和文件,有关这些文件夹的包含关系和作用具体见表格 3-1。

表格 3-1 工程文件夹根目录下的文件夹的作用
0.png

3.2 使用 KEIL 新建工程
开发环境我们使用 KEIL5,版本为 5.15,高于或者低于 5.15 都行,只要是版本 5 就行。

3.2.1 New Progect
首先打开 KEIL5 软件,新建一个工程,工程文件放在目录 Project\RVMDK(uv5)下面,名称命名为 YH-uCOS-III,其中 YH 是野火拼音首字母的缩写,当然你也可以换成其它名称,但是必须是英文,不能是中文,切记。

3.2.2 Select Device For Target
当命名好工程名称,点击确定之后会弹出 Select Device for Target 的选项框,让我们选择处理器,这里我们选择 ARMCM3,具体见图 3-1。

0.png


0.png

其实这两个文件刚开始都是存放在 KEIL 的安装目录下,当我们配置 Manage Run-Time Environment 选项框之后,软件就会把选中好的文件从 KEIL 的安装目录拷贝到我们的工程目录:Project\RTE\Device\ARMCM3 下面。其中 startup_ARMCM3.s 是汇编编写的启动文件,system_ARMCM3.c 是 C 语言编写的跟时钟相关的文件。更加具体的可直接阅读这两个文件的源码。只要是 Cortex-M3 内核的单片机,这两个文件都适用。

3.3 在 KEIL 工程里面新建文件组
在工程里面添加 User、uC/OS-III Source、uC/OS-III Ports、uC/CPU、uC/LIB 和 Doc 这几个文件组,用于管理文件,具体见图 3-4。
0.png

对于新手,这里有个问题就是如何添加文件组?具体的方法为鼠标右键 Target1,在弹出的选项里面选择 Add Group…即可,具体见图 3-5,需要多少个组就鼠标右击多少次Target1。
0.png

3.4 在 KEIL 工程里面添加文件
在工程里面添加好组之后,我们需要把本地工程里面新建好的文件添加到工程里面。
具体为把 readme.txt 文件添加到 Doc 组,app.c 添加到 User 组,至于 OS 相关的文件我们还没有编写,那么 OS 相关的组就暂时为空,具体见图 3-6。
0.png

对于新手,这里有个问题就是如何将本地工程里面的文件添加到工程组里里面?具体的方法为鼠标左键双击相应的组,在弹出的文件选择框中找到要添加的文件,默认的文件类型是 C 文件,如果要添加的是文本或者汇编文件,那么此时将看不到,这个时候就需要把文件类型选择为 All Files,最后点击 Add 按钮即可,具体见图 3-7。

0.png

3.4.1 编写 main 函数

一个工程如果没有 main 函数是编译不成功的,会出错。因为系统在开始执行的时候先执行启动文件里面的复位程序,复位程序里面会调用 C 库函数__main,__main 的作用是初始化好系统变量,如全局变量,只读的,可读可写的等等。__main 最后会调用__rtentry,再由__rtentry 调用 main 函数,从而由汇编跳入到 C 的世界,这里面的 main 函数就需要我们手动编写,如果没有编写 main 函数,就会出现 main 函数没有定义的错误,具体见图 3-8。
0.png

main 函数我们写在 app.c 文件里面,因为是刚刚新建工程,所以 main 函数暂时为空,
具体见代码清单 3-1。
代码清单 3-1main 函数
  1. int main(void)
  2. {
  3. for (;;) {
  4. /* 啥事不干 */
  5. }
  6. }
复制代码
…………
…………
一共16章节
…………
完整的pdf格式文档51黑下载地址(共126页PDF):
[野火]《从0到1教你写uCOS-III》.pdf (3.25 MB, 下载次数: 608)

评分

参与人数 2黑币 +55 收起 理由
造梦Sir + 5 很给力!
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:1 发表于 2018-8-9 03:20 | 显示全部楼层
好资料,51黑有你更精彩!!!
回复

使用道具 举报

ID:328014 发表于 2018-8-9 03:20 | 显示全部楼层
写的太棒了,大爱火哥啊.
回复

使用道具 举报

ID:328014 发表于 2018-8-9 03:22 | 显示全部楼层
这个是我看过的最通俗易懂的uCOS-III教程
回复

使用道具 举报

ID:396960 发表于 2018-9-16 10:44 | 显示全部楼层
下来看看,谢谢楼主无私
回复

使用道具 举报

ID:104779 发表于 2018-9-18 01:55 | 显示全部楼层
向上传资料人致敬!
回复

使用道具 举报

ID:86450 发表于 2018-9-18 10:06 | 显示全部楼层
好资料,51黑有你更精彩!!!
回复

使用道具 举报

ID:411798 发表于 2018-10-18 16:44 | 显示全部楼层
很好的资料
回复

使用道具 举报

ID:18591 发表于 2018-11-6 23:23 | 显示全部楼层
好资料,~~~~~~~~~~~~~~~~~~
回复

使用道具 举报

ID:5203 发表于 2018-11-7 08:08 | 显示全部楼层
书中的内容很好,很实用。谢谢啦!
回复

使用道具 举报

ID:393586 发表于 2018-11-7 20:35 | 显示全部楼层
这是野火的吧 公众号里面也发布了
回复

使用道具 举报

ID:445403 发表于 2018-12-13 09:24 | 显示全部楼层
我想下载来学习,可是没有积分。。。
回复

使用道具 举报

ID:162136 发表于 2018-12-27 22:09 | 显示全部楼层
下载看了一下,不错,感谢。
回复

使用道具 举报

ID:58591 发表于 2019-1-11 15:02 | 显示全部楼层
下载学习下,感谢分享
回复

使用道具 举报

ID:66915 发表于 2019-1-12 12:37 | 显示全部楼层
写的太棒了,大爱火哥啊
回复

使用道具 举报

ID:467292 发表于 2019-1-13 11:10 | 显示全部楼层
赞一个!好资料,51黑有你更精彩!!!
回复

使用道具 举报

ID:185317 发表于 2019-1-15 11:26 | 显示全部楼层
谢谢上传
回复

使用道具 举报

ID:18591 发表于 2019-1-20 19:15 | 显示全部楼层
写的太棒了
回复

使用道具 举报

ID:466010 发表于 2019-1-23 17:37 | 显示全部楼层
下载下来看看
回复

使用道具 举报

ID:344498 发表于 2019-1-28 14:30 | 显示全部楼层
带OS应该是做单片机最高阶了
回复

使用道具 举报

ID:273165 发表于 2019-5-16 10:08 | 显示全部楼层
不可多得的好资料,谢谢分享
回复

使用道具 举报

ID:492919 发表于 2019-5-16 19:55 | 显示全部楼层
看上去好利害啊!
下来看看
回复

使用道具 举报

ID:346927 发表于 2019-5-17 20:44 | 显示全部楼层
正在学STM32,不可多得的好资料,谢谢分享!
回复

使用道具 举报

ID:171630 发表于 2019-6-30 22:58 | 显示全部楼层
不错,已经下载下来,希望可以学习学习。
回复

使用道具 举报

ID:282431 发表于 2019-7-2 08:52 | 显示全部楼层
这个是最通俗易懂的uCOS-III教程,学习中
回复

使用道具 举报

ID:282095 发表于 2019-7-2 11:16 | 显示全部楼层
很实用
回复

使用道具 举报

ID:559960 发表于 2019-9-27 08:56 | 显示全部楼层
感谢分享
回复

使用道具 举报

ID:644362 发表于 2019-11-18 15:53 | 显示全部楼层
非常棒的教程,谢谢谢谢!
回复

使用道具 举报

ID:146034 发表于 2020-1-16 12:41 | 显示全部楼层
好资料  学习了
回复

使用道具 举报

ID:655943 发表于 2020-5-2 13:00 | 显示全部楼层
正想学这个,感谢分享
回复

使用道具 举报

ID:282431 发表于 2020-5-2 17:24 | 显示全部楼层
正在学STM32F,好资料,谢谢分享!
回复

使用道具 举报

ID:690363 发表于 2020-5-9 10:59 | 显示全部楼层
我这点黑币啊,估计最后都不够用了,都是好资料,谢谢
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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