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