【我与RT-Thread的故事】我想和你深发展(RT-Thread技术社区优秀文章)


相遇:一切都是美好的邂逅

忘了从什么时候开始,我关注了一大票的以嵌入式开发为主的技术公众号号主,时不时会从这些公众号上获到一些嵌入式领域的资讯。就在今年的3月末,偶然看到这么一篇公众号推文

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-a08pTVk9-1637995646867)(C:\Users\redtea\AppData\Roaming\Typora\typora-user-images\image-20211030225412285.png)]

讲真,工作这么多年了,我还真没参加过一场线下的技术沙龙,对这种技术沙龙即是朦胧而又向往。不过这要换做我早前的状态,我肯定会想:“喂,周末趟家里不香吗?还特意大老远跑去福田听一帮人那里侃大山?” 断然,凭借”嵌入式“三个字是无法说服我的内心去参加的。

然而,人的心态是真的会变的,这个时候的我,我正思考着我接下来的职场路应该如何走,虽然已经带技术团队有些日子了,但是也是摸着石头过河。以前单枪匹马挑大梁的时候,可谓冲锋陷阵,无所不欢;可真要到了带领团队层面,有时真的会有种”心有余而力不足“的感觉。恰好,团队中也在遭受”代码质量“和”开发效率“的双重困扰,这一次真的有触动到我,我也想去了解下外面的技术世界是怎么样的,于是我当即就报名了。

相识:千里"姻缘"一线牵

还在求证职场的路该怎么走的同时,我已经开始对外投递简历了,而让我印象最深刻的是清明节后的一场技术面试。

那场技术面试很愉快,面试官是一位很nice的80后,我们对嵌入式技术架构的理解都非常的接近,有种相见恨晚的感觉。在面试的最后,面试随口问了一个问题:”平时你都关注些什么样的开源技术框架呀?“ 我一直以来都是以Linux技术为主做开发,自然回答到以Linux的底层框架学习为主。突然,面试管有种师者的姿态跟我说了一句话:

可以关注下RT-Thread这个开源的操作系统,它的框架设计得非常不错,非常值得我们去学习!

我一听,心想这不正是我前段时间想要参加的那个技术沙龙的RT-Thread吗?就这样,我更加坚定了我要参加这次技术沙龙的决心。当然,后面从这次技术沙龙学习到的东西也远远超出了我的预期,这里就一张现场的PPT图,大家感受下:真的是满满的”嵌入式“。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wneKYZ8y-1637995646872)(C:\Users\redtea\AppData\Roaming\Typora\typora-user-images\image-20211030233944412.png)]
没有意外,也没有波澜,从技术沙龙回来后,我便答应了那场面试的offer,开始担任嵌入式架构师的一职,在架构的技术领域与前辈们并肩作战,这种感觉甚好。不过,现在回头想想,不正是因为那一线牵,我才会跟RT-Thread越走越近吗?

相知:是吗?原来就是你

受工作内容的影响,常常需要调研和对比各种开源框架,也就从那相识之后,我逐渐对RT-Thread了解得越来越多,慢慢地我也发现了RT-Thread框架设计理念的先进性。

一切皆文件

非常让我眼前一亮的是它居然也引入了Linux的设计精髓:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rhKPyw4v-1637995646875)(C:\llc\private\csdn\vfs.jpg)]
熟悉Linux开发的人,不论是开发内核还是开发应用,一定对这个观点理解很深刻。不管你是基础文件,还是块存储设备,亦或是网络通讯的socket通道,你都可以使用一个叫**FD(文件句柄)**的东西,把你的所有操作操作串联起来。open、read、write、ioctl、close这些基本熟悉而又基本的操作,在这里都将变得如此的容易。

这个主要得益于RT-Thread的**DFS(设备虚拟文件系统)**框架,在这个框架下它为应用程序提供统一的 POSIX 文件和目录操作接口,同时也支持多种类型的文件系统,支持多种类似的存储设备,并且对具体硬件设备做了抽象层设计,真正做到与硬件无关。

易扩展的系统初始化设计

一个强大的系统开始,总是有各式各样的初始化操作,RT-Thread也不例外,但是有趣地是RT-Thread在设计系统初始化的操作时,非常巧妙地引入了以分布做基础啊,可以批量并快速地完成各种初始化接口的调用。同时,在初始化的时序上,对不同类别的初始化接口做了不同的初始化优先级别,从而很好地解决了初始化前后依赖的时序问题。

从设计上,开发者若要新增自己的初始化接口,只需要引用下面这些宏接口,就可以快速将你的初始化接口添加到对应级别的初始化列表里面,从而自动在相应的时机下完成对应的初始化操作,这个设计简直不要太好。

/* board init routines will be called in board_init() function */
#define INIT_BOARD_EXPORT(fn)           INIT_EXPORT(fn, "1")
/* pre/device/component/env/app init routines will be called in init_thread */
/* components pre-initialization (pure software initilization) */
#define INIT_PREV_EXPORT(fn)            INIT_EXPORT(fn, "2")
/* device initialization */
#define INIT_DEVICE_EXPORT(fn)          INIT_EXPORT(fn, "3")
/* components initialization (dfs, lwip, ...) */
#define INIT_COMPONENT_EXPORT(fn)       INIT_EXPORT(fn, "4")
/* environment initialization (mount disk, ...) */
#define INIT_ENV_EXPORT(fn)             INIT_EXPORT(fn, "5")
/* appliation initialization (rtgui application etc ...) */
#define INIT_APP_EXPORT(fn)             INIT_EXPORT(fn, "6")

强解耦的组件化设计

组件化设计要求尽可能地把各组件之间的耦合关系解开,使得你的代码不再是一个main函数一写到死的那种呆板,而是如同建筑设计师一样,可以从庞大的材料库里面挑选一件件的适合自己的模块,再使用自己独特的方式,堆砌组合成绚丽的碉堡。

而在这一点上,RT-Thread从设计之初就一直沿用这个组件化设计的思路,大大提升了开发者的灵活性和开发效率,这一点是值得点赞的。

高伸缩的可裁剪设计

评估一个系统或框架是否合适在ROM和RAM都相对匮乏的嵌入式环境下使用,一个非常重要的指标就是看它是否支持功能裁剪。说到可裁剪性,RT-Thread给出的答案是,除几个极少数的必备组件以及系统内核需要保留外,其他组件都可以裁掉,极大地提升了将它移植到某个嵌入式环境的可能性。

甚至,在更为吃紧的嵌入式平台,还可以有RT-Thread Nano版本,根据官网文档给出的参考数据

资源占用小:对 RAM 与 ROM 的开销非常小,在支持 semaphore 和 mailbox 特性,并运行两个线程 (main 线程 + idle 线程) 情况下,ROM 和 RAM 依然保持着极小的尺寸,RAM 占用约 1K 左右,ROM 占用 4K 左右。

这些足以证明,RT-Thread在可裁剪方面无疑做了非常优异的设计。

跨平台的兼容设计

以上的种种设计,配合C语言强大的跨平台能力,真的有一种你在开发Linux内核的那种feeling,使用过的人一定都会不禁感慨,RT-Thread的架构师们一定师从Linux,且对Linux的设计理念和实战精髓了然于胸,只有这样才能很好地驾驭如此精湛的设计。

相爱:爱不释手,宝刀屠龙

对RT-Thread认识越深,我逐渐喜欢上了这个操作系统,于是乎我开始疯狂地追求它。

从网络平台不断地了解它的资讯,加入了各个RT-Thread相关的技术群,从中得知了RT-Thread有个非常活跃的技术论坛,于是乎我第一时间注册加入了。

得知在论坛有举办国产BSP移植的技术活动,我想着这不正是我实战RT-Thread的好机会吗?于是乎我第一时间报名参加了,不过有些遗憾,那段时间恰好新工作非常繁忙,加上很多项目刚上手,实在没有太多的时间来完成这个移植,最后这个活动我的工作成果流产了,没能成功完成PR的合并。但是,实践总是最珍贵的,我想接下来的时间,我还是会抽空完成未完成的部分,尽快对这个活动有所交代。

后来又得知,论坛每月都有RT-Thread问答志愿者小分队的活动,于是乎我也是第一时间报名了。第一个月报了名但没有参与答题,陪跑了一个月。第二个月开始我认真准备答题,期间也得到了一些技术群友的认可和点赞,最终那个月的得了个第二名,心理满是欢喜,有人需要和认可的感觉,就是不一样。第三个月,也就是10月份,我更加耐心地准备答题,我一直认为带着问题去寻找答案的那个过程是最能让人进步的。从未研究过的模块,看着别人的问题,一步步地查找文档,翻阅源码,搜索博文,就是为了最大化地把自己对问题的理解和对问题的解决思路分享出去。不能说表达出来的一定是对的,但或许你的想法正好启发了别人,又或者别人看到你的这个思路,恰好解决了困惑它好久的问题,我想这应该就是我答题的最大乐趣吧。

时间来到10.24,程序员圈子里的重要节日,有幸收到RT-Thread小师弟的盛情邀请,为论坛1024活动出谋划策,最后活动顺利如期举办,收到了不少热心论坛成员的参与,当然我也用心参与了此次活动。最后活动评比,我的参选作品,以微弱优势取得了第一名的成绩,内心无比欣慰,衷心感谢RT-Thread技术团队的欣赏和赞许,同时也倍感压力,希望后续能输出更多优秀的作品,回到社区论坛。

就在9月中旬,论坛首页挂上了RT-Thread X RISC-V创新应用大赛海报,于是乎我也踊跃报名参加了。

image.png

对我而言,我甚至认为这是我参加RT-Thread的一次大考,学习了大半年,终于要到战场上去杀敌了,是骡子是马,拉出来溜溜便知。不过,我倒是对自己充满信心,毕竟RT-Thread是我的屠龙宝刀,谁与争锋

相守:你若不离,我便不弃

俗话说:”相爱容易相守难“。这是感情世界里的真谛,放到RTOS这个技术领域,也一样适用。

随着近些年,国内技术的发展,越来越多地国产操作系统如雨后春笋般涌现在我们面前,在嵌入式领域再已不是UCOS、freeRTOS、ThreadX三足鼎立了。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cLXVdOxc-1637995646899)(C:\llc\private\csdn\csdn_16x9_80_rtos.jpg)]

既是机遇,也是挑战。在整个国际环境下芯片缺货的严峻形势,也正好给了国产芯片一个起势发展的大好机会。这个时候,RT-Thread选择及时拥抱国产芯片,都是顺势而为,聪明之举。无论是之前的国产BSP移植活动,还是当下正火热的RISC-V创新应用设计开发大赛,都是把国内开发者拉到与国产芯片一同发展的起跑线。

同时,需要泼一泼冷水的就是,时代在进步,技术也在进步,没有什么是长盛不衰,只有不断地打磨自己的技术,填补自己的空缺,突出自己的优势,才能不被社会淘汰。

以上是对RT-Thread的忠告,也是对自己作为开发者的一个鞭策,正视自己的优势和不足,时刻保持进步,哪怕最后不能永垂不朽,也要在历史的长河里画上浓重的一笔,证明自己曾经努力过。

最后,我也衷心希望国产芯片和国产操作系统,以及国内开发者都能抓住这次浪潮的机会,大家一起成长,共同进步,为中华崛起的梦想做出自己的贡献,因为这同时也是我们每个中国人共同的美好愿望,不是吗?

相约:更多分享

欢迎关注我的github仓库01workstation,日常分享一些开发笔记和项目实战,欢迎指正问题。

同时也非常欢迎关注我的CSDN主页和专栏:

【CSDN主页:架构师李肯】

【RT-Thread主页:架构师李肯】

【C/C++语言编程专栏】

【GCC专栏】

【信息安全专栏】

【RT-Thread开发笔记】

【freeRTOS开发笔记】

有问题的话,可以跟我讨论,知无不答,谢谢大家。

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

架构师李肯

您的鼓励是我前进的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值