从RT-Thread中我们能学到什么?
柴胡 · 所⾔
柴胡,⽬前在九安医疗从事物联⽹智能设备的开发和单⽚机及嵌⼊式驱动的开发⼯作,是RT-Thread和嵌⼊式技术爱好者。
本⽂将为⼤家简要介绍⼀下笔者使⽤和学习RT-Thread过程中的体会和感悟,希望能帮助初识RT-Thread的⼈建⽴⼀个初步的印象,避免产⽣⼊宝⼭⽽空回的遗憾。笔者⽔平有限,⽬前也正在学习和使⽤RT-Thread的过程中,希望本⽂的拙见能抛砖引⽟,如有纰漏,还请不吝赐教。
thread技术现在是⼀个快节奏的时代,技术领域也是如此。近些年,IoT备受资本青睐,各种新技术新⽅案层出不穷,质量也参差不齐,这边唱罢那边登台,以⾄于有些技术还未被⼈熟知,就被淹没在长河中了。客观的说,RTOS领域玩家众多,仅笔者短短的从业时间,国产RTOS就听闻了五、六款之多。
RT-Thread作为⼀个有⼗余年历史的国产RTOS,经历了长时间的考验和⽤户的青睐,⽬前发展趋势蒸蒸⽇上,也即将发布RT-Thread
3.0,其中必然有值得我们思考和学习的地⽅,我们也可以从中汲取到不少宝贵的经验。
软件⼯程管理
软件⼯程管理对于软件研发是⼗分重要的,甚⾄可以说是开发过程的基⽯。公司中有⾼⽔平的嵌⼊式软件程序员,也有刚⼊职的实习⽣,⽔平难免参差不齐,当共同协作开发⼀个项⽬时,如何彼此协调也是⼀个难题。
时⾄今⽇,很多公司仍然在使⽤落后的代码管理⽅式。有些甚⾄使⽤把代码压缩成⼀个个的压缩包来做版本管理。同事之间的协作依靠互相发送⽂件,每次接收到同事的新⽂件⾸先要花半天时间解决编译error,甚⾄还要在本地对同事的代码进⾏修改,这样,软件基本处在半失控的状态,某次改动产⽣问题,就要从浩瀚的压缩包海洋⾥挑选⼀个,进⾏版本回退。在开发⼀个⼤项⽬的时候,这种情况下甚⾄会出现⼈数越多,开发难度和周期越⼤的情况。
⽽RT-Thread,提供了⼀个教科书级的范例。RT-Thread由13000多个⽂件构成,⽀持各类设备和芯⽚近70款,从代码量和组织⽅式上来说,是⼀个相当庞⼤的软件⼯程。在近⼗年的时间⾥,⾄少有将近100个开发者参与到了RT-Thread的开发中,使得RT-Thread稳步迭代,⽽这也是有⼀定的维护难度的。RT-Thread将代码部署在Github上,并在此基础上使⽤了Travis CI进⾏⾃动化编译测试,使得开发者可以有条不紊的进⾏迭代开发,并将⾃⼰的成果提交⾄master分⽀,在提交代码的第⼀时间通过Travis CI进⾏
⾃动化编译测试,使得⼀些⽆法编译通过的问题,在第⼀时间就被发现。
RT-Thread使⽤scons⾃动化代码构建⼯具。初识RT-Thread,很难想象RT-Thread通过⼀个代码仓库,对近70个芯⽚的IAR、MDK和GCC的⼯程和⼯具链提供⽀持。RT-Thread使⽤了scons,使得只要敲⼏⾏指令,就可以⽣成所需环境和⼯具链的对应的⼯程。也就是说,对于⼤多数芯⽚,所谓移植RT-Thread,只需要⼏个scons指令进⾏⾃动化构建。我相信对于⼤多数中⼩公司的软件项⽬,⽆论从规模还是参与⼈数都没有RT-Thread这么庞⼤,维护难度也远⼩于RT-Thread。但尽管如此,⼯程维护也是软件⼯程管理的⽼⼤难问题,⽆疑,从RT-Thread中,我们可以借鉴不少经验。
代码风格与技术
RT-Thread的代码风格是⼗分优秀的。在⼯作中,很多时候嵌⼊式软件⼯程师尤其是单⽚机软件⼯程师使⽤的芯⽚资源相对⽐较匮
乏,RAM和ROM也略显局促,节省资源也成了优先级⽐较⾼的事情,⽽这也成了许多⼯程师代码不规范的借⼝。鲁棒性、模块化、可拓展、⾼内聚、低耦合,这种⾼⼤上的名词总是不绝于⽿,相信⼤家也在各种场景下听过不少次。可抛去这些⾼⼤上的名词,到底什么才是优秀的代码呢?
RT-Thread虽然没有强调过这些⾼⼤上的名词,但是他毫⽆疑问⽤代码对这些名词进⾏了解释。RT-Thread的代码风格是类Linux/Unix的代码风格。这种风格不仅仅体现在函数、变量的命名规范,⽽是深⼊到了RT-Thread的核⼼。例如,RT-Thread实现了⼀个设备驱动框架,将设备类型分为了字符设备、块设备、⽹络接⼝设备、内存设备、CAN设备、RTC设备、声⾳设备、图形设备、I2C总线设备等等等等。初始化时通过字符串(⽤户可⾃定义的⼀个易于记忆的名称)与设备驱动绑定,并将驱动注册到内核,使⽤时只需调⽤⼀个字符串,即可匹配到该设备,⽆需通过各种头⽂件包含和⼆次封装,即可实现隔离和解耦。
RT-Thread提供了Finsh和msh组件,这是⾮常有特⾊组件,可以在调试和开发中与系统内核进⾏便捷的交互,使⽤⼗分⽅便。如何在资源紧缺的嵌⼊式软件开发中,写出优秀的代码,RT-Thread⼗分值得我们思考和学习。
开源精神
RT-Thread是国内第⼀梯队的嵌⼊式开源项⽬,也正因为开源和社区化,RT-Thread得以茁壮发展,并在开发⼈员中赢得了极⾼的⼝碑,有不⼩数量的开发者参与到了RT-Thread的开发中。RT-Thread实时操作系统遵循GPLv2+许可证,实时操作系统内核及所有开源组件可以免费在商业产品中使⽤,不需要
公布应⽤源码,没有任何潜在商业风险。这种开源精神⼗分令⼈钦佩。
得益于RT-Thread的开源,我们可以将⾃⼰的代码提交,经过审核后合并⾄master分⽀,在使⽤过程中,当某个模块出现疑问或问题,可以直接与开发者甚⾄创始⼈直接进⾏讨论,这种体验是⼗分奇妙,也是其他RTOS所不具备的。
RT-Thread倡导⼤家参与RT-Thread开发的代码编写、bug修复、⽂档完善等等各项进程中。⽽实际上⼀旦⾃⼰提交的东西被采纳和合并,也是⼀件⼗分有成就感的事情。
我们也可以学习RT-Thread的开源精神,将⾃⼰业余时间的代码开源,或者积极参与到开源项⽬中,在⽅便⼤家使⽤的同时,通过进⾏更⼴泛的讨论,也相当于有了更多的⼈帮助review,接受⼤家的批评和建议,实现⾃⼰更快的进步。
⼀些思考
现在⼤家都⼗分渴望成功,并且渴望快速成功。在各种融资奇迹下,渐渐地,⼤家希望,趁着风⼝,激进地在短时间内完成⼀款产品,然后借着风⼝⼀飞冲天。也渐渐地,失去了精⼼打磨耕耘⼀个产品的耐⼼。RT-Thread在数千万装机量和获得天使轮近千万融资的背后是⼗年如⼀⽇的细⼼耕耘和精⼼呵护。
RT-Thread的创始⼈熊谱翔先⽣,起初是在2005年,⾯对RTOS现状,利⽤业余时间开发RT-Thread。我想熊谱翔先⽣的初⼼也仅仅是想做⼀款真正优秀的实时操作系统吧。如同《三傻⼤闹宝莱坞》中,兰彻达斯所说:“追求卓越,成功就会在不经意间追上你”。
欢迎⼤家积极投稿,会有惊喜等着你哦
▼
END
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论