2025-12-03 14:59:24 admin 竞猜中心

嵌入式系统常用架构

在嵌入式系统(如 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)

// 注册驱动(initcall)

init_driver(lcd_ili9341_driver);

init_driver(lcd_st7735_driver);

// 通过名字查找

device = rt_device_find("lcd0");

rt_device_open(device, ...);

优点:

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

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

bus: SPI

├── driver: w25qxx

│ └── device: w25q64

├── driver: ili9341

│ └── device: ili9341@spi1

优势:

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

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

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

💡 示例对比

1. Mermaid 示例(VSCode 支持)

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

2. 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

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

/*! \brief 初始化接口

* \callgraph

*/

void lcd_driver_init(void);

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

📌 建议搭配

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