再来学习一下RT-Thread的软件架构 | 文末赠书5本《软件架构实践》

再来学习一下RT-Thread的软件架构

摘要:

学习和使用了RT-Thread有2年多了的时间,最近一直在研究开源项目Matter相关的软件架构设计,趁此机会,再来温习一下rt-thread的软件架构设计。

1 写在前面

学习和使用了RT-Thread有2年多了的时间,最近一直在研究开源项目Matter相关的软件架构设计,趁此机会,再来温习一下RT-Thread的软件架构设计。

软件设计这个东西,个人觉得是比较抽象的,我们所能看到的一些软件架构的定义,是一些做通用的技术场景做了一些高度抽象,提炼出来的概念。所以,我们要深入学习一个开源项目,学习其软件架构是非常有必要的。

本文,博主就着RT-Thread官方提供的软件设计框架,再学习学习,顺带结合自己的工作经历,谈一下软件架构迁移的问题。

2 RT-Thread的软件架构

2.1 RT-Thread的软件架构示意图

从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是一个开源的物联网协议,致力于解决物联网智能家居领域各大云平台不互联互通的难题。

从它的官方仓库,我们可以看到它的软件框架张这样:

Matter Architecture Overview

这个软件框架是由海内外的几个科技巨头,诸如Google、Apple、亚马逊、涂鸦、乐鑫等,一起创造设计的。

我觉得从软件设计的角度上来看,它很好地把底层通讯与应用层逻辑分离开来,而这就是我们软件设计里面一大很重要的原则:高内聚、低耦合

要想做到这样的软件架构设计,必须对你的软件项目有足够的理解,还要有丰富的逻辑抽象能力,对相同的实物做同类的归纳,而不同的实物,做好层次分离,达到概念合理,逻辑清晰的地步。

软件架构设计是一项需要长期实践和学习的能力,就拿Matter这套软件架构来说,我也才学了一些皮毛,还有很多知识需要进一步消化。

如果你也对Matter感兴趣,欢迎与我交流、套路。

4 友情推荐

今天给大家推荐一本软件架构领域的教科书《软件架构实践》。

在比尔 · 盖茨的众多称谓中,据说他更偏爱“首席软件架构师”。在网易创始人丁磊名字前,也有“首席架构师”这样的称谓。架构师是如此重要,以至于在《黑客帝国》 中各色人物悉数登场,最后你却发现这一切都是被一个称作“架构师”的白胡子老头左 右的。

这是否意味着要成为架构师就要以“领导”权威来支撑或者以时间或实践来积累? 当然不必这样,在修炼成“架构师”的道路上,一本好书能让你少走许多弯路,帮助你学会“架构师”思维,快速进入“架构师”角色。

随着数字时代的到来,各种云基础设施、微服务、框架层出不穷,互联和互操作变 得唾手可得,集成和重用已有成果成为软件开发常态。在软件系统变得越来越复杂的同时,今天架构师似乎不再需要架构知识了,甚至软件开发的精髓被调侃是“ Ctrl+C 和 Ctr1+V ”。显然,在已有的架构上实现二次架构设计并不是架构师的未来,我们既要站 在巨人的肩膀上, 善于利用后发优势, 更需要从原始创新上取得突破, 这就需要你回到 问题的原点,系统地掌握软件架构的知识,努力贡献优秀的原创架构。

《软件架构实践》 就是这样一本书。本书是其第 4 版,在软件架构领域,本书已经成为标准。软件架构的术语或知识,大都可以在这本书中找到相关内容和最准确的定义。

img

5 文末福利

应广大粉丝需求,再次赠送一次 软件架构 相关的书籍,感兴趣的朋友欢迎关注我的CSDN技术社区活动贴:【第18期社区福利赠书活动】这本软件架构书被称为标准,凭什么?(文末赠书《软件架构实践》5本)-CSDN社区

或者点击文章下方的微信公众号名片,回复 【架构】 来参与赠书活动。

jiantou_2222

猜你喜欢

转载自blog.csdn.net/szullc/article/details/129678431
今日推荐