單檔案內使用static變數或結構體 ,需要外部模組來修改引數的時候,就使用函式介面來實現
///
//////
//////
//////
//////
//////
//////
//////
//////
//////
//////
//////
//////
//舉個例子,不加互斥量,如下_
static uint32_t g_cell_voltage = 600;
void set_cell_voltage(uint32_t value)
uint32_t get_cell_voltage(void)
//////
//////
//////
//////
//////
//////
//////
//////
//////
//////
//////
///////
/*//寫之前先想好程式架構,分好層次,構思好每個模組的資料結構,在單檔案內使用static變數或結構〿
需要外部模組來修改引數的時候,就使用函式介面來實現
*/
使用模組化封裝配置「引數」,結構更清晰:
// 模組介面h檔案中:
typedef struct user_param_typedef;
bool modulename_setparam(user_param_typedef *param);
bool modulename_getparam(user_param_typedef *param);
//////
//////
//////
//////
//////
//////
//////
//////
//////
//////
// 模組實現c檔案中:
static user_param_typedef user_param;
static
bool user_access_locked;
bool modulename_setparam(user_param_typedef *param)
bool modulename_getparam(user_param_typedef *param)
//////
//////
//////
//////
//////
//////
//////
//////
//////
//////
///...
// 配置引數
user_param_typedef user_param; // 臨時變數(區域性變數 ) 或 靜態變數
user_param.param_a = 1;
user_param.param_b = 2;
user_param.param_c = 3;
modulename_setparam(&user_param);
...// 獲取引數
modulename_getparam(&user_param);
//////
//////
//////
//////
//////
//////
//////
//////
//////
//////
////////
/*比如像用於配置的「引數」類的變數, 一般情況下這類模組中的變數會比較多。
這種情況,如果單獨封裝每個變數的訪問api介面,肯定不現實(介面太多了, 不符合模組介面盡量簡單化原則)。
可以採用類似於stm32庫函式的做法, 對這些引數進行打包封裝為「結構體變數」型別, 並在h檔案中匯出。
在c檔案中把這個引數定義為static型別(靜態變數), 並實現讀/寫介面函式。
如果在應用中, 僅需要修改其中乙個引數怎麼辦呢? 其實很簡單, 根據上面的類似的方法修改, 增加基於 「基位址偏移量」 讀/寫的介面函式即可。
*/
static全域性變數 全域性變數
1 全域性變數 外部變數 的說明之前再冠以static 就構成了靜態的全域性變數。全域性變數本身就是靜態儲存方式,靜態全域性變數當然也是靜態儲存方式。這兩者在儲存方式上並無不同。這兩者的區別在於非靜態全域性變數的作用域是整個源程式,當乙個源程式由多個原始檔組成時,非靜態的全域性變數在各個原始檔中都是...
Vue全域性變數的實現方式
今天在用vue做乙個單頁面地圖的時候,關於vue全域性變數產生了疑問,經過一番思考和查詢資料總結了接下來幾個方法。window.map map webpack 有global關鍵字比如在乙個a.js檔案中定義全域性變數 global.courses xx 在入口的main.js import a 就...
js宣告全域性變數的方式
在js中有3中宣告全域性變數的方式 第一種使用var 變數名,在方法外部宣告 1 var msg 預設值undefined 2 function 6 function setmsg 9 function showmsg 第二種方式在方法內部宣告,但是不使用var關鍵字 1 function 5 fu...