一、前言
物聯結點的設計與實現是基於開發板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