首页 > 其他分享 >痞子衡嵌入式:MCUXpresso IDE下生成镜像文件的方法及其与IAR,MDK差异

痞子衡嵌入式:MCUXpresso IDE下生成镜像文件的方法及其与IAR,MDK差异

时间:2022-10-03 22:35:43浏览次数:86  
标签:bin MDK exe 痞子 app 镜像文件 IDE


  大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家分享的是MCUXpresso IDE下生成镜像文件的方法及其与IAR,MDK差异

  痞子衡很久以前写过一篇文章 ​​《ARM Cortex-M镜像文件(.bin/.hex/.s19)》​​,详细介绍了三种流行的镜像文件格式,这些镜像文件不同于可执行文件(.elf),它们主要保存的是芯片能够执行的二进制机器码数据,以及辅助的地址信息和校验和,其他像 .elf 文件里有的工程信息、代码信息、调试信息全部被去除了,说白了镜像文件主要是为最终量产过程而生的。

  一般情况下,在 IDE 开发环境里编译链接生成的是可执行文件,然后可以在工程选项做一些设置能进一步生成镜像文件。不同 IDE 下生成镜像文件的方法不同,今天痞子衡主要介绍 MCUXpresso IDE 下生成镜像文件的方法以及与 IAR/MDK 的对比。

  • Note: 痞子衡测试的MCUXpresso IDE版本是v11.6.0_8187。

一、其它IDE下生成镜像文件的方法

  我们先来看看其它 IDE 下是如何生成各种格式镜像文件的。我们以 \SDK_2.11.1_MIMXRT1170-EVK\boards\evkmimxrt1170\demo_apps\hello_world\cm7 目录下的工程文件为例。

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)。

痞子衡嵌入式:MCUXpresso IDE下生成镜像文件的方法及其与IAR,MDK差异_嵌入式

  如果你仔细看 Build 窗口的 log 信息,会发现 IDE 其实是在可执行文件生成之后,再借助 \IAR Systems\Embedded Workbench 9.10.2\arm\bin\ielftool.exe 小工具对可执行文件做的二次转换生成的镜像文件。

ielftool.exe --bin  app.out app.bin
ielftool.exe --ihex app.out app.hex
ielftool.exe --srec app.out app.s19

  所以其实在工程选项 Build Actions 里的 Post-build command line 添加如下调用 ielftool.exe 做转换的命令(CMD /C 的意思是以 bat 文件内容方式打开后面的命令;命令需要用双引号括起来;路径也需要单独用双引号括起来,防止路径中存在空格,导致命令出错),也能达到一样的效果。

CMD /C ""$TOOLKIT_DIR$\bin\ielftool.exe" --bin "$PROJ_DIR$/debug/hello_world_demo_cm7.out" "$PROJ_DIR$/debug/hello_world_demo_cm7.bin""

痞子衡嵌入式:MCUXpresso IDE下生成镜像文件的方法及其与IAR,MDK差异_嵌入式_02

1.2 Keil MDK下

  编译 hello_world_demo_cm7.uvprojx 工程(也选择 debug build),会在工程目录 debug 文件夹下生成可执行文件 hello_world_demo_cm7.out。如果在工程选项 Output 里开启 Create HEX file,则可以生成 hex 格式镜像文件,不过要想生成其他 bin/srec 格式镜像文件需要想其他办法。

痞子衡嵌入式:MCUXpresso IDE下生成镜像文件的方法及其与IAR,MDK差异_嵌入式_03

  MDK 下其实也有类似 IAR 下的镜像文件转换小工具,即 \Keil_v5\ARM\ARMCC\bin\fromelf.exe,这个小工具可以帮助生成其他格式的镜像文件。

fromelf.exe --bin app.out --output app.bin
fromelf.exe --i32 app.out --output app.hex
fromelf.exe --m32 app.out --output app.srec

  在工程选项 User 里的 After build 添加如下调用 formelf.exe 做转换的命令就可以得到指定格式的镜像文件了。

$K\ARM\ARMCC\bin\fromelf.exe --bin --output=debug\@L.bin !L

痞子衡嵌入式:MCUXpresso IDE下生成镜像文件的方法及其与IAR,MDK差异_嵌入式_04

二、MCUXpresso IDE下生成镜像文件的方法

  MCUXpresso IDE 下生成镜像文件的方法与 IAR/MDK 稍有不同,其并不是在工程选项里去开启,而是工程目录里会有 Binaies 虚拟文件夹(如果看不到该文件夹,可以按 F5 刷新一下),编译完成后在 Binaies 文件夹下会看到可执行文件(evkmimxrt1170_hello_world_demo_cm7.axf),右击可执行文件在 Binary Utilities 里可以看到不同格式镜像文件生成选项。

痞子衡嵌入式:MCUXpresso IDE下生成镜像文件的方法及其与IAR,MDK差异_嵌入式_05

  我们知道 MCUXpresso IDE 是基于标准 ARMGCC 的二次封装,所以其生成镜像文件的能力其实是靠得 \MCUXpressoIDE_11.6.0_8187\ide\tools\bin\arm-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"

痞子衡嵌入式:MCUXpresso IDE下生成镜像文件的方法及其与IAR,MDK差异_嵌入式_06

  至此,MCUXpresso IDE下生成镜像文件的方法及其与IAR,MDK差异痞子衡便介绍完毕了,掌声在哪里~~~

欢迎订阅

文章会同时发布到我的​​知乎主页​​​、​​微信公众号​​ 平台上。

微信搜索"痞子衡嵌入式"或者扫描下面二维码,就可以在手机上第一时间看了哦。

痞子衡嵌入式:MCUXpresso IDE下生成镜像文件的方法及其与IAR,MDK差异_可执行文件_07

  最后欢迎关注痞子衡个人微信公众号【痞子衡嵌入式】,一个专注嵌入式技术的公众号,跟着痞子衡一起玩转嵌入式。


痞子衡嵌入式:MCUXpresso IDE下生成镜像文件的方法及其与IAR,MDK差异_嵌入式_08


  衡杰(痞子衡),目前就职于恩智浦MCU系统部门,担任嵌入式系统应用工程师。

  专栏内所有文章的转载请注明出处​

  可以关注痞子衡的Github主页 ​​https://github.com/JayHeng​​,有很多好玩的嵌入式项目。

  关于专栏文章有任何疑问请直接在博客下面留言,痞子衡会及时回复免费(划重点)答疑。





标签:bin,MDK,exe,痞子,app,镜像文件,IDE
From: https://blog.51cto.com/henjay724/5730548

相关文章

  • Latex表格太宽怎么办?用 sidewaystable !
    \begin{sidewaystable}[!tbp]\caption{ExampleofSideWaysTable}\centering\begin{tabular}{c|c|c|c|c|c|c|c|c|c|c|c|c}\hlineAAAAA&BBBB......
  • IDEA使用
    热部署1、使用devtools依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><sc......
  • IDEA自动生成的UML类图修改样式
    发生缘由IDEA自动生成的UML类图样式是曲线的,而我想要的是折线,所以想要修改一下。环境介绍电脑系统:win10IDEA版本:2021.1.3设置PS简单说一下查找历程:......
  • IDEA 插件开发(一):菜单及气泡通知
    开发工具开发工具使用IntellijIDEA,官网下载地址:https://www.jetbrains.com/idea/download/other.html推荐使用2020.3.4社区版(Community),原因如下:免费开源,在开发插件......
  • vue 的provide 和 inject
    1.功能说明在开发过程中,在子组件中如何获取父组件或者祖父级的数据。这个我们之前的做法是在子组件中找到父组件实例,然后使用父组件的数据。这样其实不是很自然。在vue中提......
  • pycharm,pyside6,第一个图形界面
      保存为 Main.ui在Pycharm中,右击这个文件,  会执行命令,转换为py文件 ui_Main.pyMain.py 代码如下fromPySide6.QtWidgetsimportQApplication,QMainWindowfrom......
  • pyside 学习目标
    官方文档 https://doc.qt.io/qtforpython/examples/index.html1获取配置信息2022-9-28 新建项目   新建 config.yaml文件内容如下mysql:host:"127.0.0.1"port:......
  • idea Mac格式化代码快捷键
    ideaMac格式化代码快捷键:Command+option+L优秀不够,你是否无可替代软件测试交流QQ群:721256703,期待你的加入!!欢迎关注我的微信公众号:软件测试君......
  • How to Install Lazarus IDE in Ubuntu 20.04, 18.04, 21.10
    Ubuntu20.04LTShasbeenreleasedrecently,butinstallingLazarustherefromtheofficialreposwon'tgetyouupandrunning.Let'sseehowLazaruscanbe......
  • 杂记 idea相关
    彻底删除idea项目removemodule手动删除文件夹删除项目引用使用Everything搜索找到项目.contexts.zip和项目.tasks.zip两个文件,将其删除idea快捷键批量编辑:alt+......