單片機全局變量的使用

我們都知道有一個規則,那就是儘量不要使用全局變量,但自己寫程序,有時感覺使用全局變量很方便,而且並沒感到有什麼缺點。

將網上查的的資料總結一下,發現全局變量的缺點主要有兩個,其它具體的危害一般都是這兩個的具體的顯現。

全局變量缺點:

1.全局變量存在週週期長,將會佔用更多的內存。

2.全局變量多處被調用,使全局變量的值變得不確定。

1)用全局變量會增加程序的耦合性,會有一定移植麻煩,代碼重用率低。

2)全局變量,使用和更改他的地方多了以後,各個地方邏輯關係難以確定。

(3)過多的全局變量,大大降低程序的可讀性,可維護性。

(4)容易造成命名衝突

 

其實,全局變量是不可避免要用到的,比如說溫度採集,我們將傳感器送回來的數據處理後必須放在一個全局變量裏。然後要使用它時,直接從全局變量中取便可以了。

因爲C語言中函數return只能放回一個值,使用全局變量便可以返回多個值,但這並不合適,因爲這佔空間,減慢了運算速度,又增加了這個函數的耦合性。可以定義數組,返回指針的方式傳遞多個參數。如果不希望改變原參數值,使用const限制指針。

所以,傳遞參數不要用全局變量,可以使用指針。而像顯示緩衝區,數據採集子程序,通信緩衝區。這樣的地方,全局變量是不可避免要用到的

 

爲什麼呢?因爲這些地方都有同一個特點。想一想,單片機的寄存器相當於全局變量嗎?

寄存器易變的,外部事件可改變。但一般只有一種事件可以改變它,而其它的地方使用但改變他的數值。

可見,如果全局變量只有一處改變它,只要內存夠,就可以大膽使用它。

但無論如何全局變量使用多了,都會感覺程序混亂。

 

使用全局變量的好習慣

1.如果只有某.c文件用,就static到該文件中;如果只有一個函數用,那就static到函數裏面去;

2儘量把變量的作用範圍控制在使用它的模塊裏面,如果其他模塊要訪問,就開個讀或寫函數接口出來,嚴格控制訪問範圍。(就是利用.h文件#include

3.當一個模塊裏面的全局變量超過3()時,就用結構體包起來吧。要歸0便一起歸0,省得丟三落四的。

4.如果一定要用全局變量,請遵守命名規範,比如在前面加"g_", 以防造成命名衝突。

5.小程序結構簡單,即使使用全局變量也方便管理。


 

這還有一句話,“每一個設備底層幾乎都需要它來記錄當前狀態,控制時序,起承轉合。”從網上看到的,但還是不太理解其中的意思。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章