这个宏定义是指工程的Options窗口--“C/C++”--“Preprocerssor Symbols”下的宏定义。
在这里宏定义了可以让编译器选择性的编译某些代码。如:
#if defined(LCD_MODEL_AT043)
#define C_GLCD_H_PULSE 41
#define C_GLCD_H_FRONT_PORCH 10
#define C_GLCD_H_BACK_PORCH 10
#define C_GLCD_V_PULSE 10
#define C_GLCD_V_FRONT_PORCH 2
#define C_GLCD_V_BACK_PORCH 2
#elif defined(LCD_MODEL_AT070)
#define C_GLCD_H_PULSE 20
#define C_GLCD_H_FRONT_PORCH 210
#define C_GLCD_H_BACK_PORCH 46
#define C_GLCD_V_PULSE 10
#define C_GLCD_V_FRONT_PORCH 22
#define C_GLCD_V_BACK_PORCH 23
#else
#define C_GLCD_H_PULSE 20
#define C_GLCD_H_FRONT_PORCH 250
#define C_GLCD_H_BACK_PORCH 50
#define C_GLCD_V_PULSE 5
#define C_GLCD_V_FRONT_PORCH 5
#define C_GLCD_V_BACK_PORCH 5
#endif
在上面的代码中,因为在工程的宏定义中定义了LCD_MODEL_AT043,所以只有下面的宏定义会被编译:
#define C_GLCD_H_PULSE 41
#define C_GLCD_H_FRONT_PORCH 10
#define C_GLCD_H_BACK_PORCH 10
#define C_GLCD_V_PULSE 10
#define C_GLCD_V_FRONT_PORCH 2
#define C_GLCD_V_BACK_PORCH 2
这个宏定义的应用场景如:
当你的程序可能会被用于两种液晶屏:4.3寸和7寸,那么你就可以这样做:
在“Manage Project Items”窗口下的“Project Targets”里建两个工程对象(如果你之前只建了一个,那么你直接再添加一个即可)。
这时你回到MDK下就可以看到在下载按钮旁边的下拉框里有两个选项了。
这就是你刚才建立的工程对象。
选中第一个4.3寸的工程对象,在工程宏定义里添加LCD_MODEL_AT043
选中第二个7寸的工程对象,在工程宏定义里添加LCD_MODEL_AT070
这样就完成了。
当你要用4.3寸屏幕程序时,在下拉框里选中4.3寸屏幕的工程对象,宏定义LCD_MODEL_AT043就会生效,只编译你程序里
#if defined(LCD_MODEL_AT043)
#define C_GLCD_H_PULSE 41
#define C_GLCD_H_FRONT_PORCH 10
#define C_GLCD_H_BACK_PORCH 10
#define C_GLCD_V_PULSE 10
#define C_GLCD_V_FRONT_PORCH 2
#define C_GLCD_V_BACK_PORCH 2
的部分。
也可以用这种方式,把调试用的程序和正式版程序分开来,当你调试时需要一些调试信息,那么你就可以用宏定义把它包含起来,如:
#if defined(debug)
shellSnd("It`s debuging status now!");
#endif