参考:http://www.cnblogs.com/alongwaytogo/p/5111516.html
头文件:
#ifndef __OS_HELP_H__ #define __OS_HELP_H__ #ifdef xxx_GLOBALS //如果定义了 xxx_GLOBALS #define xxx_EXT //那么xxx_EXT就被定义为 空 #else #define xxx_EXT extern//否则磝xx_EXT就被定义为 extern #endif typedef unsigned char u8; typedef unsigned short int u16; typedef unsigned int u32; xxx_EXT u8 Ble_Flag_Bps; xxx_EXT u8 Ble_Flag_rename; //不能写Ble_Flag_rename=1;因为声明可以多次,定义只能一次。 xxx_EXT u8 Ble_Flag_Iotime; xxx_EXT u8 Ble_Flag_Connet; xxx_EXT u8 Ble_Flag_Power; xxx_EXT union { struct { u8 rename:1; u8 Iotime:1; u8 Bps:1; u8 Connet:1; u8 Power:1; }Flag; u8 FlagAll; } BleFun; xxx_EXT void delay_ms(u32 nCount); typedef u16 (*FUNC) (void) ;//1--抽象函数 作为回调函数 xxx_EXT u32 ADC_Average(FUNC func);//2--实现函数 作为调用函数 #endif
C文件:
#define xxx_GLOBALS //自己的模块。c定义下!!! #include "OS_Help.h" #include"math.h" void delay_ms(u32 nCount) { for(;nCount!=0;nCount--); }
做一个简单的模块,大家都可以用。只有他的.C是有#define xxx_GLOBALS的,那样的话他就是与众不同了。
他的头文件的xxx_EXT相当于空,而别人的相当于extern。
发现意外工程里面的,globals.h跟我的思路一样,它给bus用了
#ifdef GLOBALS #define EXT #else #define EXT extern #endif EXT unsigned char TxBuffer1[400]; EXT unsigned char TxBuffer2[]; EXT unsigned char RxBuffer1[400]; EXT unsigned char RxBuffer2[]; EXT unsigned char TxCounter1; EXT unsigned int TxCounter2; EXT volatile unsigned int RxCounter1; EXT volatile unsigned int RxCounter2;