【已解决】Silabs IDE的项目中定义的宏失效
【现象】
Silicon Laboratories IDE中有一个项目,在对应的:
Project -> Tool Chain Integration->Assembler->Command Line Flags中,定义了某个宏DEFINE(_EX_OSC_),但是在编译源码main.c中的时候,该宏却没有生效,也就是此宏定义,没有传递进去。
【解决过程】
1. 遇到此问题,第一反应是,是不是Silabs IDE工具有bug啊,导致宏定义失效了。
2. 然后去看编译输出的log信息,发现,对应我的main.c的文件的编译,用的是
C:KeilC51BINc51.exe
即,用的是C语言的编译器C51:
C51 COMPILER V7.00 Beta 6 – SN: XXX
COPYRIGHT KEIL ELEKTRONIK GmbH 1987 – 2002
对应的,编译汇编文件,用的是:
C:KeilC51BINA51.EXE
即汇编编译器A51:
A51 MACRO ASSEMBLER V7.00 – SN: XXX
COPYRIGHT KEIL ELEKTRONIK GmbH 1987 – 2002
3. 在用C51编译main.c的时候,发现传递的参数中,并没有DEFINE(_EX_OSC_), 即没有传递我所期望的宏定义,而又观察到用A51编译汇编文件的时候,传递的参数中,是有DEFINE(_EX_OSC_)的,所以,恍然大悟,看来是DEFINE(_EX_OSC_)的宏定义参数,设置的位置错了,错误地把C语言main.c中所需要的宏定义DEFINE(_EX_OSC_),设置到汇编编译选项里面了。
4. 所以,去:
Project -> Tool Chain Integration->Assembler->Command Line Flags中,去掉DEFINE(_EX_OSC_),放到
Project -> Tool Chain Integration->Compiler->Command Line Flags中去,再去编译main.c,此时就正确了,就可以正常传递DEFINE(_EX_OSC_),正常编译main.c了。
【总结】
还是要多观察,多了解编译流程的框架和细节,才能慢慢地找到问题根源所在。
转载请注明:在路上 » 【已解决】Silabs IDE的项目中定义的宏失效