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

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

/*声明:

本文作者: 纪国瑞 保留一切权力

未经许可,请勿转载

在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;

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

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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航