UCOS —— 全局变量的定义和声明

全局变量在定义后,可被其他模块通过extern关键字调用; 一旦extern关键字使用错误,则会造成重复定义的错误!UCOS 中做了一个巧妙的处理,通过模块.c文件调用模块对应的.h文件,实现全局变量的定义,其他C文件调用这个.h文件,则会作为extern处理。

这个巧妙地处理具体如下: 

1. 在.h文件中定义全局宏:xxx_EXT

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

其中xxx是模块名。

2. 在.c文件中定义私有宏: xxx_GLOBALS

#define xxx_GLOBALS
#include "includes.h"

 includes.h 是主头文件, 包含所有的头文件。

3. 编译器处理xxx.c文件

由于定义了xxx_GLOBALS, 编译器强制xxx_EXT为空, 给每个定义的全局变量分配内存空间。

4. 编译器处理other.c文件

xxx_GLOBALS是xxx的私有宏,其他c文件没有定义,所以编译器认为xxx_EXT为extern,不产生内存分配, 这样在这个c文件中就可以调用外部全局变量了。

 

猜你喜欢

转载自blog.csdn.net/u014670574/article/details/82533425