大家好,我是李述铜,一名专注于嵌入式系统与底层开发的技术讲师,我的主要工作是制作课程带大家从零手写操作系统、TCP/IP协议栈、文件系统等核心系统,从实现的视角理解计算机底层原理。
今天写一写一位同学的提问:有没有必要手写一个RTOS?
很多同学在学习嵌入式系统时,都会听到一个词——RTOS(实时操作系统)。 它几乎是所有复杂嵌入式项目的核心。但真正能搞懂它的人,其实并不多。大多数人只是停留在简单地调用API。
然而,相比之下,有些人可能走得更远,去深入研究RTOS的实现,甚至是手写RTOS。 于是,我们可能就会有这个问题:手写一个RTOS,真的有必要吗?
很多人看到这个问题,会觉得浪费时间——毕竟现成的RTOS、库、框架都已经很成熟,我们只需要调用几个API就能让任务跑起来。
例如,市面上的RT-Thread、FreeRTOS都已经非常完善,用得人也多。直接拿来用就好了,为什么还要去写一个呢?这不浪费时间吗?

实际上,手写RTOS的价值,不在于做出一个“可以用的系统”,而在于理解底层原理。例如,手写RTOS可以帮助你:
当然,理解底层原理并不是目的,而是手段,它的作用是帮助我们:
所以说,手写RTOS的目的并不是简简单单地重复“造轮子”,而是让让你从使用者转变为理解者和创造者,并且在实际项目中更好地去使用RTOS。
我第一次接触RTOS,是在大学时期。那时候我看的是μC/OS ii的源码。(当时这个RTOS还是比较流行的,用得人也多)
不同于现在的资料丰富,当时关于uc/OS的资料比较少,也没有各种教学视频。记得我第一次去看完他的API文档后,只能说是对如何使用该系统有了非常粗浅的理解。
后来,出于学生时单纯喜欢研究技术的心理,我开始深入其源码实现。不过,第一次打开源码的时候,发现完全看不懂。各种数据结构,还有任务调度、就绪表、任务切换等一大堆陌生的概念,让我无从下手。
不过,我好在当时找到了一本介绍uc/OS源码实现的书,硬生生地啃了好几遍,花了很多时间,最终对其实现有了个大概的理解。整个过程很痛苦,也很有成就感。 当我终于明白一个任务是如何切换的,中断是如何返回的,那种能够“看到系统内部运行状态”的感觉,还是相当震撼。
从那之后,我再看任何RTOS的源码,都不再害怕,先后去看了RT-Thread、FreeRTOS的源码。并且,这个过程不再有难度,我能清楚地知道每个API背后在干什么,出现问题时,也能快速定位原因。 这种“能看懂底层”的能力,是我职业生涯里最有价值的东西之一。
后来,我发现很多同学在学习RTOS时都遇到我当年的问题:
要么教材太抽象,要么源码太复杂。
如果一上来就面对数千行的代码,并且由于RTOS的各个模块之间又耦合严重;对于初学者来说,会感觉到越看越乱,最后放弃。
所以,能不能做尽可能从初学者的角度出发,把RTOS的实现原理一步步地展现出来?
于是我决定做一件事: 按照初学者的思路,重新构建一个RTOS,从零手写出来。
然后,形成了我的第一门广受好评的课程《从0到1手写嵌入式操作系统》。

在这个课程中,我从最简单的“任务切换”讲起,一步步构建任务管理、时间管理、消息机制、信号量、中断处理,直至实现一个完整的RTOS。通过这个课程,可以让每个知识点都能看得见、改得动、跑得通。 每一部分都自己动手写,没有隐藏逻辑,没有框架依赖。
其实,每一步写的过程,其实就是一次深度解剖RTOS的过程。 当实现过调度器、堆栈切换、延时函数等功能模块后,再去看FreeRTOS、RT-Thread的源码时,会发现那些复杂的代码一下子变得清晰可见。很多同学学完后跟我说,不再惧怕RTOS源码,在项目中也能更好地使用RTOS。
甚至有少同学学习之后,将其作为项目写入自己的简历中,成功找到心仪的工作!

可以看到,哪怕不仅仅是从使用的角度,而是从面试找工作的角度来说,有一个手写RTOS项目在手也是非常有必要的。它可以让你的简历加分,也能让你在面试和面试官侃侃而谈。
不过,由于老的课程开发于较早的时间,并且仅仅是介绍RTOS的实现并未涉及RTOS的应用。
所以,为了让更多同学能够真正掌握RTOS的底层原理和实际应用,我推出了全新升级的《RTOS开发与实战》系列课程,包含两门子课程:《【RTOS内核开发】从0手写嵌入式操作系统》和《【RTOS项目实战】远程温湿度监控设备》。


这次升级,课程在内容、实战和工具链上都进行了全面优化:
完成课程后,你将不仅掌握如何从零手写RTOS,还能独立将其应用于实际嵌入式项目,真正实现从“会用RTOS”到“能设计与驾驭RTOS”的跃升。

除此之外,课程还赠送开发板,方便同学们在真实的环境上去进行各种实现。

李述铜,嵌入式系统与底层架构领域讲师,专注于操作系统、CPU 架构的教学与研究。 出版作品《从0手写x86计算机操作系统》。主讲课程包括:《从0手写嵌入式操作系统》《从0手写TCP/IP协议栈》等。
欢迎关注我的微信公众号【李述铜的知识课堂】,以便及时获取我的更多文章!-> lishutong1024.cn
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。