最新消息:20210816 当前crifan.com域名已被污染,为防止失联,请关注(页面右下角的)公众号

【已解决】Silabs IDE的项目中定义的宏失效

工作和技术 crifan 2156浏览 0评论

【已解决】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的项目中定义的宏失效

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
79 queries in 0.237 seconds, using 22.12MB memory