一键编译同时生成hex bin文件的方法

1、功能需求


     在嵌入式软件开发过程中通常需要同时生成hex文件,bin文件,hex文件用于仿真器烧写程序使用,bin文件用于执行串口在线升级时使用。在本项目的使用的hex文件包括boot.hex, app.hex两个文件,烧写时需要把这两个文件合并成一个文件。bin文件需要进行特殊的处理(增加文件头与MD5校验码),用于在串口升级使用。本项目中使用IAR编译器,IAR编译器无法通过工程设置同时生成HEX,BIN文件,同时生成hex,bin文件无法直接使用,需要进行进一步的处理。本文通过采用批处理的方式来实现让IAR软件同时生成HEX, BIN文件,之后对HEX文件进行合并并且指定特殊的命名,生成BIN文件,对BIN文件增加文件头与MD5校验码处理。

2、同时生成hex,bin文件


     IAR软件自带一个ielftool.exe文件,位于IAR目录下bin文件夹中,使用这个程序可以同时生成bin,hex文件。在工程目录下创建一个md5_bin.bat文件,文件位于工程目录下的bin_md5文件夹中,文件中的内容如下。

::define the target name, it inclued the path
set OUT=%1.out
set HEX=%2\Debug\Exe\%3.hex
set BIN=%2\Debug\Exe\%3.bin
::generate the bin file
ielftool.exe --bin --verbose %OUT%  %BIN%
::generate the hex file
ielftool.exe --ihex --verbose %OUT% %HEX%

       这个bat文件的语法的简单说明:set用于定义一个变量,%1,%2,%3分别指调用bat文件时输入的参数,这个bat文件在调用于会输入三个参数,第一个参数是工程编程生成的out文件的路径(不包括扩展名称)第二个参数是工程的文件的目录,第三个参数据是生成的bin,hex文件的文件名称。

     在IAR工程配置中的Post-buil command line中输入$PROJ_DIR$\md5_bin\md5_bin.bat $TARGET_BPATH$ $PROJ_DIR$ UPHJ-001-MCU_V11,即调用md5_bin.bat文件,输入三个参数,第一个参数$TARGET_BPATH$是工程编程生成的out文件的路径(不包括扩展名称)第二个参数$PROJ_DIR$是工程的文件的目录,第三个参数UPHJ-001-MCU_V11是生成的bin,hex文件的文件名称。

     这样设置后,执行完成编译后,在Exe文件夹中就会自动生成hex,bin文件了,如下图。

 

 3、合并hex文件

     合并hex文件需要一个exe文件,这个文件叫mergehex.exe,可以从网上下载,或者自己用C语言写一个,合并hex文件的一个最简单的方法,把第一个hex文件的最后一行删除,之后把第二个hex文件复制到第一个hex文件的后面即可,当然这是一种最简单的做法。这个文件使用的格式mergehex.exe -m f1.hex f2.hex -o f_sum.hex

     在本工程中把引导程序hex文件和mergehex.exe文件放在bin_md5文件夹下面,如下图。

   合并的后的hex文件要采用新文件名称,文件名称的格式为  工程名_ALL_V1_1_日期的方式,比如UPHJ-001-MCU_ALL_V1_1_20210227.hex,在md5_bin.bat中添加%2\md5_bin\mergehex.exe -m %2\md5_bin\UP_STM32_BOOT_V01.hex %HEX% -o %2\Debug\Exe\%MERGE_HEX_NAME%%TODAY%.hex,同时在前面定义生成的文件名称变量MERGE_HEX_NAME,日期的变量TODAY。

     这里顺便介绍一下bat文件的字符串处理,%NAME:0~13%这是一个字符串截取操作,即从变量NAME的字符串的第0位开始,取13个字符出来,注意格式中要前后两%,中间要有: ~。注意这种操作不能嵌套,即%%3:0~13% 在截取字符串中引用的%3,这个写无法执行。下面先定义了TODAY变量,变量是取当天的时间,date会返回2021/02/27,定义这个变量取到20210227。两个字符串直接写在一起就连成一个新的字符串了。

     同理根据输入的文件名称来生成新的文件名称,定义一个变量:MERGE_HEX_NAME  

   

     编译过后,Debug\Exe文件夹下会生成 UPHJ-001-MCU_ALL_V1_1_20210227.hex,这个文件就是两个hex合并后的文件,并且对合并后的文件进行按特定格式进行命名的处理。

4、生成用于串口升级的bin文件

     用于串口升级的bin文件,需要使用应用程序生成的bin文件增加文件头与md5校验处理,这个操作没有现成的exe可用,所以使用c语言编写了一个exe文件,名称叫bin_md5.exe,放在md5_bin文件夹下面。在md5_bin.bat中增加调用bin_md5.exe的命令,如下:

     执行编译命令后,Exe文件夹下会自动生成合并后的hex文件,用于串口升级的bin文件,并且采用特殊的格式的命名,可以直接用于固件发布了。

 

 

  • 0
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值