学习RTOS操作系统,有必要阅读内核源码吧?

45cc497d3759be58756628f12e460d54.png

在读大学的时候,我喜欢研究底层的技术原理,比如数码管、液晶、74系列逻辑IC等,好奇它们怎么工作、怎么实现的,也会写一些代码来测试,验证其中原理。

再后来,学习一些协议栈、RTOS,会比较好奇,也会花时间研究其中的源码。

直到深入阅读、理解RTOS内核源码的时候,才发现并非一件容易的事。

因为最近有读者在问类似的问题,有没有必要阅读RTOS内核源码,所以,今天就来简单分享一下相关的内容。

我学习RTOS的经历

先给大家说下我学习RTOS的经历吧。

我学习RTOS是从大学的时候就开始了,在学习RTOS之前和很多人一样,也是什么都不懂,跟着老师、看着周边的人学什么就跟着学什么,比如数电、模电、单片机编程、外设等。

单片机裸机各种资源外设学的差不多,感觉应该进阶一下了,所以就选择了RTOS。

在2011、12年读书的时候,RTOS还不像现在这么流行(那时还是以“裸机”为主),那个时候网上RTOS的教程基本都是μCOS,其他RTOS的资料相对很少。像FreeRTOS、RT-Thread以及其他RTOS的资料都很少。

因为早期μCOS的发行都有配套的书籍(请参看µC/OS的那段故事),所以早些年在教学方面大多选择了μCOS,这也是我当时选择μCOS作为学习的原因。

(顺便再提一点,虽然早期μCOS是商业收费的操作系统,但源码是可以免费下载的)

1.选择单片机开发板

我早期学习单片机主要是51(AT89C51、STC89C51等),MSP430等,可以说对他俩玩的比较熟。

所以学习μCOS也是基于他俩开始的,因为大家都知道51资源(Flash、RAM)确实太少了,虽然网上有基于51单片机移植μCOS系统的,但移植系统之后基本干不了别的事了。

所以,我基于51移植μCOS折腾了一段时间就放弃了,选择了MSP430,430相对51资源多一些,还能有发挥的余地。

早些年如果有学习基于MSP430移植μCOS系统的同学,或许都看过我早期分享的源码:

6ae84962395bb89be927ca794943cd76.png

因为MSP430之后用过STM32xx、 LPC17xx等基于ARM Cortex-M3 内核的32位单片机,当时基于MSP430跑μCOS系统也感觉很吃力,所以后来选择了STM32跑μCOS系统。

顺便再回忆一下STM32开发板:

现在STM32开发板基本是正点原子、安富莱、野火这三家的天下,早些年基于STM32的开发板是一家神舟开发版,当时可以说全网最火,关键原因是性价比很高。

5ca39f0d36b390feab0cb36ba2064d0f.png

当时,像神舟III号基于STM32F103ZE那样一块板载资源非常丰富的开发板只要一百多。虽然我当时比较穷,但我还是没经受住诱惑买了神舟I号,后又买了神舟III号。

可惜的是,神舟开发板团队后面(应该在15年之后)就没有再做了,不知道有多少人还有这段记忆?

2.阅读μCOS内核源码

我接触μCOS操作系统是在2011年,那个时候也是参考各种例程移植代码,观察各种现象。

虽然系统跑通了,内核资源也用上了,但始终不能理解各种原理,也不能Get到实时操作系统的精髓

于是,开启了阅读源码之路,这一下来,发现并不简单。因为操作系统中有各种指针、数组、结构体等,那个时候老师也从来没有教过数据结构那些知识,只能靠自己一步一步摸索。

我阅读μCOS操作系统内核源码及内核资源,前前后后、断断续续大概花了一年时间,之后才深入明白RTOS原来是这么工作的,也更加理解了μCOS内核调度原理、通信机制等。

如果早些年有学习μCOS的同学,应该会看过我早期分享的一份基于神舟III号、uCOS2.92系统的源码,包含多任务、信号量、互斥锁、事件标志、消息邮箱、消息队列、内存管理等各种例程:

63061dc9f26ec2a1b2f2761ab455abe7.png

这份源码有中文注释,是我早期学习μCOS的时候一步一步翻译过来,当时学习μCOS可以说下了狠功夫。

关于这个源码我录了一个简单的视频:

学习RTOS有必要阅读源码吗?

你看了我上面的经历,可能会有一种阅读内核源码的冲动。

其实,对于很多人我是不建议阅读源码,特别是两种人:

  • 基础较差的人

  • 没有时间的人

我学习RTOS之前折腾过很多源码,也参加过电子设计竞赛得过奖,自认为基础还可以。关键是在大学,有大量的时间。

如果你基础不好,且没有太多空闲时间,又要学习RTOS,阅读源码一定要慎重、慎重、再慎重。

对于绝大部分读者,我的建议是:直接参考例程,然后折腾操作系统的各种API,通过状态灯、串口打印输出理解其中的作用及原理。

比如:创建任务之后,删除任务,你观察状态灯是否还在执行这个任务。

阅读并理解内核源码有什么好处?

你可能会问:不建议阅读源码,是不是阅读源码就没啥作用了?

阅读并理解源码其实对自己有很大帮助作用的,比如你会进一步理解RTOS各种通信机制方便后期应用编程,再比如能提升自己的编程思维,我后期很多项目都借鉴了一些源码的模式。

最后再说明一下,RTOS内核有一些相对复杂的内容,如果你基础不好,可能阅读几天就放弃了。同时,如果你没时间,只是三天打鱼两天晒网,最终可能没有一点收获。

所以,对于绝大部分人我是不建议阅读源码。

daf193d1e7691a416aa13ff95ccf2a3d.png

1.嵌友们,BUG不好找?那是因为宏定义没用好!

2.GD32V RISC-V MCU调试体验

3.2022年六大值得关注的边缘计算趋势

4.2021年第12期《单片机与嵌入式系统应用》电子刊新鲜出炉!

5.STM32的SPI外设片选只有一个,怎么破?

6.C语言开发单片机,为什么都是全局变量形式?

bf9ae0ecde2001c2e2d95892d8b535b3.gif

免责声明:本文系网络转载,版权归原作者所有。如涉及作品版权问题,请与我们联系,我们将根据您提供的版权证明材料确认版权并支付稿酬或者删除内容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值