【STM32H7】第5章 ThreadX GUIX上手之電阻觸控和電容觸控
在這一次的學習中,我主要對孟寧老師的menu案例進行分析,理解其中包含的軟體工程思想。
原始碼:https://github.com/mengning/menu
參考資料:https://gitee.com/mengning997/se/blob/master/README.md#%E4%BB%A3%E7%A0%81%E4%B8%AD%E7%9A%84%E8%BD%AF%E4%BB%B6%E5%B7%A5%E7%A8%8B
一、環境配置
使用vscode+gcc工具集,編譯器選擇MinGW
vscode的安裝不贅述
安裝C/C++工具:
編譯器選擇MinGW,記得安裝完成之後要在環境變數PATH下天下MinGW的bin目錄
在cmd中執行:
gcc -v gdb -v
如下即為執行成功:
接下來對.vscode目錄下的檔案進行配置:
、
編輯c_cpp_properties.json:將紅框內路徑設定為自己安裝的MinGW中gdb.exe的路徑
編輯launch.json:將紅框內路徑設定為自己安裝的MinGW中gdb.exe的路徑
編輯tasks.json:一是修改路徑,二是將此專案的標頭檔案加進去
至此,環境配置結束,執行test.c成功:
二、模組化設計
模組化設計,就是在考慮軟體結構和流程的基礎上,將各個功能與過程劃分為不同的模組,同時協調好各個模組之間的連結關係。這樣的設計方法可以降低軟體設計的難度與複雜度,同時有利於後期的維護。
在這個專案中我們可以清楚地看到模組化的思想:
其中linktable.c主要是對資料結構的建立以及增刪改查等操作;
menu.c則是主要負責一些動作以及程式碼邏輯的實現
test.c則是包含著最終的主函式
同時存在著linktable.h,menu.h標頭檔案,其中定義著我們需要的介面。
當我們需要使用到linktable.c與menu.c裡面的功能時,只需要引用對應的標頭檔案,而不需要關注邏輯實現的細節,這兒很好的體現了模組化的思想。
三、可重用介面
介面主要是為了滿足模組之間相互呼叫的需要,一般包含五個要素:
1.介面的目的
2.介面使用前需要滿足的條件
3.使用介面的雙方遵守的協議規範
4.介面使用之後的效果
5.介面所隱含的質量屬性
具體看一看為menu子系統設定的介面:
在menu.h中:
SetPrompt用於設定輸入資訊;
MenuConfig用於配置menu的引數並把cmd加入menu中;
ExecuteMenu用於執行。
然後再其他檔案中就可以輕鬆呼叫menu系統中的內容,這時只需要關注介面使用本身而不需要關注其背後的細節部分:
四、執行緒安全
執行緒安全是指如果程式碼的程序中有多個執行緒在同時執行,而這些執行緒可能會同時執行這段程式碼。如果每次執行結果和單執行緒執行的結果是一樣的,而且其他的變數的值也和預期的是一樣的,就是執行緒安全的。執行緒安全問題都是由全域性變數及靜態變數引起的。若每個執行緒中對全域性變數、靜態變數只有讀操作,而無寫操作,一般來說,這個全域性變數是執行緒安全的;若有多個執行緒同時執行讀寫操作,一般都需要考慮執行緒同步,否則就可能影響執行緒安全。
執行緒安全主要體現在對連結串列的定義和操作上:
在連結串列的定義上我們引入了互斥的mutex:
在對連結串列的操作上會通過加鎖與解鎖的操作保證執行緒安全,比如在delete操作中:
比如在add操作中:
當然,對於讀操作,因為本身沒有對連結串列內容有更改,所以就沒有必要加鎖解鎖了。