微信公众号 | strongerHuang
最近看到技术交流群在讨论【要不要阅读RTOS内核源码】的话题。站在过来人的角度来说下:非必要,不建议你阅读RTOS内核源码。
我在读大学的时候,喜欢研究底层的技术原理,比如数码管、液晶、74系列逻辑IC等,好奇它们怎么工作、怎么实现的,也会写一些代码来测试,验证其中原理。
再后来,学习一些协议栈、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系统的同学,或许都看过我早期分享的源码:
因为MSP430之后用过STM32xx、 LPC17xx等基于ARM Cortex-M3 内核的32位单片机,当时基于MSP430跑μCOS系统也感觉很吃力,所以后来选择了STM32跑μCOS系统。
顺便再回忆一下STM32开发板:
现在STM32开发板基本是正点原子、安富莱、野火这三家的天下,早些年基于STM32的开发板是一家神舟开发版,当时可以说全网最火,关键原因是性价比很高。
当时,像神舟III号基于STM32F103ZE那样一块板载资源非常丰富的开发板只要一百多。虽然我当时比较穷,但我还是没经受住诱惑买了神舟I号,后又买了神舟III号。
可惜的是,神舟开发板团队后面(应该在15年之后)就没有再做了,不知道有多少人还有这段记忆?
2.阅读μCOS内核源码我接触μCOS操作系统是在2011年,那个时候也是参考各种例程移植代码,观察各种现象。
虽然系统跑通了,内核资源也用上了,但始终不能理解各种原理,也不能Get到实时操作系统的精髓。
于是,开启了阅读源码之路,这一下来,发现并不简单。因为操作系统中有各种指针、数组、结构体等,那个时候老师也从来没有教过数据结构那些知识,只能靠自己一步一步摸索。
我阅读μCOS操作系统内核源码及内核资源,前前后后、断断续续大概花了一年时间,之后才深入明白RTOS原来是这么工作的,也更加理解了μCOS内核调度原理、通信机制等。
如果早些年有学习μCOS的同学,应该会看过我早期分享的一份基于神舟III号、uCOS2.92系统的源码,包含多任务、信号量、互斥锁、事件标志、消息邮箱、消息队列、内存管理等各种例程:
这份源码有中文注释,是我早期学习μCOS的时候一步一步翻译过来,当时学习μCOS可以说下了狠功夫。
关于这个源码我录了一个简单的视频:
学习RTOS有必要阅读源码吗?
你看了我上面的经历,可能会有一种阅读内核源码的冲动。
其实,对于很多人我是不建议阅读源码,特别是两种人:
-
- 基础较差的人、没有时间的人
我学习RTOS之前折腾过很多源码,也参加过电子设计竞赛,自认为基础还可以。关键是在大学,有大量的时间。
如果你基础不好,且没有太多空闲时间,又要学习RTOS,阅读源码一定要慎重、慎重、再慎重。
对于绝大部分读者,我的建议是:直接参考例程,然后折腾操作系统的各种API,通过状态灯、串口打印输出理解其中的作用及原理。
比如:创建任务之后,删除任务,你观察状态灯是否还在执行这个任务。
阅读并理解内核源码有什么好处?你可能会问:不建议阅读源码,是不是阅读源码就没啥作用了?
阅读并理解源码其实对自己有很大帮助作用的,比如你会进一步理解RTOS各种通信机制方便后期应用编程,再比如能提升自己的编程思维,我后期很多项目都借鉴了一些源码的模式。
最后再说明一下,RTOS内核有一些相对复杂的内容,如果你基础不好,可能阅读几天就放弃了。同时,如果你没时间,只是三天打鱼两天晒网,最终可能没有一点收获。
所以,对于绝大部分人我是不建议阅读源码。