最新电影在线观看,jrs低调看直播,avav天堂,囯产精品宾馆在线精品酒店,亚洲精品成人区在线观看

嵌入式開發中PlantUML圖表的應用!

在嵌入式開發中,設計文檔和系統架構圖是溝通需求、梳理邏輯的核心工具。

但傳統的拖拽式繪圖工具效率低、難以維護,而PlantUML通過代碼生成圖表的方式,完美解決了這一問題。

它不僅支持UML圖,還能繪制網絡拓撲、狀態機等嵌入式常用圖表,代碼即文檔,版本可控

今天我們就來分享如何用PlantUML進行嵌入式圖表設計!

一、plantuml環境

我們可以使用plantuml在線服務器,也可以自己安裝本地環境。

1、plantuml在線服務器

在線服務器提供了個很簡潔的界面,在編輯區編寫plantuml代碼,對應地就能顯示繪圖效果;可以導出PNG、SVG、ASCII Art三種格式。

//www.plantuml.com/plantuml/uml/SyfFKj2rKt3CoKnELR1Io4ZDoSa700001

2、本地環境

我們可以搭建本地環境:VSCode中安裝plantuml 插件

搭建本地環境需要依賴JavaGraphViz

plantuml快速入門指南://plantuml.com/zh/starting

java://www.oracle.com/java/technologies/downloads

graphviz://graphviz.org/download/

二、繪制時序圖

在我們嵌入式中,常常需要梳理各種業務流程的時序。

比如嵌入式設備與傳感器、外設的通信協議解析。

假設需要通過I2C讀取溫濕度傳感器的數據,時序圖可清晰展示主從設備交互,PlantUML代碼示例如:

@startumlparticipant MCU as "主控MCU"participant Sensor as "溫濕度傳感器"MCU -> Sensor: 發送啟動信號(START)MCU -> Sensor: 發送設備地址(0x44)activate Sensor #LightBluealt 地址匹配成功    Sensor --> MCU: ACK響應    MCU -> Sensor: 讀取溫濕度寄存器    Sensor --> MCU: 發送數據字節(2 Bytes)else 地址不匹配    Sensor --> MCU: NACK響應    MCU -> MCU: 錯誤處理enddeactivate Sensor@enduml

效果

圖中展示了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
  • alt 和 else 關鍵字用于創建條件分支,根據不同的條件執行不同的操作。

6、 停用參與者

deactivate Sensor
  • deactivate 關鍵字用于停用一個參與者,表示該參與者完成了當前的處理任務。這里表示溫濕度傳感器處理完與主控 MCU 的通信交互,結束激活狀態。

三、繪制狀態機圖

在嵌入式開發中,常常使用使用狀態機模型來管理系統的復雜行為,確保邏輯清晰且可靠。

嵌入式設備的狀態管理,如低功耗模式切換、故障恢復機制。

如智能手表的電源狀態切換(運行、休眠、充電、故障),PlantUML代碼示例如:

@startumlstate "休眠" as Sleepstate "運行" as Activestate "充電" as Chargingstate "故障" as Error[*] --> Sleep : 上電初始化Sleep --> Active : 用戶按鍵喚醒Active --> Sleep : 無操作超時Active -right-> Charging : 插入充電器Charging --> Active : 充滿電Active --> Error : 硬件異常Error --> [*] : 重啟復位@enduml

代碼解讀:

1、狀態定義

state "休眠" as Sleepstate "運行" as Activestate "充電" as Chargingstate "故障" as Error
  • state 關鍵字用于定義狀態圖中的狀態。

2、初始狀態及狀態轉換

[*] --> Sleep : 上電初始化
  • [*] 表示狀態圖的初始狀態,即設備的起始點。
  • --> 表示狀態之間的轉換箭頭。
  • : 上電初始化 是轉換的觸發條件。整個語句表示設備上電后,首先進行初始化操作,然后進入 “休眠” 狀態。

通過代碼定義狀態轉移條件,方便迭代修改,避免圖形拖拽導致的錯位問題。

四、類圖

類圖是描述嵌入式系統中各個類以及它們之間關系的一種重要工具。例如,對于一個智能溫度控制系統,需要考慮溫度傳感器、微控制器、顯示器、按鍵等實體,以及它們之間的數據傳輸和控制關系。PlantUML代碼示例如:

@startumlclass 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 dataMicroController "1" --> "1" Display : sends dataMicroController "1" --> "1" Button : checks state@enduml

五、其它圖表

1、部署圖

嵌入式系統中,部署圖需要展示硬件節點和軟件組件的分布情況。常見的應用場景可能有智能家居、工業控制、車載系統等。

嵌入式系統的硬件連接拓撲,如物聯網網關的模塊部署。  智能家居網關連接示意圖PlantUML代碼示例如:

@startumlnwdiag {  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

2、活動圖

嵌入式系統啟動自檢、中斷處理流程。 設備上電自檢(POST)流程活動圖:

@startumlstart:上電初始化;if (電源電壓正常?) then (是)  :初始化外設;  if (內存校驗通過?) then (是)    :加載固件;    :啟動主任務;  else (否)    #red:觸發看門狗復位;  endifelse (否)  #red:進入安全關機模式;endifstop@enduml

用PlantUML讓你的嵌入式設計既專業又高效,從此告別“畫圖兩小時,改圖一整天”!

聲明:本內容為作者獨立觀點,不代表電子星球立場。未經允許不得轉載。授權事宜與稿件投訴,請聯系:editor@netbroad.com
覺得內容不錯的朋友,別忘了一鍵三連哦!
贊 1
收藏 2
關注 33
成為作者 賺取收益
全部留言
0/200
成為第一個和作者交流的人吧