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

/*声明:

本文作者: 纪国瑞 保留一切权力 http://blog.csdn.net/ji_gr

未经许可,请勿转载

在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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值