【嵌入式烧录刷写文件】-2.2-合并两个Intel Hex文件

news/2024/11/23 0:40:33/

案例背景(共8页精讲):
1.教你如何合并两个Bootloader.hexApp.hex文件;
2.提供了两种方法合并两个Intel Hex文件;
3.基于批处理Bat脚本,以及Vector HexView工具提供的Command line自动化完成两个Hex文件的合并(介绍批处理在嵌入式软件开发过程中的典型应用)。

目录

1 为什么要将Bootloader.hex和App.hex合并成一个hex文件?

1.1 Bootloader和Application地址范围说明

2 使用Vector HexView工具合并两个hex文件

2.1 “自动合并”两个hex文件

2.1.1 对两个hex文件特定地址范围进行合并

2.1.2 特定字符的自动填充

2.1.3 Command line命令行说明

2.2 “手动合并”两个hex文件

2.2.1特定字符的手动填充

结尾


优质博文推荐阅读(单击下方链接,即可跳转):

点击返回「《Autosar从入门到精通-实战篇》总目录」

点击返回「《Autosar_BSW高阶配置》总目录」

点击返回《嵌入式硬件/软件开发刷写/烧录文件》专栏

1 为什么要将Bootloader.hex和App.hex合并成一个hex文件?

我们经常需要将Bootloader程序Application应用程序合并到同一个hex文件中,这样可以简化整个软件/固件的刷写/升级过程

Bootloader是一个特殊的程序,其主要功能是用来引导应用程序的运行。在实际的应用中,我们经常需要对应用程序进行刷写/升级,而刷写/升级过程需要将新的应用程序下载到设备中。如果应用程序Bootloader分别存储在不同的文件中,那么在刷写/升级过程中就需要分别下载这两个文件,并且还需要确保这两个文件的版本是兼容的,否则可能会导致设备无法正常工作。

因此,将Bootloader应用程序合并到同一个文件中可以简化软件/固件刷写/升级的过程,减少用户的操作复杂度。在刷写/升级过程中,我们只需要下载一个文件,就可以完成整个软件/固件的刷写/升级。另外,在合并的过程中,我们可以使用一些特殊的技术,比如加密、校验和等,来保证软件/固件的安全性和完整性。

1.1 Bootloader和Application地址范围说明

当将Bootloader应用程序合并到同一个文件时,需要确定它们在文件中的地址范围。一般来说,Bootloader和应用程序需要存储在不同的地址范围内,以便在固件启动时正确加载它们。

下面是一个示例,假设Flash的总大小为256KB,其中Bootloader的大小为32KB,应用程序的大小为192KB,保留32KB用于其它数据。

Other Data

Application

Boootloaer

  • Bootloader的地址范围:0x00000000 - 0x00007FFF

在Flash中,Bootloader一般存储在起始地址处,通常是0x00000000开始的连续地址范围。在本示例中,它占用的地址范围是0x00000000 - 0x00007FFF,Bootloader的大小为32KB。

  • 应用程序的地址范围:0x00008000 - 0x0003FFFF

在Flash中,应用程序一般存储在Bootloader之后的地址范围内,通常是0x00008000开始的连续地址范围。在本示例中,它占用的地址范围是0x00008000 - 0x0003FFFF,应用程序的大小为192KB。

  • 其它数据的地址范围:0x00040000 - 0x0007FFFF

在Flash中,我们通常会保留一部分地址范围用于存储其它数据,比如配置信息、用户数据等等。在本示例中,我们保留了32KB的地址范围,用于存储其它数据。

正确的确定Bootloader和应用程序的地址范围是软件/固件设计中非常重要的一部分,它不仅关系到固件的安全性和可靠性,还关系到固件的性能和扩展性。

2 使用Vector HexView工具合并两个hex文件

工具版本Vector HexView V1.12.05 ,见图2-1.

图2-1

参考文档ReferenceManual_HexView.pdf

合并的hex文件之一:Bootloader.hex摘录

:2090000058595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F707172737475767760
:2090200078797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969740
:2090400098999A9B9C9D9E9FA0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B720
:20906000B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7C8C9CACBCCCDCECFD0D1D2D3D4D5D6D700
:20908000D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEFF0F1F2F3F4F5F6F7E0
:2090A000F8F9FAFBFCFDFEFF000102030405060708090A0B0C0D0E0F1011121314151617C0
:2090C00018191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F3031323334353637A0
:0990E00038393A3B3C3D3E3F406B
:00000001FF

合并的hex文件之一:Application.hex摘录

:2091000058595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F70717273747576775F
:2091200078797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F90919293949596973F
:2091400098999A9B9C9D9E9FA0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B71F
:20916000B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7FF
:20918000D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEFF0F1F2F3F4F5F6F7DF
:2091A000F8F9FAFBFCFDFEFF000102030405060708090A0B0C0D0E0F1011121314151617BF
:2091C00018191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F30313233343536379F
:0891E00038393A3B3C3D3E3FAB
:00000001FF

2.1 “自动合并”两个hex文件

如果你想成为制作批处理Bat脚本的高手,可研究专栏

《批处理BAT从入门到精通》总目录_培训教程持续更新中...icon-default.png?t=N2N8https://blog.csdn.net/qfmzhu/article/details/128812985

基于批处理Bat(如下图中的Merging_Two_hex_File.bat)调用HexView工具提供的Command line,通过该脚本来实现两个hex文件(Bootloader.hex和Application.hex)的合并。将该脚本集成至开发环境IDECodeWarriorS32K DSDavinciEB TresosETAS…)中,即可自动实现hex文件的合并。见图2-2。

图2-2

Merging_Two_hex_File.bat摘录:

@echo offRem Path to the executable exe of the Vector HexView tool on your PC
set "HexViewPath=D:\Merge\HexView\hexview.exe"Rem Input_hex_File1 indicates one of the merged source files and its path
set "Input_hex_File1=D:\Merge\Bootloader.hex"Rem Input_hex_File2 indicates one of the merged source files and its path
set "Input_hex_File2=D:\Merge\Application.hex"Rem Output_hex_File indicates the output hex file, and its path, after the merge
set "Output_hex_File=D:\Merge\Boot+App.hex"Rem Call the command line provided by the HexView tool and merge Input_hex_File1 and Input_hex_File2 to output a new Output_hex_File
%HexViewPath% /S /MT:%Input_hex_File1%+%Input_hex_File2% /XI:32 -o %Output_hex_File%

运行该批处理Merging_Two_hex_File.bat,即可得到合并后的Boot+App.hex文件

:2090000058595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F707172737475767760
:2090200078797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939495969740
:2090400098999A9B9C9D9E9FA0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B720
:20906000B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7C8C9CACBCCCDCECFD0D1D2D3D4D5D6D700
:20908000D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEFF0F1F2F3F4F5F6F7E0
:2090A000F8F9FAFBFCFDFEFF000102030405060708090A0B0C0D0E0F1011121314151617C0
:2090C00018191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F3031323334353637A0
:0990E00038393A3B3C3D3E3F406B
:2091000058595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F70717273747576775F
:2091200078797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F90919293949596973F
:2091400098999A9B9C9D9E9FA0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B71F
:20916000B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7FF
:20918000D8D9DADBDCDDDEDFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEFF0F1F2F3F4F5F6F7DF
:2091A000F8F9FAFBFCFDFEFF000102030405060708090A0B0C0D0E0F1011121314151617BF
:2091C00018191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F30313233343536379F
:0891E00038393A3B3C3D3E3FAB
:00000001FF

2.1.1 对两个hex文件特定地址范围进行合并

如何你想对两个hex文件特定地址范围进行合并,可将批处理Merging_Two_hex_File.bat最后一段改写如下,也能实现上述效果。

%HexViewPath% /S /MT:%Input_hex_File1%:0x9000-0x90E8+%Input_hex_File2%:0x9100-0x91E7 /XI:32 -o %Output_hex_File%

2.1.2 特定字符的自动填充

如何你想对合并后的hex文件进行自动填充,可在批处理Merging_Two_hex_File.bat最后追加一段:

Rem For a new Output_hex_File, fill in the characters
%HexViewPath% %Output_hex_File% /S /FA: /AF:0xFF /XI:32 -o %Output_hex_File%

运行该批处理Merging_Two_hex_File.bat,对比修改前后两个Boot+App.hex文件的差异,见图2-3。

图2-3

2.1.3 Command line命令行说明

/S :该选项用于抑制对GUI的任何输出,在无声模式下运行HexView。在执行了命令行选项中给出的所有命令后,HexView将被关闭。

/MT:file1[;offset][:range1][+file2][;offset][:range1] :一个或多个文件以透明模式合并到memory中(现有数据不被覆盖)。可选的offset将应用于被合并的文件的所有地址。

/XI[:reclinelen[:rectype]]:以Intel-HEX格式导出。Reclinelen表示Data段的长度。

/FA :创建一个单一的区域文件(填写所有)。这个选项可以用来创建一个单块文件。在这种情况下,HexView将使用第一个区块的起始地址和最后一个区块的结束地址。

/Af:xx: : 指定填充字符,但xx可以指定为十进制(无后缀)、十六进制值(0x-后缀)或二进制(b-后缀)。

2.2 “手动合并”两个hex文件

HexView工具打开Bootloader.hex文件,见图2-4。

图2-4

接着在菜单栏中依此选择File – >Merge,见图2-5。

图2-5

在弹出的Select file for merge operation对话框中,选择Application.hex文件,接着单击打开,见图2-6。

图2-6

紧接着在弹出的Merge data file to current document对话框中,选择Application.hex文件中需要合并的地址范围(如果你是所有的地址范围都合并,通常默认,无需改动),接着单击Ok,见图2-7。

图2-7

两个hex文件合并后的效果,见图2-8。

图2-8

Save as另存该文件,并给合并后的hex文件命名Boot+App.hex。至此完成了“手动合并”两个hex文件,见图2-9。

图2-9

2.2.1特定字符的手动填充

接着在菜单栏中依此选择Edit – > Fill block data,,见图2-10。

图2-10

在弹出的Fill block data对话框中,单击Get “Fill all region”,得到需要填充的地址范围,接着在Fill with a record中填写填充值,见图2-11。

图2-11

至此完成特定字符的手动填充,保存该hex文件即可,见图2-12。

图2-12

结尾

获取更多“汽车电子资讯”和“工具链使用”,

请关注CSDN博客“汽车电子助手”,做您的好助手。


http://www.ppmy.cn/news/37970.html

相关文章

2023美赛春季赛D题思路数据代码论文分享

文章目录赛题思路赛题详情参赛建议(个人见解)选择队友及任务分配问题(重要程度:5星)2023美赛春季赛D题思路数据代码【最新】赛题思路 (赛题出来以后第一时间在CSDN分享) 最新进度在文章最下方卡片,加入获取…

【JAVAEE】手把手教学多线程,包教包会~

线程与进程为了实现多个任务并发执行的效果,人们引进了进程。何谓进程?我们电脑上跑起来的每个程序都是进程。每一个进程启动,系统会为其分配内存空间以及在文件描述符表上有所记录等。进程是操作系统进行资源分配的最小单位,这意…

python初级 学习内容分享

课程内容包含 基础语法 和 面向对象编程 基础语法(视频课程目录) 1开发环境安装介绍 01-计算机组成 02-Python简介 03-课程介绍. 04-解释器的作用和分类. 05-Python解释器的下载和安装. 06-PyCharm的作用 07-下载和安装PyCharm. 08-新建项目 …

Linux快速启动SpringBoot工程

个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~ 个人主页:.29.的博客 学习社区:进去逛一逛~ Linux下快速启动SpringBoot工程一、查看JDK版本…

交叉编译器的介绍

一.介绍 1.1何谓交叉编译器 交叉编译通俗地讲就是在一种平台上编译出能运行在体系结构不同的另一种平台上。这种方法在异平台移植和嵌入式开发时用得非常普遍,相对与交叉编译,我们平常做的编译就叫本地编译,也就是在当前平台编译&#xff0…

【python实操】如何改善你的程序,让你的程序更快执行?

作者:20岁爱吃必胜客(坤制作人),近十年开发经验, 跨域学习者,目前于海外某世界知名高校就读计算机相关专业。荣誉:阿里云博客专家认证、腾讯开发者社区优质创作者,在CTF省赛校赛多次取得好成绩。…

stm32f10x系列芯片信息

stm32f10x系列芯片信息 STM32F103微控制器采用Cortex-M3内核,CPU最高速度达72 MHz。该产品系列具有16KB ~ 1MB Flash、多种控制外设、USB全速接口和CAN。 引脚及其容量大小关系 Flash memory size / RAM size(byte):flash内存大…

美国Linux服务器系统()与[ ]括号的作用

美国Linux服务器系统在使用过程中会很多需要使用到括号的时候,而不同括号在美国Linux服务器系统中会有不同的作用,本文小编就来介绍下美国Linux服务器系统中括号( )和[ ]括号的作用。 一、括号( )的作用 1、单小括号 ( ) 1)命令组 括号中的命令将会新…