内核代码中利用宏定义来区分和控制全局变量中定义和声明: 1、在uCOS_II.h 文件中明确定义 #ifdef OS_GLOBALS #define OS_EXT #else #define OS_EXT extern #endif 意思是说:如果在包含头文件uCOS_II.h之前宏定义了OS_GLOBALS那么OS_EXT将替换为空(即为全局变量定义),否则替换为extern(即为全局变量声明)。 2、又有在uCOS_II.c中,包含了uCOS_II.h ,并在其前面宏定义了OS_GLOBALS (即全局变量的声明只在该文件中被定义了),且宏定义了OS_MASTER_FILE,然而在其他文件要包含uCOS_II.h文件之前,也有宏定义确定包含该文件里的只是全局变量的声明,通过下面宏定义实现: #ifndef OS_MASTER_FILE #define OS_GLOBALS #include <ucos_ii.h> #endif 3、在ucos_ii.h中包含内核中所有函数的声明,在ucos_ii.c中又是这么写的: #define OS_GLOBALS /* Declare GLOBAL variables */ #include <ucos_ii.h> #define OS_MASTER_FILE /* Prevent the following files from including includes.h */ #include <os_core.c> #include <os_flag.c> #include <os_mbox.c> #include <os_mem.c> #include <os_mutex.c> #include <os_q.c> #include <os_sem.c> #include <os_task.c> #include <os_time.c> 意思就是:包含了各模块的 *.c 源文件 ,其他各模块的函数实现分别在各模块中的c文件中实现。 4、这一招就是uscos-ii的奇淫诀窍 |
|