EIDE中导入Keil AC6 编译器工程,发现当在EIDE中选择size优化等级的时候,编译得到的bin文件与mdk中不一致 EIDE中编译得到的bin会比mdk的少几十个字节,然后烧录到芯片后很容易触发hardfault,mdk的就没有这个问题。
![其它的优化等级下,对比了一下EIDE和mdk编译出来的bin体积是一样的,就是size优化等级下bin大小不一致
Mxf
贴出你在 eide 和 MDK 中的编译选项
admin 编译器的配置两边应该都是一样的
eide 的 build 目录下有 build.mk 文件,里面有生成的编译参数,你可以把这个文件的内容 和 mdk 选项卡里生成的编译参数对比一下,看看有什么不同的
admin 在build文件夹下没看到build.mk文件,但是我直接把mdk这边的编译参数全部复制到EIDE中进行编译,效果还是一样的。 虽然没看到build.mk文件,但是我把编译参数全部复制到eide后,在build.params文件里面是可以看得到我添加的这些参数的
如果没有生成 .mk 文件,在每个 .o 文件的目录下都会有 .__i 文件,里面也是编译参数,你可以对照一下(链接参数也要比较,build 目录下 .lnp 后缀结尾的文件就是)
插件本身就会生成一些编译参数,你直接复制 mdk 的编译参数到 cflags 里是会有重复或者冲突项的,无法知道实际有没有生效
admin 我不把mdk的编译参数复制到eide中,两边编译,对比eide中的 .__i文件中的参数,和mdk设置界面显示的编译参数。唯一的不同是mdk中多了一个-gdwarf-3 ,eide中多了一个-g这两个好像是生成调试信息的,应该不影响最终的结果
admin 有没有可能是mdk和eide的文件编译顺序不同,在某些地方导致对齐问题,然后导致hardfault的呢?
有些时候链接顺序不同确实会影响最终 bin 的大小,但不会影响程序的执行
haltfault 最好使用调试器找一下问题,不能瞎猜
haltfault
admin 现在比较尴尬的是,我只用EIDE来做编译,调试我还是在mdk上做的。平时的固件都是生成bin然后ota的。
admin 我今天把调试的功能搞好了,最终还是我自己的问题。 如下图所示