1. 程式人生 > 實用技巧 >【STM32H7】第5章 ThreadX GUIX上手之電阻觸控和電容觸控

【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操作中:

當然,對於讀操作,因為本身沒有對連結串列內容有更改,所以就沒有必要加鎖解鎖了。