麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > C > 正文

uCOS中如何使用全局變量

2020-02-24 14:30:10
字體:
來源:轉載
供稿:網友

我們在使用C語言的時候經常都會遇到全局變量,但是有很多小伙伴們對于全局變量不是很了解,那么我們現在就一起去看看uCOS中如何使用全局變量,希望對你有所幫助。

.C文件中定義

unsigned int gVariable;

.h文件中聲明

extern unsigned int gVariable;

這樣做的目的是防止變量重復聲明,提高編譯效率。但是如果這樣的定于如果安排不好就會出現各種各樣的問題。在編譯時重復的聲明,甚至出現錯誤。

閱讀邵貝貝翻譯的《uC/OS-II》一書,發現里面用了一種非常巧妙的全局變量定義的方法,下面就自己的理解做一下記錄,算是自己的筆記。也寫出來和大家共同學習。

uC/OS-II中定義了一全局使用的頭文件includes.h。這個文件在任意一個.C 文件中引用。

在每一個.H文件中定義了這樣一個宏。/

?

#ifdef XXX_GLOBALS

?

#define XXX_EXT

#else

#define XXX_EXT extern

#endif


.H 文件中每個全局變量都加上了xxx_EXT的前綴。xxx代表模塊的名字。該模塊的.C文件中有以下定義:

?

#define XXX_GLOBALS

#include "includes.h"

當編譯器處理.C文件時,它強制xxx_EXT(在相應.H文件中可以找到)為空,(因為xxx_GLOBALS已經定義)。所以編譯器給每個全局變量分配內存空間,而當編譯器處理其他.C文件時,xxx_GLOBAL沒有定義,xxx_EXT被定義為extern,這樣用戶就可以調用外部全局變量。為了說明這個概念,可以參見uC/OS_II.H,其中包括以下定義:

?

#ifdef OS_GLOBALS

?

#define OS_EXT

#else

#define OS_EXT extern

#endif


OS_EXT INT32U OSIdleCtr;

OS_EXT INT32U OSIdleRun;

OS_EXT INT32U OSIdleMax;


同時,uCOS_II.H有中以下定義:

?

#define OS_GLOBALS

#include "includes.h"

當編譯器處理uCOS_II.C時,它使得頭文件變成如下所示,因為OS_EXT被設置為空。

INT32U OSIdleCtr;

INT32U OSIdleRun;

INT32U OSIdleMax;

這樣編譯器就會將這些全局變量分配在內存中。當編譯器處理其他.C文件時,頭文件變成了如下的樣子,因為OS_GLOBAL沒有定義,所以OS_EXT被定義為extern。

extern INT32U OSIdleCtr;

extern INT32U OSIdleRun;

extern INT32U OSIdleMax;

在這種情況下,不產生內存分配,而任何 .C文件都可以使用這些變量。這樣的就只需在 .H 文件中定義一次就可以了。

uCOS中如何使用全局變量?看晚本文關于全局變量變量的內容后我們知道全局變量的定義一般都采用以上多方式。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 国产一区二区三区在线免费 | 91精品国产综合久久婷婷香 | 亚洲视频观看 | 国产一级一级片 | 国产一级一区 | 91av亚洲| 99视频有精品视频高清 | 日本成年网| 国产麻豆久久 | 免费毛片儿 | 毛片在哪看 | 欧美成在线视频 | 久久久久亚洲美女啪啪 | 亚洲精品一区中文字幕 | 香蕉成人在线观看 | 一级免费特黄视频 | 久草在线观看福利视频 | 欧美日本在线播放 | 国产pron | 日日噜噜噜噜久久久精品毛片 | 欧美一级α | 亚洲成人高清电影 | 欧美成人性生活 | 久草在线观看资源 | 99精品无人区乱码在线观看 | 精品一区免费 | 日韩精品中文字幕在线观看 | 国产福利视频在线观看 | 欧美18一19sex性护士农村 | 黄色电影免费网址 | 国产精品刺激对白麻豆99 | 亚洲欧美一区二区三区在线观看 | 久久日韩在线 | 毛片免费看电影 | 日日草夜夜操 | 毛片网站视频 | 亚洲一级毛片 | 最新se94se在线欧美 | free台湾极品性hd | 亚洲天堂ww| 久久国产精品电影 |