A1: 已经查到问题了 首先路径不一样的情况下编译同一个工程生成的烧录文件大小不一样是因为:工程代码中存在assert断言部分的__FILE___ 这个宏定义(我只说我的工程代码哈),很多库函数一般都会对参数进行相关的检查,就是用的assert。尽管实际代码的参数都是正确的,但是__FILE___一旦被编译了就会把路径信息带到烧录文件里面(猜测) 解决以上问题的办法是查看assert先关代码,一般都是条件编译的,比如我这边是 #ifdef NDEBUG #define assert 啥都不干 #else assert 干活
那就在代码合适位置或者在IAR的工程配置里面增加NDEBUG这个宏定义就行了
其次顺便解释一下不同时间编译出来的烧录文件内容存在不一致 这个原因主要是代码中存在__DATE__ _在这里插入代码片_TIME__宏定义,所以生成的烧录程序会把时间编译进去,但是这个只是影响很少几个字节内容,特别是不会对长度有影响(领导评审代码的时候一般都市rebuild all一下看看烧录程序的大小是不是一致的)
A2: 总结: 1:找是否使用assert断言语句,__FILE__的路径问题导致bin不同 2:DATE、_TIME__等宏定义造成 ps:如果是其他编译器,也有可能是debug和release不同造成的