嵌入式系统常用架构

在嵌入式系统(如 STM32 + RT-Thread、AUTOSAR)或驱动框架设计中,常见的软件架构设计模式包括以下几种形式,每种结构适用于不同场景,如驱动解耦、应用扩展、模块隔离等:


✅ 常用架构设计模式(适用于嵌入式 / AUTOSAR / OS)

架构模式 中文名称 典型应用场景 特点
分层架构(Layered Architecture) 分层结构 操作系统、驱动、协议栈 解耦明确、逻辑清晰、易维护
插件架构(Plug-in / Component) 插件组件结构 AUTOSAR SWC、RT-Thread drv 动态注册、易扩展
总线驱动模型(Bus-Driver-Device) 总线-驱动-设备模型 Linux、RT-Thread 驱动 多种硬件共用接口、驱动分离
客户端-服务端(Client-Server) 客户端-服务端 AUTOSAR RTE、IPC 通信解耦、适合分布式
发布-订阅(Pub/Sub) 发布订阅机制 ROS、RT-Thread EventBus 多对多通信、松耦合
消息队列/事件驱动(Message/Event Driven) 事件驱动结构 GUI、USB、RTOS任务间通信 实时响应、低耦合
有限状态机(FSM) 状态机结构 GUI状态、协议栈 适合状态转换多的逻辑

🧱 1. 分层架构(Layered)

复制代码
+--------------------+   ← 用户应用层(App)
| 应用层(GUI/APP)  |
+--------------------+   ← 接口服务(API)
| 中间件/驱动抽象层  |
+--------------------+   ← HAL/BSP层
| 硬件控制/驱动层    |
+--------------------+   ← 硬件设备
| 外设寄存器         |

适用于:RT-Thread、STM32 HAL、AUTOSAR Basic Software。


🔌 2. 插件架构 / 组件化驱动框架(如 RT-Thread)

c 复制代码
// 注册驱动(initcall)
init_driver(lcd_ili9341_driver);
init_driver(lcd_st7735_driver);

// 通过名字查找
device = rt_device_find("lcd0");
rt_device_open(device, ...);

优点:

  • 便于动态扩展设备类型;
  • 不同驱动可组合插拔。

🚌 3. 总线/驱动/设备模型(Linux, RT-Thread)

text 复制代码
bus: SPI
├── driver: w25qxx
│   └── device: w25q64
├── driver: ili9341
│   └── device: ili9341@spi1

优势:

  • 支持同一总线上多个设备;
  • 驱动和设备分离;
  • 动态绑定关系。

🔄 4. 发布-订阅(Pub/Sub)

c 复制代码
publish("event_key", data);
subscribe("event_key", callback);

用于:

  • 多任务间解耦;
  • GUI、传感器框架;
  • RT-Thread EventBus 等。

📡 5. AUTOSAR 架构层次(参考)

复制代码
+----------------------+  ← Application SWC
| SWC (Runnable)       |
+----------------------+
| RTE (Runtime Env)    |  ← 虚拟接口连接
+----------------------+
| Basic Software (BSW) |
| - COM, CAN, DCM...   |
+----------------------+
| MCAL                 |
+----------------------+
| ECU HW               |

✅ 小结:不同系统推荐架构

场景 / 系统 推荐结构
RT-Thread 驱动框架 分层 + 插件 + 总线模型
Linux 驱动 总线-设备-驱动三层模型
AUTOSAR 应用/RTE/BSW/MCAL 四层
小型裸机项目 分层 + 状态机

用于**绘制调用流程图(调用关系图、调用时序图、控制流程图)**的工具很多,以下是常用工具的对比和推荐,适用于 AUTOSAR、RT-Thread、裸机驱动、应用层设计 等软件开发场景:


✅ 常用流程图 / 调用图 工具推荐

工具名称 类型 适合场景 特点
PlantUML 代码式 时序图、调用图、组件图 脚本描述,自动生成图,支持 Git
Mermaid.js(VSCode 支持) 代码式 调用图、流程图、状态图 VSCode 原生支持,语法简单
Draw.io / diagrams.net 图形界面 任意流程图/架构图 免费、直观拖拽、可导出
Graphviz / DOT 代码式 调用关系图、依赖图 专注于图论、层级图布局清晰
SequenceDiagram.org 在线工具 时序图 无需安装,快速出图
Lucidchart / ProcessOn 云端图形 协作流程图/系统架构图 多人协作,适合团队
Doxygen + Graphviz 自动生成 从代码中提取调用关系图 适合已有代码的分析整理
VSCode 插件:Markdown Preview Mermaid Support 插件 结合文档与图示 适合写项目说明书时嵌入图

💡 示例对比

1. Mermaid 示例(VSCode 支持)

APP RTE SWC1 SWC2 Init() Call Init Call Init APP RTE SWC1 SWC2

可用于 AUTOSAR SWC 初始化流程、RT-Thread 驱动注册流程等。


2. PlantUML 示例

plantuml 复制代码
@startuml
actor User
User -> App : start()
App -> Driver : init()
Driver -> Hardware : write_register()
@enduml

适用于驱动调用流程、API 调用关系图。


3. Draw.io 示例图类型

  • 控制流程图(例如 if / switch
  • 模块依赖图(例如 RT-Thread 的驱动框架)
  • 网络通信图(CAN/LIN/SOME/IP)

4. Doxygen + Graphviz

在代码中加注释,自动生成调用图:

c 复制代码
/*! \brief 初始化接口
 *  \callgraph
 */
void lcd_driver_init(void);

doxygen 生成调用图和被调用图,适合整理大型项目。


📌 建议搭配

如果你... 推荐工具
使用 VSCode 写文档 / 画图 Mermaid 插件
喜欢脚本画图、自动化 PlantUML / Graphviz
想写注释自动生成调用图 Doxygen + Graphviz
团队协作、可视化 Draw.io / ProcessOn
快速画几个交互 SequenceDiagram.org

相关推荐
ChipCamp2 小时前
Chisel芯片开发入门系列 -- 14. CPU芯片开发和解释4(Load/Store指令再探)
arm开发·青少年编程·fpga开发·scala·dsp开发·risc-v·chisel
oioihoii4 小时前
深入浅出理解WaitForSingleObject:Windows同步编程核心函数详解
windows·stm32·单片机
IT永勇5 小时前
STM32-基本定时器
stm32·单片机·嵌入式开发·基本定时器
is08155 小时前
LVGL 使用自定义字体
arm开发
范纹杉想快点毕业8 小时前
基于 C 语言视角:流程图中分支与循环结构的深度解析
c语言·stm32·单片机·设计模式·架构·流程图·uml
雨中来客20 小时前
STM32移植LVGL9.2.1教程
stm32·单片机·嵌入式硬件
jingshaoqi_ccc1 天前
stm32中优先使用原子操作的具体实现方式
stm32·单片机·嵌入式硬件
小猪写代码1 天前
大白话畅谈:stm32中断和FreeRTOS的中断
stm32·单片机·嵌入式硬件
snwang_miss1 天前
ARM--中断
arm开发