本意是想将全部头文件包含在一个文件里,可以省去每次在各个c中添加各种头文件。
因此在includes.h中做了以下包含:
#include <bsp.h>
#include <app.h>
#include <os.h>
#include "LED.h"
#include "bsp_ser.h"
然后在user.c中做以下包含:
#include "includes.h"
以为这样使用就不用每次在各个C文件里都添加各种头文件了,结果编译还是出了问题:
error: #20: identifier "DMA_Channel1" is undefined
检查,发现是#include "bsp_ser.h"位置在#include <app.h>后面导致的。将顺序变成这样就好了:
#include <bsp.h>
#include "bsp_ser.h"
#include <app.h>
#include <os.h>
#include "LED.h"
总结,头文件的包含在编译时是按顺序进行的,在变量层层嵌套时(本例就是,头文件里有各种typedef)会发生嵌套混乱找不到定义的情况。此时就只能仔细调整顺序了。
或者在使用的地方单独添加该头文件,例如在user.c中做以下包含也是没问题的,编译通过:
#include "bsp_ser.h"
#include "includes.h"