找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖
Claude、GPT 海外模型 API 接入云原生前端项目实战教程50G互联网架构师面试指南
大模型全栈开发课程企业级DevOps全栈实践零基础产品经理就业课程

6033

积分

0

好友

769

主题
发表于 3 天前 | 查看: 0| 回复: 0

在嵌入式开发中,设计文档和系统架构图是沟通需求、梳理逻辑的核心工具。但传统的拖拽式绘图工具效率低、难以维护,而 PlantUML 通过代码生成图表的方式,完美解决了这一问题。

它不仅支持 UML 图,还能绘制网络拓扑、状态机等嵌入式常用图表,代码即文档,版本可控

一、PlantUML 环境

我们可以使用 PlantUML 在线服务器,也可以自己安装本地环境。

1、PlantUML 在线服务器

在线服务器提供了个很简洁的界面,在编辑区编写 PlantUML 代码,对应地就能显示绘图效果;可以导出 PNG 、 SVG 、 ASCII Art 三种格式。

http://www.plantuml.com/plantuml/uml/SyfFKj2rKt3CoKnELR1Io4ZDoSa700001

PlantUML在线编辑器界面与序列图效果

2、本地环境

我们可以搭建本地环境:VS Code 中安装 PlantUML 插件

VSCode PlantUML扩展插件详情

搭建本地环境需要依赖 JavaGraphViz

PlantUML 快速入门指南:https://plantuml.com/zh/starting
Java:https://www.oracle.com/java/technologies/downloads
Graphviz:https://graphviz.org/download/

PlantUML本地安装Java与GraphViz依赖说明

二、绘制时序图

在嵌入式开发中,常常需要梳理各种业务流程的时序,比如嵌入式设备与传感器、外设的通信协议解析。

假设需要通过 I2C 读取温湿度传感器的数据,时序图可清晰展示主从设备交互。PlantUML 代码示例如:

@startuml
participant MCU as "主控MCU"
participant Sensor as "温湿度传感器"

MCU -> Sensor: 发送启动信号(START)
MCU -> Sensor: 发送设备地址(0x44)
activate Sensor #LightBlue

alt 地址匹配成功
    Sensor --> MCU: ACK响应
    MCU -> Sensor: 读取温湿度寄存器
    Sensor --> MCU: 发送数据字节(2 Bytes)
else 地址不匹配
    Sensor --> MCU: NACK响应
    MCU -> MCU: 错误处理
end
deactivate Sensor
@enduml

效果

主控MCU通过I2C读取温湿度传感器的PlantUML时序图

图中展示了 I2C 通信的启动、寻址、数据传输和异常处理流程,箭头方向明确,逻辑一目了然。

代码解读:

1、起始、结束声明

@startuml
@enduml

2、参与者定义

participant MCU as "主控MCU"
participant Sensor as "温湿度传感器"

3、消息交互

MCU -> Sensor: 发送启动信号(START)
MCU -> Sensor: 发送设备地址(0x44)
  • -> 表示从一个参与者向另一个参与者发送消息的箭头。

4、激活参与者

activate Sensor #LightBlue
  • activate 关键字用于激活一个参与者,表示该参与者开始处理接收到的消息。
  • #LightBlue 是给激活状态添加的颜色,这里将温湿度传感器的激活状态标记为浅蓝色,方便在可视化的时序图中区分。

5、条件分支处理

alt 地址匹配成功
    Sensor --> MCU: ACK响应
    MCU -> Sensor: 读取温湿度寄存器
    Sensor --> MCU: 发送数据字节(2 Bytes)
else 地址不匹配
    Sensor --> MCU: NACK响应
    MCU -> MCU: 错误处理
end
  • altelse 关键字用于创建条件分支,根据不同的条件执行不同的操作。

6、停用参与者

deactivate Sensor
  • deactivate 关键字用于停用一个参与者,表示该参与者完成了当前的处理任务。这里表示温湿度传感器处理完与主控 MCU 的通信交互,结束激活状态。

三、绘制状态机图

在嵌入式开发中,常常使用状态机模型来管理系统的复杂行为,确保逻辑清晰且可靠。

状态机与非状态机实现方式对比表

嵌入式设备的状态管理,如低功耗模式切换、故障恢复机制,都离不开状态机。

比如智能手表的电源状态切换(运行、休眠、充电、故障),PlantUML 代码示例如:

@startuml
state "休眠" as Sleep
state "运行" as Active
state "充电" as Charging
state "故障" as Error

  • --> Sleep : 上电初始化 Sleep --> Active : 用户按键唤醒 Active --> Sleep : 无操作超时 Active -right-> Charging : 插入充电器 Charging --> Active : 充满电 Active --> Error : 硬件异常 Error -->
  • : 重启复位 @enduml
  • 智能手表休眠运行充电故障状态机PlantUML图

    代码解读:

    1、状态定义

    state "休眠" as Sleep
    state "运行" as Active
    state "充电" as Charging
    state "故障" as Error
    • state 关键字用于定义状态图中的状态。

    2、初始状态及状态转换

  • --> Sleep : 上电初始化
    • 表示状态图的初始状态,即设备的起始点。
    • --> 表示状态之间的转换箭头。
    • : 上电初始化 是转换的触发条件。整个语句表示设备上电后,首先进行初始化操作,然后进入“休眠”状态。

    通过代码定义状态转移条件,方便迭代修改,避免图形拖拽导致的错位问题。

    四、类图

    类图是描述嵌入式系统中各个类以及它们之间关系的一种重要工具。例如,对于一个智能温度控制系统,需要考虑温度传感器、微控制器、显示器、按键等实体,以及它们之间的数据传输和控制关系。PlantUML 代码示例如:

    @startuml
    class TemperatureSensor {
        - temperatureValue: float
        + readTemperature(): float
    }
    
    class MicroController {
        - processedData: float
        + processData(temperature: float): void
        + controlOutput(): void
    }
    
    class Display {
        - displayMode: int
        + showData(data: float): void
    }
    
    class Button {
        - buttonState: bool
        + checkButtonState(): bool
    }
    
    TemperatureSensor "1" --> "1" MicroController : sends data
    MicroController "1" --> "1" Display : sends data
    MicroController "1" --> "1" Button : checks state
    @enduml

    温度传感器系统PlantUML类图示例

    五、其它图表

    1、部署图

    嵌入式系统中,部署图需要展示硬件节点和软件组件的分布情况。常见的应用场景可能有智能家居、工业控制、车载系统等。

    嵌入式系统的硬件连接拓扑,如物联网网关的模块部署。智能家居网关连接示意图 PlantUML 代码示例如:

    @startuml
    nwdiag {
      network SmartHome {
        address = "192.168.1.x/24"
    
        gateway [address="192.168.1.1", description="主控单元"];
        zigbee [address="192.168.1.2", description="Zigbee协调器"];
        sensor1 [address="192.168.1.3", description="温度传感器"];
        sensor2 [address="192.168.1.4", description="人体红外"];
      }
    }
    @enduml

    智能家居网络拓扑PlantUML部署图

    2、活动图

    嵌入式系统启动自检、中断处理流程。设备上电自检(POST)流程活动图:

    @startuml
    start
    :上电初始化;
    if (电源电压正常?) then (是)
      :初始化外设;
      if (内存校验通过?) then (是)
        :加载固件;
        :启动主任务;
      else (否)
        #red:触发看门狗复位;
      endif
    else (否)
      #red:进入安全关机模式;
    endif
    stop
    @enduml

    嵌入式设备上电自检POST流程PlantUML活动图

    用 PlantUML 让你的嵌入式设计既专业又高效,从此告别“画图两小时,改图一整天”!

    如果你对 PlantUML 在嵌入式项目中的应用还有疑问,或者想和其他开发者交流图表设计经验,欢迎到云栈社区一起探讨。




    上一篇:Cerebras 创始人访谈:算力爆发、递归学习与生成式 AI 下一站
    下一篇:吴恩达 Coding Agents 框架:嵌入式工程师别被 Agent 连跑3小时骗了
    您需要登录后才可以回帖 登录 | 立即注册

    手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

    GMT+8, 2026-9-21 02:27 , Processed in 1.706405 second(s), 46 queries , Gzip On.

    Powered by Discuz! X3.5

    © 2025-2026 云栈社区.

    快速回复 返回顶部 返回列表