文章目录

  • 相遇:一切都是美好的邂逅
  • 相识:千里"姻缘"一线牵
  • 相知:是吗?原来就是你
    • 一切皆文件
    • 易扩展的系统初始化设计
    • 强解耦的组件化设计
    • 高伸缩的可裁剪设计
    • 跨平台的兼容设计
  • 相爱:爱不释手,宝刀屠龙
  • 相守:你若不离,我便不弃
  • 相约:更多分享

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

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

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

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

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

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

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

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

我一听,心想这不正是我前段时间想要参加的那个技术沙龙的RT-Thread吗?就这样,我更加坚定了我要参加这次技术沙龙的决心。当然,后面从这次技术沙龙学习到的东西也远远超出了我的预期,这里就一张现场的PPT图,大家感受下:真的是满满的”嵌入式“。

没有意外,也没有波澜,从技术沙龙回来后,我便答应了那场面试的offer,开始担任嵌入式架构师的一职,在架构的技术领域与前辈们并肩作战,这种感觉甚好。不过,现在回头想想,不正是因为那一线牵,我才会跟RT-Thread越走越近吗?

相知:是吗?原来就是你

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

一切皆文件

非常让我眼前一亮的是它居然也引入了Linux的设计精髓:

熟悉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创新应用大赛的海报,于是乎我也踊跃报名参加了。

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

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

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

随着近些年,国内技术的发展,越来越多地国产操作系统如雨后春笋般涌现在我们面前,在嵌入式领域再已不是UCOS、freeRTOS、ThreadX三足鼎立了。

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

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

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

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

相约:更多分享

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

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

【CSDN主页:架构师李肯】

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

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

【GCC专栏】

【信息安全专栏】

【RT-Thread开发笔记】

【freeRTOS开发笔记】

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

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

  1. 深大自考计算机科学与技术资料,想自考深圳大学的计算机科学与技术专业,难吗?...

    原标题:想自考深圳大学的计算机科学与技术专业,难吗? 在深圳这座城市,计算机可谓是一门很吃香的行业,无论是在工资待遇上还是福利上都是占有很大优势的,那如果想自考深圳大学的计算机科学与技术专业,难吗? ...

  2. 除了打通各类知识平台的激励系统,他们还想做国际领先的区块链技术社区

    Watson 渡鸦区块链专栏记者 谈国鹏于2004年从东南大学计算机专业毕业.毕业之后,在思科(Cisco)工作了八年.于2011年决定离职自主创业,先后做了两个创业项目,其中包括社交网络邻居网,做到 ...

  3. 想要的AI部署前沿技术都在这里了!

    不得不相信英伟达总能给我们惊喜,老潘作为一名深度学习从业者以及游戏爱好者,对于这种与AI.GPU.并行计算相关的话题一直都是比较感兴趣.作为深度学习第一大硬件平台的英伟达,我们自然熟悉的不能再熟悉了. ...

  4. 约瑟夫环c语言计蒜客链表,约瑟夫环的故事 - osc_3n35hvex的个人空间 - OSCHINA - 中文开源技术交流社区...

    usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading. ...

  5. qt非thread使用sleep_.NET进阶篇06-async异步、thread多线程3

    知识需要不断积累.总结和沉淀,思考和写作是成长的催化剂 一.任务Task System.Threading.Tasks在.NET4引入,前面线程的API太多了,控制不方便,而ThreadPool控制能 ...

  6. thread类 java_java入门避坑必读,通过Thread类创建java多线程

    欲善编程,多看.敲.讨论:动眼.手.大脑. 1 为什么要用多线程 平常我们做crud的时候,用到多线程的机会不多.但当我们要处理一些复杂的业务时,或者提高程序处理效率时,就绕不开多线程的使用.也有些时 ...

  7. java thread等特,进阶之路|奇妙的Thread之旅

    学习导图: 一.为什么要学习Thread? 在Android中,几乎完全采用了Java中的线程机制.线程是最小的调度单位,在很多情况下为了使APP更加流程地运行,我们不可能将很多事情都放在主线程上执行 ...

  8. 一篇故事看懂从 session-cookie 到 JWT 的技术演变

    作者 | 轩辕之风O 来源 | 编程技术宇宙(ID:xuanyuancoding) 我是一个web服务器 我是一个web服务器,我的工作是给人类提供上网服务,我每天要为数以万计的人提供网页浏览服务. ...

  9. linux的rt补丁安装,微软发布补丁封杀允许Surface RT安装Linux的“漏洞”

    2012年诞生的Surface RT平板机就产品而言挺悲剧的,基于ARM架构跑Windows RT操作系统,但是不兼容x86环境,导致产品和市场定位混乱,消费者也很迷茫,最终在经历了两代之后就回到了x ...

最新文章

  1. oracle接收输入参数,Oracle带输入输出参数存储过程(包括sql分页功能)
  2. es6的Proxy(代理)
  3. 图解LanHelper 使用
  4. Spring注解配置工作原理源码解析
  5. 大学大专mysql考试试卷_MySQL数据库基础应用-中国大学mooc-试题题目及答案
  6. 中本聪主题系列NFT收藏品在OpenSea发售,于26秒内售罄
  7. 初次使用CocoaPods遇到的问题总结
  8. linux查看进程占用内存与ps命令
  9. layer normalization 缺点_优缺点并存的星越,用车感受还是不错的!
  10. 图像特征:突出显示稀疏突出区域Image Signature:Highlighting Sparse Salient Regions
  11. 博图v15编程手册_好消息!全套西门子plc编程软件,案例和说明书下载
  12. 【n卡】GeForce Experience 的额外功能
  13. 第145章 SQL函数 TO_NUMBER
  14. Tampermonkey中文文档
  15. Could not start on port 1099 3837
  16. 无稳态多谐震荡器学习
  17. 可视化界面:Activity 详解
  18. M OP N数值运算问题
  19. 瑞波加入超级账本区块链联盟
  20. 速卖通自定义html模板,速卖通运费模版如何设置?

热门文章

  1. BES 优秀文章/博客搜集
  2. 【智能优化算法】遗传算法的精英选择策略、期望选择策略
  3. 【懒人台灯】泰凌微 开发小试牛刀
  4. ROG 幻 X 二合一轻薄游戏本评测
  5. 漫画解读:什么是数据仓库?
  6. PowerBuilder断点调试
  7. Verilog之呼吸灯
  8. 儿童机器人编程入门课程适合几岁孩子学习?
  9. 2014:大牌哀嚎 轻奢当道
  10. 企业开发html常用命名方式,html-class命名的方式