某些情况下,同一份代码但生成的hex文件不一样的解决方法

本文记录了作者在代码交接过程中遇到的Hex文件比对不通过的问题及解决过程。通过对编译器配置和assert语句的调整,最终解决了问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    本人在接手之前一位同事的代码,因为加了部分功能,然后调完程序提交了,但是后来被测试通知,提交的源码编译生成的hex文件与我提交的hex文件比对不通过。


    自己记得自己是提交完svn代码,然后用那个代码生成的hex提交的呀。拉回来继续看,发现连续编译两次,生成的hex文件都不一样。最后找到原因,编译器用的是iar,在生成hex文件时候,配置错了,原先的代码只是将配置中的生成文件后缀.d51改了成了.hex。修改后,编译,保存hex副本,再编译,比对,一样了。问题解决!,重新提交源码与hex文件。


    没过多久,又被测试拉过去,说还是不一样。我又回去看了,发现,复制工程,粘贴,用副本编译,生成的hex也是不一样的,但是烧录也都是能够正常使用。不是很理解为什么。百度很久,发现有一些帖子好像情况差不多,但是都没有给出解决方法。自己对照着其他工程,挨个一点点比对配置,依旧没有任何作用,折腾了将近一天时间。

    最后偶然把hex文件拉倒jflash看了一下,发现hex文件有一个字符串,是项目中某个文件的路径,然后往下看,还有assert断言语句。自己拉出那个文件看,觉得没有什么问题啊。自己对于assert也是之前有看到过,知道大概是什么功能,自己没有用过,就抱着怀疑的心态,屏蔽了assert语句,然后复制工程副本,再编译,比较两个工程的hex,发现终于一样了。然后重新百度assert,发现前人有提醒,在release代码时候,记得关掉。。。



    哎,折腾了这么久,还是偶然自己看了下生成的hex文件内容,不然,估计怎么都不可能找到这个原因的吧。接手代码,感觉很容易就会掉进坑。之前的同事弄这个代码的时候,不需要比对hex文件,而且烧录,是直接用iar烧录,不用hex文件,所以应该是没有看到这个的现象,不然他解决应该会比我快的多吧。


ps:希望自己现在代码能少给后人留坑= =

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值