性无码一区二区三区在线观看,少妇被爽到高潮在线观看,午夜精品一区二区三区,无码中文字幕人妻在线一区二区三区,无码精品国产一区二区三区免费

嵌入式開發(fā)中PlantUML圖表的應(yīng)用!

在嵌入式開發(fā)中,設(shè)計(jì)文檔和系統(tǒng)架構(gòu)圖是溝通需求、梳理邏輯的核心工具。

但傳統(tǒng)的拖拽式繪圖工具效率低、難以維護(hù),而PlantUML通過(guò)代碼生成圖表的方式,完美解決了這一問(wèn)題。

它不僅支持UML圖,還能繪制網(wǎng)絡(luò)拓?fù)?、狀態(tài)機(jī)等嵌入式常用圖表,代碼即文檔,版本可控!

今天我們就來(lái)分享如何用PlantUML進(jìn)行嵌入式圖表設(shè)計(jì)!

一、plantuml環(huán)境

我們可以使用plantuml在線服務(wù)器,也可以自己安裝本地環(huán)境。

1、plantuml在線服務(wù)器

在線服務(wù)器提供了個(gè)很簡(jiǎn)潔的界面,在編輯區(qū)編寫plantuml代碼,對(duì)應(yīng)地就能顯示繪圖效果;可以導(dǎo)出PNG、SVG、ASCII Art三種格式。

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

2、本地環(huán)境

我們可以搭建本地環(huán)境:VSCode中安裝plantuml 插件

搭建本地環(huán)境需要依賴JavaGraphViz

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

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

graphviz:https://graphviz.org/download/

二、繪制時(shí)序圖

在我們嵌入式中,常常需要梳理各種業(yè)務(wù)流程的時(shí)序。

比如嵌入式設(shè)備與傳感器、外設(shè)的通信協(xié)議解析。

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

@startumlparticipant MCU as "主控MCU"participant Sensor as "溫濕度傳感器"MCU -> Sensor: 發(fā)送啟動(dòng)信號(hào)(START)MCU -> Sensor: 發(fā)送設(shè)備地址(0x44)activate Sensor #LightBluealt 地址匹配成功    Sensor --> MCU: ACK響應(yīng)    MCU -> Sensor: 讀取溫濕度寄存器    Sensor --> MCU: 發(fā)送數(shù)據(jù)字節(jié)(2 Bytes)else 地址不匹配    Sensor --> MCU: NACK響應(yīng)    MCU -> MCU: 錯(cuò)誤處理enddeactivate Sensor@enduml

效果

圖中展示了I2C通信的啟動(dòng)、尋址、數(shù)據(jù)傳輸和異常處理流程,箭頭方向明確,邏輯一目了然。

代碼解讀:

1、起始、結(jié)束聲明

@startuml@enduml

2、參與者定義

participant MCU as "主控MCU"participant Sensor as "溫濕度傳感器"

3、消息交互

MCU -> Sensor: 發(fā)送啟動(dòng)信號(hào)(START)MCU -> Sensor: 發(fā)送設(shè)備地址(0x44)
  • -> 表示從一個(gè)參與者向另一個(gè)參與者發(fā)送消息的箭頭。

4、激活參與者

activate Sensor #LightBlue
  • activate 關(guān)鍵字用于激活一個(gè)參與者,表示該參與者開始處理接收到的消息。
  • #LightBlue 是給激活狀態(tài)添加的顏色,這里將溫濕度傳感器的激活狀態(tài)標(biāo)記為淺藍(lán)色,方便在可視化的時(shí)序圖中區(qū)分。

5、條件分支處理

alt 地址匹配成功    Sensor --> MCU: ACK響應(yīng)    MCU -> Sensor: 讀取溫濕度寄存器    Sensor --> MCU: 發(fā)送數(shù)據(jù)字節(jié)(2 Bytes)else 地址不匹配    Sensor --> MCU: NACK響應(yīng)    MCU -> MCU: 錯(cuò)誤處理end
  • alt 和 else 關(guān)鍵字用于創(chuàng)建條件分支,根據(jù)不同的條件執(zhí)行不同的操作。

6、 停用參與者

deactivate Sensor
  • deactivate 關(guān)鍵字用于停用一個(gè)參與者,表示該參與者完成了當(dāng)前的處理任務(wù)。這里表示溫濕度傳感器處理完與主控 MCU 的通信交互,結(jié)束激活狀態(tài)。

三、繪制狀態(tài)機(jī)圖

在嵌入式開發(fā)中,常常使用使用狀態(tài)機(jī)模型來(lái)管理系統(tǒng)的復(fù)雜行為,確保邏輯清晰且可靠。

嵌入式設(shè)備的狀態(tài)管理,如低功耗模式切換、故障恢復(fù)機(jī)制。

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

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

代碼解讀:

1、狀態(tài)定義

state "休眠" as Sleepstate "運(yùn)行" as Activestate "充電" as Chargingstate "故障" as Error
  • state 關(guān)鍵字用于定義狀態(tài)圖中的狀態(tài)。

2、初始狀態(tài)及狀態(tài)轉(zhuǎn)換

[*] --> Sleep : 上電初始化
  • [*] 表示狀態(tài)圖的初始狀態(tài),即設(shè)備的起始點(diǎn)。
  • --> 表示狀態(tài)之間的轉(zhuǎn)換箭頭。
  • : 上電初始化 是轉(zhuǎn)換的觸發(fā)條件。整個(gè)語(yǔ)句表示設(shè)備上電后,首先進(jìn)行初始化操作,然后進(jìn)入 “休眠” 狀態(tài)。

通過(guò)代碼定義狀態(tài)轉(zhuǎn)移條件,方便迭代修改,避免圖形拖拽導(dǎo)致的錯(cuò)位問(wèn)題。

四、類圖

類圖是描述嵌入式系統(tǒng)中各個(gè)類以及它們之間關(guān)系的一種重要工具。例如,對(duì)于一個(gè)智能溫度控制系統(tǒng),需要考慮溫度傳感器、微控制器、顯示器、按鍵等實(shí)體,以及它們之間的數(shù)據(jù)傳輸和控制關(guān)系。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、部署圖

嵌入式系統(tǒng)中,部署圖需要展示硬件節(jié)點(diǎn)和軟件組件的分布情況。常見的應(yīng)用場(chǎng)景可能有智能家居、工業(yè)控制、車載系統(tǒng)等。

嵌入式系統(tǒng)的硬件連接拓?fù)?,如物?lián)網(wǎng)網(wǎng)關(guān)的模塊部署。  智能家居網(wǎng)關(guān)連接示意圖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協(xié)調(diào)器"];    sensor1 [address="192.168.1.3", description="溫度傳感器"];    sensor2 [address="192.168.1.4", description="人體紅外"];  }}@enduml

2、活動(dòng)圖

嵌入式系統(tǒng)啟動(dòng)自檢、中斷處理流程。 設(shè)備上電自檢(POST)流程活動(dòng)圖:

@startumlstart:上電初始化;if (電源電壓正常?) then (是)  :初始化外設(shè);  if (內(nèi)存校驗(yàn)通過(guò)?) then (是)    :加載固件;    :啟動(dòng)主任務(wù);  else (否)    #red:觸發(fā)看門狗復(fù)位;  endifelse (否)  #red:進(jìn)入安全關(guān)機(jī)模式;endifstop@enduml

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

聲明:本內(nèi)容為作者獨(dú)立觀點(diǎn),不代表電子星球立場(chǎng)。未經(jīng)允許不得轉(zhuǎn)載。授權(quán)事宜與稿件投訴,請(qǐng)聯(lián)系:editor@netbroad.com
覺得內(nèi)容不錯(cuò)的朋友,別忘了一鍵三連哦!
贊 1
收藏 2
關(guān)注 28
成為作者 賺取收益
全部留言
0/200
成為第一個(gè)和作者交流的人吧