再来学习一下RT-Thread的软件架构 | 文末赠书5本《软件架构实践》
再来学习一下RT-Thread的软件架构
摘要:
学习和使用了RT-Thread有2年多了的时间,最近一直在研究开源项目Matter相关的软件架构设计,趁此机会,再来温习一下rt-thread的软件架构设计。
文章目录
- 1 写在前面
- 2 RT-Thread的软件架构
- 2.1 RT-Thread的软件架构示意图
- 2.2 RT-Thread的软件架构解析
- 2.3 我对RT-Thread的软件架构图的理解
- 3 软件架构之我见
- 4 友情推荐
- 5 文末福利
1 写在前面
学习和使用了RT-Thread有2年多了的时间,最近一直在研究开源项目Matter相关的软件架构设计,趁此机会,再来温习一下RT-Thread的软件架构设计。
软件设计这个东西,个人觉得是比较抽象的,我们所能看到的一些软件架构的定义,是一些做通用的技术场景做了一些高度抽象,提炼出来的概念。所以,我们要深入学习一个开源项目,学习其软件架构是非常有必要的。
本文,博主就着RT-Thread官方提供的软件设计框架,再学习学习,顺带结合自己的工作经历,谈一下软件架构迁移的问题。
2 RT-Thread的软件架构
2.1 RT-Thread的软件架构示意图
从RT-Thread官方的技术文档中,我们可以得知RT-Thread整一个软件架构长这样:
从这个软件架构图,我们可以看出,其实我们通常意义说的 RT-Thread软件架构,这是一个比较宏观的概念,它不仅仅包含RTOS内核,还包括一些组件和服务层,同时也包括一些常见常用的软件包。
2.2 RT-Thread的软件架构解析
以下部分小部分内容摘自RT-Thread技术论坛文档中心。详见戳这里:
近年来,物联网(Internet Of Things,IoT)概念广为普及,物联网市场发展迅猛,嵌入式设备的联网已是大势所趋。终端联网使得软件复杂性大幅增加,传统的 RTOS 内核已经越来越难满足市场的需求,在这种情况下,物联网操作系统(IoT OS)的概念应运而生。**物联网操作系统是指以操作系统内核(可以是 RTOS、Linux 等)为基础,包括如文件系统、图形库等较为完整的中间件组件,具备低功耗、安全、通信协议支持和云端连接能力的软件平台,**RT-Thread 就是一个 IoT OS。
RT-Thread 与其他很多 RTOS 如 FreeRTOS、uC/OS 的主要区别之一是,它不仅仅是一个实时内核,还具备丰富的中间层组件,如下图所示。
它具体包括以下部分:
- 内核层:RT-Thread 内核,是 RT-Thread 的核心部分,包括了内核系统中对象的实现,例如多线程及其调度、信号量、邮箱、消息队列、内存管理、定时器等;libcpu/BSP(芯片移植相关文件 / 板级支持包)与硬件密切相关,由外设驱动和 CPU 移植构成。
- 组件与服务层:组件是基于 RT-Thread 内核之上的上层软件,例如虚拟文件系统、FinSH 命令行界面、网络框架、设备框架等。采用模块化设计,做到组件内部高内聚,组件之间低耦合。
- RT-Thread 软件包:运行于 RT-Thread 物联网操作系统平台上,面向不同应用领域的通用软件组件,由描述信息、源代码或库文件组成。RT-Thread 提供了开放的软件包平台,这里存放了官方提供或开发者提供的软件包,该平台为开发者提供了众多可重用软件包的选择,这也是 RT-Thread 生态的重要组成部分。软件包生态对于一个操作系统的选择至关重要,因为这些软件包具有很强的可重用性,模块化程度很高,极大的方便应用开发者在最短时间内,打造出自己想要的系统。RT-Thread 已经支持的软件包数量已经达到 400+,如下举例:
- 物联网相关的软件包:Paho MQTT、WebClient、mongoose、WebTerminal 等等。
- 脚本语言相关的软件包:目前支持 Lua、JerryScript、MicroPython、PikaScript。
- 多媒体相关的软件包:Openmv、mupdf。
- 工具类软件包:CmBacktrace、EasyFlash、EasyLogger、SystemView。
- 系统相关的软件包:RTGUI、Persimmon UI、lwext4、partition、SQLite 等等。
- 外设库与驱动类软件包:RealTek RTL8710BN SDK。
- 其他。
2.3 我对RT-Thread的软件架构图的理解
本小节,谈一谈,我对RT-Thread的软件架构图的学习和理解。
a) 从整体上看,RT-Thread的这个软件架构,很好地做到了层次分明,它把整一个软件,从功能逻辑上划分为三个层面:软件包这个层次、组件或服务包这个层次、内核实现这个层次。
这一点,使我们学习软件架构设计,必须要掌握的知识点。
每接触到一个软件工程,势必会有不同的逻辑功能,那么如何把这些逻辑功能,通过一定的界线做好层次划分,这是软件设计的第一步。如果你还不清晰该如何划分,可以借鉴一下RT-Thread的设计思路。
b) 在划分好基本的三大层次之后,开始规划每一个层次之间的联系,说白了,就是API的调用关系。
从RT-Thread的设计里面,我们可以看到,通常我们做层级直接的联系时,需要遵从的一个原则就是不要跨层级调用。
比如如上图所示:尽量避免软件包层级调用到内核层太深的API;而应该尽量选择组件或服务层提供的易用型API。
c) 调用层级清晰后,开始规划每个层级中平行的模块关系,拿内核层来说,libcpu模块是一个对内核提供抽象的CPU接口,同时对下它就势必要去适配各种不同指令集的CPU。在逻辑架构里面,不同的CPU是一个平行的关系;这也就意味着在设计libcpu的接口时,务必考虑到每个不同CPU的适配兼容性,这其实是一个不小的挑战。
也就是说在同一个层级里面,其实也有小的上下层级的划分,只有把这几个逻辑层次都搞清楚后,软件架构的层次感就会非常鲜明,这样的话,在一个层次清晰的软件架构下编写代码,那就是一个字:爽!
以上就是我结合自己的一些思路,提出对RT-Thread软件框架的学习和体会,不一定全部都是对的,我也是个持续学习者,欢迎大家一同学习和探讨。
3 软件架构之我见
最近我刚好也在学习Matter相关的内容,顺带聊一聊我对Matter软件架构的看法。
Matter是一个开源的物联网协议,致力于解决物联网智能家居领域各大云平台不互联互通的难题。
从它的官方仓库,我们可以看到它的软件框架张这样:
这个软件框架是由海内外的几个科技巨头,诸如Google、Apple、亚马逊、涂鸦、乐鑫等,一起创造设计的。
我觉得从软件设计的角度上来看,它很好地把底层通讯与应用层逻辑分离开来,而这就是我们软件设计里面一大很重要的原则:高内聚、低耦合。
要想做到这样的软件架构设计,必须对你的软件项目有足够的理解,还要有丰富的逻辑抽象能力,对相同的实物做同类的归纳,而不同的实物,做好层次分离,达到概念合理,逻辑清晰的地步。
软件架构设计是一项需要长期实践和学习的能力,就拿Matter这套软件架构来说,我也才学了一些皮毛,还有很多知识需要进一步消化。
如果你也对Matter感兴趣,欢迎与我交流、套路。
4 友情推荐
今天给大家推荐一本软件架构领域的教科书《软件架构实践》。
在比尔 · 盖茨的众多称谓中,据说他更偏爱“首席软件架构师”。在网易创始人丁磊名字前,也有“首席架构师”这样的称谓。架构师是如此重要,以至于在《黑客帝国》 中各色人物悉数登场,最后你却发现这一切都是被一个称作“架构师”的白胡子老头左 右的。
这是否意味着要成为架构师就要以“领导”权威来支撑或者以时间或实践来积累? 当然不必这样,在修炼成“架构师”的道路上,一本好书能让你少走许多弯路,帮助你学会“架构师”思维,快速进入“架构师”角色。
随着数字时代的到来,各种云基础设施、微服务、框架层出不穷,互联和互操作变 得唾手可得,集成和重用已有成果成为软件开发常态。在软件系统变得越来越复杂的同时,今天架构师似乎不再需要架构知识了,甚至软件开发的精髓被调侃是“ Ctrl+C 和 Ctr1+V ”。显然,在已有的架构上实现二次架构设计并不是架构师的未来,我们既要站 在巨人的肩膀上, 善于利用后发优势, 更需要从原始创新上取得突破, 这就需要你回到 问题的原点,系统地掌握软件架构的知识,努力贡献优秀的原创架构。
《软件架构实践》 就是这样一本书。本书是其第 4 版,在软件架构领域,本书已经成为标准。软件架构的术语或知识,大都可以在这本书中找到相关内容和最准确的定义。
5 文末福利
应广大粉丝需求,再次赠送一次 软件架构 相关的书籍,感兴趣的朋友欢迎关注我的CSDN技术社区活动贴:【第18期社区福利赠书活动】这本软件架构书被称为标准,凭什么?(文末赠书《软件架构实践》5本)-CSDN社区。
或者点击文章下方的微信公众号名片,回复 【架构】 来参与赠书活动。
再来学习一下RT-Thread的软件架构 | 文末赠书5本《软件架构实践》相关推荐
- 神理论 | 我面向淘宝编程,而你面向什么编程?(文末赠书5本)
神理论 | 我面向淘宝编程,而你面向什么编程? 陌生人一定会疑问,嵌入式跟taobao有半毛钱关系啊?那么本文,博主就跟你聊聊,如何面向淘宝学习嵌入式! 文章目录 1 写在前面 2 面向XXX编程 3 ...
- 新技能 | 使用python代码来高效操作Excel表格 (文末赠书5本)
新技能 | 使用python代码来高效操作Excel表格 (文末赠书5本) 在日常学习和工作中,少不了要跟Excel表格打交道.而我们作为程序猿,深知代码编程给人带来的便捷性,那我们怎么样使用代码来操 ...
- 利用excel与Pandas完成实现数据透视表(文末赠书)
文末赠书 数据透视表是一种分类汇总数据的方法.本文章将会介绍如何用Pandas完成数据透视表的制作和常用操作. 1,制作数据透视表 制作数据透视表的时候,要确定这几个部分:行字段.列字段.数 ...
- 文末赠书3本 | 盼了一年的Core Java最新版卷Ⅱ,终于上市了
文章目录 盼了一年的Core Java最新版卷Ⅱ,终于上市了! Core Java基于Java 17全面升级 Core Java最新版卷Ⅱ现已上市 卷Ⅰ.卷Ⅱ有何不同? 如何阅读<Java核心技 ...
- 替代VBA!用Python轻松实现Excel编程(文末赠书)
大家好,我是小z,也可以叫我阿粥~ 面向Excel数据处理自动化的脚本编程,目前主要有VBA和Python两种语言可供选择. 从上世纪90年代到目前,VBA一直是Excel脚本编程的主要工具.VBA语 ...
- PyTorch自然语言处理入门与实战 | 文末赠书
文末赠书 注:本文选自人民邮电出版社出版的<PyTorch自然语言处理入门与实战>一书,略有改动.经出版社授权刊登于此. 处理中文与英文的一个显著区别是中文的词之间缺乏明确的分隔符.分词是 ...
- 文末赠书《GD32 MCU原理及固件库开发指南》5本 | 国产MCU中GD32系列有望成为未来32位MCU的主流
学习优秀博文([guo产MCU移植]手把手教你使用RT-Thread制作GD32系列BSP)有感 一篇优秀的博文是什么样的?它有什么规律可循吗?优秀的guo产32位单片机处理器是否真的能成功替换掉st ...
- 云计算监控—Prometheus监控系统(文末赠书)
陈金窗 刘政委 张其栋 郑少斌 读完需要 20 分钟 速读仅需 7 分钟 本文摘自于<Prometheus 监控技术与实战>一书,从云计算时代的业务特点出发,探讨了云计算监控的目标和挑战, ...
- 【福利赠书】有人说,测试驱动开发已死?(文末赠书3本)
友情推荐一本测试领域的教科书:(文末送3本) < 测试驱动开发:入门.实战与进阶>,英文原书名为<Learning Test-Driven Development >,是一本 ...
最新文章
- Apache POI和EasyExcel 第三集:Apache POI的Excel大数据量写入(分为03版的xls、07版的xlsx、升级版SXSSF)
- diou ciou torch
- arcgis 卸载和注册表相关总结
- [bbk2908]第4集 - Chapter 03 - 介绍RAC的体系结构
- Ubuntu-16.04安装Xdebug-2.2.5及相关介绍
- The following tasks did not complete: first Did you forget to signal async completion?
- Hive(四)——数据操作
- Spring_02 注入类型值、利用引用注入类型值、spring表达式、与类相关的注解、与依赖注入相关的注解、注解扫描...
- 《算法导论》第四版 电子版 全网第一时间发布eBookhub
- xshell5 可用注册码
- Spring Cloud 快速入门指南(一)
- 关于《小萝莉的猴神大叔》些许体会
- 苹果企业账号发布APP详解——通过自己网站分发应用
- 破解服务中共性问题的繁琐处理方式——接入 API 网关
- excel和python建模_如何用Python提高办公(Excel)效率?
- 3dmaxobj导出选项_3dmax导出obj没有贴图该怎么办
- Promise 多接口同时调用
- 计算机系给未来的自己写信,给未来的自己写信
- 【elementui】走马灯自适应图片高度宽度 走马灯图片显示不全
- #Sora#peewee plus celery = ?