keil出现同一个宏定义赋值在多个文件中结果不一致问题

在仿真时,通过watch观察变量,发现某个变量在初始化使用宏定义赋值后,与在运行中使用宏定义赋值结果不一样。

理论分析,宏定义是在预编译时处理的,在使用过程中应该都一样。但却出现不一样的结果,经以下分析:

宏定义中嵌套使用多个宏定义,包含一些判断性宏定义。预想是在编译流程中,初始化使用该宏定义时,由于该判断性宏定义在另一个文件中,可能还没有被包含;而在运行中使用该宏定义时,该判断性宏定义已经被包含和定义,因此出现两个完全不同的数据。

选中listing下C preprocessor Listing...选项。打开调用该宏定义的文件对应生成的编译过程文件。

可以发现,使用的数值是判断性宏定义不存在时的数值。由此推论出,在生成该编译流程文件时,被包含的部分宏定义没有完全定义。

 

解决方法:

1、修改判断性宏定义位置,梳理正确的编译过程。

2、修改编译流程。这个比较难,我没找到方法,但理论上可行。

 

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值