ucos中的全域性變數

2021-06-16 07:39:02 字數 937 閱讀 5758

在uc/os-ii的**中,應用了一種讓人耳目一新的全域性變數定義方法。

在《uc/os-ii》中,作者給出了解釋,但是這裡還是忍不住要討論一番。

我們知道,全域性變數的使用有兩個問題:

按照平時的定義,如果安排得不好,總是會出問題,extern起來沒完。而在uc/os-ii採用了一種比較聰明的做法。uc/os-ii中,每個.c檔案都通過includes.h包含了所有的.h檔案那麼, uc/os-ii採用了下面的辦法:

每當定義全域性變數時,首先做下面的定義:

#ifdef   ***_globals

#define  ***_ext

#else

#define  ***_ext extern

#endif

.h檔案中每個全域性變數都加上了***_ext的字首。***代表模組的名字。而在該模組的.c檔案中有以下定義:

#define  ***_globals

#include "includes.h"

比如,定義了 ***_ext  int32u       g_***;

這樣,編譯到***模組時,***_globals被定義,根據上面的預編譯條件,這時候

***_ext是空,從而

***_ext  int32u       g_***;

等價於           int32u                g_***;

這時候,變數被分配記憶體。

當編譯其它模組時,***_globals沒有被定義,根據上面的預編譯條件,這時候

***_ext是extern,從而 

***_ext  int32u       g_***;

等價於        extern   int32u       g_***;

這時候,只是變數的外部引用。

通過這種辦法,使得全域性變數只需在標頭檔案中定義一次就可以了,避免了不少麻煩。

ucos全域性變數

任務建立之後,只是完成系統程式設計的一小部分,更為重要的是任務鍵的通訊,在ucos裡任務通訊可以採用以下幾種方式 1.共享全域性變數,這是最快捷有效的方式,實現這種通訊可以採用以下兩種方式,一是利用巨集os enter critical和 os exit critical來關中斷和開啟中斷,二是利用...

static全域性變數 全域性變數

1 全域性變數 外部變數 的說明之前再冠以static 就構成了靜態的全域性變數。全域性變數本身就是靜態儲存方式,靜態全域性變數當然也是靜態儲存方式。這兩者在儲存方式上並無不同。這兩者的區別在於非靜態全域性變數的作用域是整個源程式,當乙個源程式由多個原始檔組成時,非靜態的全域性變數在各個原始檔中都是...

PHP中全域性變數和超全域性變數

自定義全域性變數的作用域為當前的指令碼檔案的任意位置 函式或者方法啊之類的 但是要想用它們必須先執行一下 global variable語句 variable為要使用的全域性變數 或者是使用 global 變數名字 來呼叫。超全域性變數作用於也是為當前的指令碼檔案的任意位置,在使用的時候無需先執行 ...