原创 uC/OS-II中的全局变量声明

2010-7-2 16:56 1591 2 2 分类: MCU/ 嵌入式

在uC/OS-II的代码中,应用了一种让人耳目一新的全局变量定义方法。
在《uC/OS-II》中,作者给出了解释,但是这里还是忍不住要讨论一番。


我们知道,全局变量的使用有两个问题:


1.要给它分配内存,并且只能分配一次。
2.在其它模块中也要能通过extern关键字调用。


按照平时的定义,如果安排得不好,总是会出问题,extern起来没完。


而在uC/OS-II采用了一种比较聪明的做法。


uC/OS-II中,每个.C文件都通过includes.h包含了所有的.H文件


那么, uC/OS-II采用了下面的办法:



每当定义全局变量时,首先做下面的定义:


#ifdef   xxx_GLOBALS
#define  xxx_EXT
#else
#define  xxx_EXT extern
#endif


.H 文件中每个全局变量都加上了xxx_EXT的前缀。xxx代表模块的名字。而在该模块
的.C文件中有以下定义:


#define  xxx_GLOBALS
#include "includes.h"


比如,定义了 xxx_EXT  INT32U       g_xxx;
这样,编译到xxx模块时,xxx_GLOBALS被定义,根据上面的预编译条件,这时候
xxx_EXT是空,从而
            
               xxx_EXT  INT32U       g_xxx;
等价于                  INT32U       g_xxx;


这时候,变量被分配内存。


当编译其它模块时,xxx_GLOBALS没有被定义,根据上面的预编译条件,这时候
xxx_EXT是extern,从而


             xxx_EXT  INT32U       g_xxx;
等价于       extern   INT32U       g_xxx;


这时候,只是变量的外部引用。


通过这种办法,使得全局变量只需在头文件中定义一次就可以了,避免了不少麻烦。






文章评论0条评论)

登录后参与讨论
相关推荐阅读
用户226950 2012-04-07 11:48
51/STC最小系统板资料(更新中)
图片欣赏    淘宝网址:http://item.taobao.com/auction/item_detail.htm?item_num_id=9073446988  二   程...
用户226950 2011-10-13 22:59
YL-3 资料
YL-3数码管模块资料:YL-3 串行数码管资料.zip...
用户226950 2011-09-24 09:10
USB转TTL小板驱动
xp系统驱动:XP系统支持STC下载的PL-2303HX新版驱动.rar WIN7系统驱动:WIN7系统支持STC下载的PL2303HX驱动.rar...
用户226950 2011-05-24 22:48
STM32F103RBT6最小系统原理图 PCB
STM32F103RBT6最小系统板原理图 PCB 附件:做好的成品板:淘宝链接网址:http://item.taobao.com/item.htm?id=8864376956...
用户226950 2011-05-08 12:53
YL-16 STM32F103最小系统板资料(更新中)
二 数据手册:  USB协议中文版:attachment download  中文数据手册:attachment downloadSTM32选型手册:attachment downloadSTM32勘...
用户226950 2011-03-20 13:27
DS18B20温度测量模块
DS18B20 数码管温度显示程序:...
EE直播间
更多
我要评论
0
2
1
2
3
4
5
6
7
8
9
0
关闭 站长推荐上一条 /3 下一条