全局变量的定义是会得到内存分配且可以被其他模块通过C语言中extern关键字调用的变量。所以,必须在 .C 或 .H 文件中定义,此种方法很容易导致错误。
以下为UCOSIII中定义全局变量的方法:
部分源码(Os.h文件中):
#ifdef OS_GLOBALS #define OS_EXT #else #define OS_EXT extern #endif
Os.h文件中定义了全局变量OS_EXT;在文件"Os_var.c"文件中定义了全局变量OS_GLOBALS
源码如下(Os_var.c文件中)
#define OS_GLOBALS
当编译器处理"Os_var.C"文件时,它使OS_EXT为空,因为OS_GLOBALS已经在"Os_var.c"定义。所以编译器给每个全局变量分配内存空间,而当编译器处理"Os.h"文件时,OS_GLOBALS 没有定义,OS_EXT被定义为extern,这样用户就可以调用外部全局变量。