全域性變數的替換方式

2021-08-04 06:43:24 字數 2163 閱讀 4176

單檔案內使用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...