1.预编译未定义至文件导致的头文件引用失败
(以正点原子工程为例)拿到了供应商的代码工程,在供应商的代码文件中的头文件有一个宏定义LED0和LED1,在其他文件无无法调用
#ifndef __LED_H
#define __LED_H
#include "sys.h"
#ifdef TT_TEST
#define LED0 PBout(5)// PB5
#define LED1 PEout(5)// PE5
#endif
void LED_Init(void);//³õʼ»¯
#endif
在led.h中通过TT_TEST宏定义了LED0和LED1。
我现在想在usart.c中去调用LED0和LED1,usart.c的代码如下。于是死活不能通过编译,会报错。
#include "sys.h"
#include "usart.h"
#include "led.h"
void test(void)
{
LED0 = 1;
}
#endif
后来经过排查发现,led.h的宏定义TT_TEST在user文件夹下的C/C++标签下定义的,也就是说宏定义TT_TEST作用域仅仅在USER 文件夹下。
在一般的使用当中,都是把在工程文件(LED文件夹下)进行宏定义的,所以这个就是KEIL的一个使用问题。故若我们想在usat.c文件下使用此宏定义,仅仅需要右键usart.c的option for usart.c宏定义TT_TEST,即可调用LED0和LED1。
总结:KEIL的宏定义可具体到每个文件夹和文件,故调用其他地方的参数或结构体,需注意宏定义的作用范围。
2.如何生成bin文件
option-->user-->After Build处添加命令 fromelf --bin -o "$L@L.bin" "#L",即可在(可通过Build output看到生成文件的位置)相关目录下生成bin文件