一、前言
物聯結點的設計與實現是基於開發板ESP-WROVER_KIT_V4.1展開的,專案的程式展開按照模組化進行,也就是分為不同的硬體設計進行,以下的分析實現均以嵌入式的變通方式展示。
二、用例建模
首先需要明白用例,用例是一個業務過程;業務過程就是某硬體裝置在開發板這一特定領域上完成某些特定的任務需要進行的一系列活動。首先確定基本要素,ESP-WROVER_KIT_V4.1是接受者,Linux環境工程師是用例執行者。這裡,工程師值負責了程式碼和API的邏輯整合和實現,更多的實現在開發板系統對各個模組的操作,但這裡,從人的角度出發很容易理解,使用開發板這一過程是一個明確的用例過程。
現在對用例進行抽象層級分析(舉例):
- 抽象用例:①計算輸入訊號的上升沿或下降沿脈衝的數量;②RMT脈衝傳送或接受;③模擬數字轉換。
- 高層用例:①計算輸入訊號的脈衝數量這一用例的開始狀態是LED控制塊生成脈衝,終止狀態是PCNT計算得出數值;②傳送或接受RMT脈衝訊號這一用例的開始狀態配置傳送或接受模式的引數,終止狀態是RTM發出或接受一系列脈衝訊號;③數字量和模擬量的相互轉化這兩個用例的開始狀態是接受相對應的型別訊號,終止狀態是得到目的對應的型別訊號。
- 擴充套件用例:①程式碼控制LED控制塊生成脈衝——PCNT收到訊號並執行計數器——進行中斷條件判斷——反饋傳遞數值(紅色和藍色分別代表參與者)
三、業務領域建模
首先要明確需求中的業務領域內的名詞或名詞短語既可以是一個類名,也可以是一個屬性名。區別它們的關鍵是能否單獨存在,即屬性是用來描述物件或儲存物件的狀態資訊。比如,脈衝計數器可以是一個類單獨存在,但暫存器必須依附著具體的硬體裝置才具有實際的意義,如16位帶符號計數器等。
針對工程實踐的具體物件,分析其間的關係:
-
PCNT模組的業務建模
-
RMT模組的業務建模
-
ADC模組的業務建模
-
結合開發板整合業務領域建模
四、資料模型
-
PCNT模組
- 配置和讀取
變數名 | 型別 | 唯一 | 含義 |
pcnt_unit | pcnt_unit_t | 是 | 單元編號 |
evt_type | pcnt_evt_type_t | 是 | 監聽事件型別 |
channel | pcnt_channel_t | 是 | PCNT通道號 |
pulse_io | int | 否 | 脈衝訊號輸入GPIO |
ctrl_io | int | 否 | 控制訊號輸入GPIO |
count | int16_t* | 是 | 接受計數器值的指標 |
value | pcnt_unit_t unit | 是 | 接受PCNT事件的計數器值的指標 |
- 計算上升沿脈衝數量
變數名 | 型別 | 唯一 | 含義 |
pos_mode | pcnt_count_mode_t | 否 | 檢測上升沿時為計數器模式 |
hctrl_mode | pcnt_ctrl_mode_t | 是 | 控制訊號為高電平時的計數器模式 |
- 計算下降沿脈衝數量
變數名 | 型別 | 唯一 | 含義 |
neg_mode | pcnt_count_mode_t | 否 | 檢測上升沿時為計數器模式 |
lctrl_mode | pcnt_ctrl_mode_t | 是 | 控制訊號為低電平時的計數器模式 |
-
RMT模組
- 配置和讀取
變數名 | 型別 | 唯一 | 含義 |
channel | rmt_channel_t | 是 | RMT通道 |
rmt_item | const rmt_item32_t * | 是 | RMT專案陣列的頭點 |
item_num | int | 是 | RMT資料項編號 |
mem_offset | uint16_t | 否 | 記憶體的索引偏移量 |
- 傳送RMT脈衝
變數名 | 型別 | 唯一 | 含義 |
wait_tx_done | bool | 是 |
設定為true以等待所有資料傳送完成 |
- 接受RMT脈衝
變數名 | 型別 | 唯一 | 含義 |
rx_idx_rst | bool | 是 |
設定為真以重置接收器的記憶體索引 |
函式名 | 返回 | 解釋 | |
rrmt_rx_start() | ESP_ERR_INVALID_ARG 引數錯誤 | 啟動接收器 | |
ESP_OK 成功 | |||
rrmt_rx_stop() | ESP_ERR_INVALID_ARG 引數錯誤 | 停止接受 | |
ESP_OK 成功 |
-
AD模組
函式名 | 返回 | 解釋 | |
adc1_config_width() | ESP_OK 成功 |
配置ADC 1捕獲寬度 同時為ADC 1啟用輸出反轉 |
|
ESP_ERR_INVALID_ARG 引數錯誤 | |||
adc1_config_channel_atten() | ESP_ERR_INVALID_ARG 引數錯誤 |
在ADC 1上設定特定通道的衰減 並配置其相關的GPIO引腳複用器 |
|
ESP_OK 成功 | |||
adc2_config_channel_atten() | ESP_ERR_INVALID_ARG 引數錯誤 |
在ADC 2上設定特定通道的衰減 並配置其相關的GPIO引腳複用器 |
|
ESP_OK 成功 | |||
adc1_get_raw() | -1:引數錯誤 | 從單個通道讀取ADC 1 | |
其他:ADC 1通道讀取的資料 | |||
adc2_get_raw() | esp_OK如果成功的話 | 從單個通道讀取ADC 2 | |
esp_err_timeout其他控制器正在使用ADC2,且請求超時 |
變數名 | 型別 | 唯一 | 含義 |
channel | adc1_channel_t | 是 | ADC 1通道配置 |
atten | adc_atten_t | 否 | 衰減等級 |
五、概念原型及工作過程
首先確定概念和概念原型是兩種意思
- 概念是人對能代表某種事物或發展過程的特點及意義所形成的思維結論。
- 概念模型是是一種虛擬的、理想化的軟體產品形式。所以概念是一種內建的內容,概念模型是一種輪廓內容。
基礎具體工程實踐,概念原型就是已知API結合資料模型設計施加在具體用例(產生脈衝、接受脈衝、計算脈衝數量、計算轉型後的電壓數值)的形式化表達。使用者通過嵌入式開發板中的一些硬體模組,在Linux的環境下,對暫存器賦值讓CPU執行一系列的操作,然後燒錄到開發板上,最後通過監視器檢視預期結果。
六、總結
因為此工程實踐偏向於硬體,在進行建模分析時,難以抽象出很好的用例和模型,可能此篇文章的用例建模、業務領域建模以及資料建模不是很好。但總體來說,這一次的需求分析和概念原型的作業讓我對我們組的工程實踐有了更明晰的理解和認識,這會幫助我更好的完成後續的工程實踐。
參考資料:https://gitee.com/mengning997/se/tree/master/ppt