引言
为什么学习RTOS
当我们进入嵌入式系统这个领域时,首先接触的往往是单片机编程,单片机编程又首选51单片机来入门。这里说的单片机编程通常都是指裸机编程,即不加入任何RTOS(Real Time Operation System,实时操作系统)的程序。常用的RTOS有国外的FreeRTOS、μC/OS、RTX和国内的RT-Thread、Huawei LiteOS、AliOS-Things等,其中,开源且免费的FreeRTOS的市场占有率最高。如今国产的RT-Thread经过10余年的迅猛发展,在国产RTOS中占据鳌头。
在裸机系统中,所有的程序基本都是用户自己写的,所有的操作都是在一个无限的大循环里面实现。现实生活的很多中小型电子产品中用的都是裸机系统,而且能够满足需求。但是为什么还要学习RTOS编程,并会涉及一个操作系统呢?一是因为项目需求,随着产品要实现的功能越来越多,单纯的裸机系统已经不能完美地解决问题,反而会使编程变得更加复杂,如果想降低编程的难度,可以考虑引入RTOS实现多线程管理,这是使用RTOS的最大优势;二是出于学习的需要,必须学习更高级的技术,实现更好的职业规划,为将来能有更好的职业发展做准备,而不是一味拘泥于裸机编程。作为一个合格的嵌入式软件工程师,学习是永远不能停歇的,时刻都得为将来做准备。书到用时方恨少,希望当机会来临时,读者不要有这种感觉。
为了帮大家厘清RTOS编程的思路,本书会在第2章简单地分析这两种编程方式的区别,这个区别被笔者称为“学习RTOS的‘命门’”,只要掌握这一关键内容,以后的RTOS学习可以说是易如反掌。在讲解这两种编程方式的区别时,我们主要讲解方法,不会涉及具体的代码编程,即主要还是通过伪代码来讲解。
如何学习RTOS
裸机编程和RTOS编程的风格有些不一样,而且有很多人说学习RTOS很难,这就导致想要学习RTOS的人一听到RTOS编程就在心里忌惮三分,结果就是“出师未捷身先死”。
那么到底如何学习RTOS呢?最简单的方法就是在别人移植好的系统上,先看看RTOS中API的使用说明,然后调用这些API实现自己想要的功能即可,完全不用关心底层的移植,这是最简单、快速的入门方法。这种方法有利有弊,如果是做产品,好处是可以快速地实现功能,将产品推向市场,赢得先机;弊端是当程序出现问题时,因对RTOS不够了解,会导致调试困难。如果想系统地学习RTOS,那么只会简单地调用API是不可取的,我们应该深入学习其中一款RTOS。
目前市场上现有的RTOS,其内核实现方式差异不大,我们只需要深入学习其中一款即可。万变不离其宗,即使以后换到其他型号的RTOS,使用起来自然也是得心应手。那么,如何深入地学习一款RTOS呢?这里有一个非常有效但也十分难的方法,就是阅读RTOS的源码,深入研究内核和每个组件的实现方式。这个过程枯燥且痛苦,但为了能够学到RTOS的精华,还是很值得一试的。
市面上虽然有一些讲解RTOS源码的图书,但如果基础知识掌握得不够,且先前没有使用过该款RTOS,那么只看源码还是会非常枯燥,并且不能从全局掌握整个RTOS的构成和实现。
现在,我们采用一种全新的方法来教大家学习一款RTOS,既不是单纯地介绍其中的API如何使用,也不是单纯拿里面的源码一句句地讲解,而是从0开始,层层叠加,不断完善,教大家如何把一个RTOS从0到1写出来,让你在每一个阶段都能享受到成功的喜悦。在这个RTOS实现的过程中,只需要具备C语言基础即可,然后就是跟着本书笃定前行,最后定有所成。
选择什么RTOS
用来教学的RTOS,我们不会完全从头写一个,而是选取目前国内很流行的RT-Thread为蓝本,将其抽丝剥茧,从0到1写出来。在实现的过程中,数据类型、变量名、函数名称、文件类型等都完全按照RT-Thread里面的写法,不会再重新命名。这样学完本书之后,就可以无缝地过渡到RT-Thread了。
RT-Thread简介
RT-Thread的版权属于上海睿赛德电子科技有限公司,它于2006年1月首次发布,初始版本号为0.1.0,经过10余年的发展,如今主版本号已经升级到3.0,累计开发者人数达数百万,在各行各业产品中装机量达到了2000多万,占据国产RTOS的鳌头。
RT-Thread是一款开源免费的实时操作系统,遵循的是GPLv2+许可协议。这里所说的开源,指的是你可以免费获取RT-Thread的源代码,而且当你的产品使用了RT-Thread且没有修改RT-Thread内核源码时,你的产品的全部代码都可以闭源,但是当你修改了RT-Thread内核源码时,就必须将修改的这部分开源,反馈给社区,其他应用部分不用开源。无论是个人还是公司,都可以免费使用RT-Thread。
RT-Thread的意义
不知你是否发现,在RTOS领域,我们能接触到的实时操作系统基本都来自国外,很少见到有国内厂家的产品。从早年很流行的μC/OS,到如今市场占有率很高的FreeRTOS,到获得安全验证非常多的RTX(KEIL自家的),再到盈利能力领先的ThreadX,均来自国外。可在十几年前,在中国,出现了一个天赋异禀、倔强不屈的极客——熊谱翔。他编写了RT-Thread初代内核,并联合中国开源社区的极客不断完善,推陈出新,经过十几年的发展,如今占据国产RTOS的鳌头,且每年能递增数十万名开发者,加上如今AI和物联网等技术发展的机遇,让RT-Thread有“一统江湖”之势,从2018年完成A轮数百万美元的融资就可以看出,在未来不出5年,RT-Thread将是你学习和做产品的不二之选。
那么RT-Thread的意义究竟是什么?RT-Thread来自中国,让我们看到了国内的技术开发者也能写出如此优秀的RTOS,技术方面并不逊色于其他国家。以我们10多年从事电子行业的经验来看,RT-Thread无疑增强了我们在这一领域的自信,这是我们认为的RT-Thread的最大意义。当然,作为一款国产的物联网操作系统,RT-Thread简单易用、低功耗设计、组件丰富等特性也将让其大放异彩。野火,作为一个国内嵌入式领域的教育品牌,能为国产RTOS出一份力也是我们的荣幸,希望本书能够帮助大家快速地入门并掌握RT-Thread。