本人很久以前写过一篇文章 《arm cortex-m镜像文件(.bin/.hex/.s19)》,详细介绍了三种流行的镜像文件格式,这些镜像文件不同于可执行文件(.elf),它们主要保存的是芯片能够执行的二进制机器码数据,以及辅助的地址信息和校验和,其他像 .elf 文件里有的工程信息、代码信息、调试信息全部被去除了,说白了镜像文件主要是为最终量产过程而生的。
一般情况下,在 ide 开发环境里编译链接生成的是可执行文件,然后可以在工程选项做一些设置能进一步生成镜像文件。不同 ide 下生成镜像文件的方法不同,今天主要介绍来mcuxpresso ide下生成镜像文件的方法以及与 iar/mdk 的对比。
注:本文测试的mcuxpresso ide版本是v11.6.0_8187。
一、各种ide下生成镜像文件的方法
我们先来看看mcuxpress以外的其它ide下是如何生成各种格式镜像文件的。我们以 sdk_2.11.1_mimxrt1170-evkboardsevkmimxrt1170demo_appshello_worldcm7 目录下的工程文件为例。
1.1 iar ewarm下
编译hello_world_demo_cm7.eww工程(随便选择 debug build),会在工程目录 debug文件夹下生成可执行文件hello_world_demo_cm7.out。如果在工程选项output converter里开启generate additional output,则可以指定生成想要的镜像文件(bin/hex/srec)。
如果你仔细看build窗口的log信息,会发现ide其实是在可执行文件生成之后,再借助 iar systemsembedded workbench 9.10.2armbinielftool.exe 小工具对可执行文件做的二次转换生成的镜像文件。
ielftool.exe --bin app.out app.binielftool.exe --ihex app.out app.hexielftool.exe --srec app.out app.s19
所以其实在工程选项build actions里的post-build command line添加如下调用 ielftool.exe做转换的命令(cmd /c 的意思是以 bat 文件内容方式打开后面的命令;命令需要用双引号括起来;路径也需要单独用双引号括起来,防止路径中存在空格,导致命令出错),也能达到一样的效果。
cmd /c $toolkit_dir$binielftool.exe --bin $proj_dir$/debug/hello_world_demo_cm7.out $proj_dir$/debug/hello_world_demo_cm7.bin
1.2 keil mdk下
编译hello_world_demo_cm7.uvprojx工程(也选择debug build),会在工程目录debug文件夹下生成可执行文件hello_world_demo_cm7.out。如果在工程选项output里开启create hexfile,则可以生成hex格式镜像文件,不过要想生成其他bin/srec格式镜像文件需要想其他办法。
mdk下其实也有类似iar下的镜像文件转换小工具,即 keil_v5armarmccbinfromelf.exe,这个小工具可以帮助生成其他格式的镜像文件。
fromelf.exe --bin app.out --output app.binfromelf.exe --i32 app.out --output app.hexfromelf.exe --m32 app.out --output app.srec
在工程选项user里的after build添加如下调用formelf.exe做转换的命令就可以得到指定格式的镜像文件了。
$karmarmccbinfromelf.exe --bin --output=debug@l.bin !l
二、mcuxpresso下生成镜像文件的方法
mcuxpresso ide 下生成镜像文件的方法与iar/mdk稍有不同,其并不是在工程选项里去开启,而是工程目录里会有binaies虚拟文件夹(如果看不到该文件夹,可以按 f5 刷新一下),编译完成后在binaies文件夹下会看到可执行文件(evkmimxrt1170_hello_world_demo_cm7.axf),右击可执行文件在binary utilities里可以看到不同格式镜像文件生成选项。
我们知道mcuxpresso ide是基于标准armgcc的二次封装,所以其生成镜像文件的能力其实是依靠mcuxpressoide_11.6.0_8187idetoolsbinarm-none-eabi-objcopy.exe 小工具。
arm-none-eabi-objcopy.exe -o binary app.axf app.bin
arm-none-eabi-objcopy.exe -o ihex app.axf app.hex
arm-none-eabi-objcopy.exe -o srec app.axf app.srec
因此在mcuxpresso ide下我们也可以像iar/mdk那样添加post-build steps命令来完成镜像文件的生成。
arm-none-eabi-objcopy -o binary ${buildartifactfilename} ${buildartifactfilebasename}.bin
来源:恩智浦mcu加油站
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理
美国研制出新的半导体辐射检测化合物
SecureCRT高效使用技巧大盘点!
2010年Digi-Key Corporation全球销售额超越15亿美元
无人机的原理介绍,为什么要发展无人机,无人机行业研究报告详细概述
“车用固液混合型电解电容器”荣获2018年度汽车电子科学技术奖优秀创新产品奖
MCUXpresso IDE下生成镜像文件的方法及其与IAR,MDK差异
华为c8812如何获得root权限详细教程
广东哪家的户外便携式储能电源质量好还耐用?
国六排放循环的介绍
沐曦集成电路的崛起,为国产GPU增添助力
苹果13英寸Touch Bar MacBook Pro和 iPhone7 Plus、AirPods荣获 2017 年度「iF 设计金奖」
新型二维无金属铁磁半金属的理论预测与研究
创新性LT3652降压型电池充电器LT3652HV
京东方研制出大陆首块30英寸AMOLED显示屏
怎么判断智能指纹锁的安全性?坤坤智能锁告诉
功率型LED封装用高折射率有机硅材料技术分析
土壤水分温度记录仪的产品介绍
华为畅享6S评测:中规中矩 胜在稳定
JAE发布JN14系列产品应用于金属外壳的小型伺服电机
工信部发布了微功率短距离无线电发射设备规范原则