CN110597770A - 一种Hex文件填充方法、应用和计算机及存储介质 - Google Patents
一种Hex文件填充方法、应用和计算机及存储介质 Download PDFInfo
- Publication number
- CN110597770A CN110597770A CN201910823716.4A CN201910823716A CN110597770A CN 110597770 A CN110597770 A CN 110597770A CN 201910823716 A CN201910823716 A CN 201910823716A CN 110597770 A CN110597770 A CN 110597770A
- Authority
- CN
- China
- Prior art keywords
- record
- address
- file
- ending
- bytes
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/16—File or folder operations, e.g. details of user interfaces specifically adapted to file systems
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Human Computer Interaction (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明属于嵌入式系统文件填充方法,提供一种Hex文件填充方法、应用和计算机及存储介质,包括:读取Hex文件的第一个Record,从中获取基地址,作为Segement 1的基地址;依次读取后续的每一个Record,若Record的数据类型为0x04,从中获取基地址,若数据类型为0x00,读取该Record的起始地址和长度,得到该Record的结束地址,判断相邻Record地址是否连续,若不连续则产生一个新的Segement;如此重复将Hex文件划分为若干个Segement;再在相邻两个Segement间填充字节0xFF。上述方法在汽车变速器中应用减少刷写中发生错误的可能性。上述方法也可以在计算机和存储介质中实现。本发明解决了在对Hex文件进行下载或调试时,由于文件中有不连续的地址段,无法保证程序下载时的一致性和准确性的问题。
Description
技术领域
本发明属于嵌入式系统文件填充方法,具体涉及一种Hex文件填充方法、应用和计算机及存储介质。
背景技术
Hex文件是美国英特尔公司为其生产的MCU创建的一种文件格式,该文件中记录了MCU内部PROM运行所需的程序和数据,该格式的文件目前已是嵌入式系统行业普遍采用的一种文件形式。开发人员在嵌入式开发环境下开发的代码通过编译和链接等一系列步骤后最终会生成Hex文件,将该Hex文件下载到MCU内部就可实现运行。
在进行程序下载或调试时,需要对Hex文件的内容进行解析,即查看文件中所定义的地址段和内容长度,当文件中有不连续的地址段就无法保证程序下载时的一致性和准确性。
发明内容
本发明的主要目的是在于解决在对Hex文件进行下载或调试时,由于文件中有不连续的地址段,无法保证程序下载时的一致性和准确性的问题,提供一种Hex文件填充方法、应用和计算机及存储介质。
为实现上述目的,本发明提供如下技术方案:
一种Hex文件的填充方法,其特殊之处在于,包括以下步骤:
步骤1,读取Hex文件中数据类型为0x04的第一个Record,从中获取基地址,记为Segement 1的基地址;
步骤2,依次读取后续的每一个Record,判断当前Record的数据类型;
若当前Record的数据类型为0x04,则从中获取基地址;
若当前Record的数据类型为0x00,则读取该Record的偏移地址和长度,并根据最近一次获取的基地址,计算得到该Record的起始地址和结束地址;并判断相邻两个数据类型为0x00的Record的地址是否连续,若前一个Record的结束地址与后一个Record的起始地址连续,则将这两个Record均归属于当前的Segement i;若不连续,则当前Segement i结束,产生一个新的Segement,记为Segement i+1;i依次取1,2,3……n-1;
步骤3,重复步骤2,直至读取到Record的数据类型为0x01或0x05,则Hex文件读取结束,最后一个Segement即Segement n;
步骤4,在相邻两个Segement间填充字节0xFF或0x00。
进一步地,所述步骤3和步骤4之间还包括Record填充,逐个读取Record,获得每个Record的长度,若Record的长度小于16个字节,则填充字节0xFF或0x00至16个字节;若等于16个字节,则继续读取下一个Record。
进一步地,所述步骤3和步骤4之间还包括Record填充,设定预填充的文件起始地址和文件结束地址,从文件起始地址处开始逐个读取Record,获得每个Record的结束地址;
若Record的结束地址小于文件结束地址,则判断该Record的长度是否为16个字节,若小于16个字节,则填充字节0xFF或0x00至16个字节,若等于16个字节,则读取下一个Record;
若Record结束地址大于等于文件结束地址,则结束填充。
通过上述两种Record填充方式,使每一个Record的长度均为16个字节;另外,填充时可以逐个填充Record;也可以预设地址段,通过判断Record结束地址是否在地址段范围内,根据需求选择性的对相应地址段的Record进行字节填充。
一种计算机可读存储介质,其上存储有计算机程序,其特殊之处在于,该程序被处理器执行时实现上述方法的步骤。
一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特殊之处在于,所述处理器执行所述程序时实现上述方法的步骤。
上述Hex文件的填充方法在汽车变速器中的应用。
与现有技术相比,本发明的有益效果是:
1.本发明Hex文件的填充方法,先对Hex文件进行解析,依据Record的地址连续性将Hex文件划分为n个Segement,在各Segement之间进行字节填充。程序下载过程时将依次传递数据,每次传递的字节典型值是16个字节的倍数,通过在地址不连续的相邻Segement间进行字节填充,避免影响刷写的连续性、准确性和一致性。
2.本发明逐个读取Record,判断每个Record长度是否为16个字节,对长度小于16个字节的进行填充,使所有Record的长度保持一致。
3.本发明通过预设文件的起始地址和文件的结束地址设定预填充的Record范围,能够根据需要对指定范围内的Record进行字节填充,使该范围内的Record的长度保持一致。
4.本发明的计算机可读存储介质上存储有上述对Hex文件的填充方法,能够用于各种Hex文件刷写时的解析。
5.本发明的计算机设备,其处理器能够执行上述对Hex文件的填充方法,可以直接将该计算机设备用于Hex文件填充。
6.本发明的Hex文件的填充方法在汽车变速器中应用,在将Hex文件向变速器刷写前,先根据需求对Hex文件进行填充处理,减少刷写中发生错误的可能性,保证刷写的连续性。
附图说明
图1为本发明Hex文件的填充方法的流程示意图;
图2为本发明实施例二中Record填充的流程示意图;
图3为本发明实施例三中Record填充的流程示意图。
具体实施方式
下面将结合本发明的实施例和附图,对本发明的技术方案进行清楚、完整地描述,显然,所描述的实施例并非对本发明的限制。
将Hex文件通过文本编辑器打开,文件中的内容均以行的形式依次进行排列,同时会出现相邻两个Record地址不连续,以及各Record的长度不一致,造成在下载时容易发生错误。基于上述原因,对Hex文件进行内容解析,读取Hex文件中的每个Record,根据Record的数据类型执行不同步骤,将Hex文件划分为若干个Segement,然后再在地址不连续的Segement之间进行字节填充,从而保证程序下载时的连续性和一致性。
实施例一
如图1,对将刷写于汽车变速器的一种Hex文件进行填充,其填充方法包括以下步骤:
步骤1,读取Hex文件中数据类型为0x04的第一个Record,从中获取基地址,记为Segement 1的基地址;
步骤2,依次读取后续的每一个Record,判断当前Record的数据类型;
若当前Record的数据类型为0x04,则从中获取基地址;
若当前Record的数据类型为0x00,则读取该Record的偏移地址和长度,并根据最近一次获取的基地址,计算得到该Record的起始地址和结束地址;并判断相邻两个数据类型为0x00的Record的地址是否连续,若前一个Record的结束地址与后一个Record的起始地址连续,则将这两个Record均归属于当前的Segement i;若不连续,则当前Segement i结束,产生一个新的Segement,记为Segement i+1;i依次取1,2,3……n-1;
步骤3,重复步骤2,直至读取到Record的数据类型为0x01或0x05,则Hex文件读取结束,最后一个Segement即Segement n;
步骤4,在相邻两个Segement间填充字节0xFF或0x00。
实施例二
如图1和2,对将刷写于汽车变速器的一种Hex文件进行填充,其填充方法包括以下步骤:
步骤1,读取Hex文件中数据类型为0x04的第一个Record,从中获取基地址,记为Segement 1的基地址;
步骤2,依次读取后续的每一个Record,判断当前Record的数据类型;
若当前Record的数据类型为0x04,则从中获取基地址;
若当前Record的数据类型为0x00,则读取该Record的偏移地址和长度,并根据最近一次获取的基地址,计算得到该Record的起始地址和结束地址;并判断相邻两个数据类型为0x00的Record的地址是否连续,若前一个Record的结束地址与后一个Record的起始地址连续,则将这两个Record均归属于当前的Segement i;若不连续,则当前Segement i结束,产生一个新的Segement,记为Segement i+1;i依次取1,2,3……n-1;
步骤3,重复步骤2,直至读取到Record的数据类型为0x01或0x05,则Hex文件读取结束,最后一个Segement即Segement n;
步骤4,在相邻两个Segement间填充字节0xFF;
步骤5,逐个读取Record,获得每个Record的长度,若Record的长度小于16个字节,则填充字节0xFF至16个字节;若等于16个字节,则继续读取下一个Record。
实施例三
如图1和3,对将刷写于汽车变速器的一种Hex文件进行填充,其填充方法包括以下步骤:
步骤1,读取Hex文件中数据类型为0x04的第一个Record,从中获取基地址,记为Segement 1的基地址;
步骤2,依次读取后续的每一个Record,判断当前Record的数据类型;
若当前Record的数据类型为0x04,则从中获取基地址;
若当前Record的数据类型为0x00,则读取该Record的偏移地址和长度,并根据最近一次获取的基地址,计算得到该Record的起始地址和结束地址;并判断相邻两个数据类型为0x00的Record的地址是否连续,若前一个Record的结束地址与后一个Record的起始地址连续,则将这两个Record均归属于当前的Segement i;若不连续,则当前Segement i结束,产生一个新的Segement,记为Segement i+1;i依次取1,2,3……n-1;
步骤3,重复步骤2,直至读取到Record的数据类型为0x01或0x05,则Hex文件读取结束,最后一个Segement即Segement n;
步骤4,在相邻两个Segement间填充字节0x00;
步骤5,设定预填充的文件起始地址和文件结束地址,从文件起始地址处开始逐个读取Record,获得每个Record的结束地址,并与文件结束地址相比较;
若Record的结束地址小于文件结束地址,则判断该Record的长度是否为16个字节,若小于16个字节,则填充字节0x00至16个字节,若等于16个字节,则读取下一个Record;
若Record结束地址大于等于文件结束地址,则结束填充。
上述实施例一至实施例三中:(1)均是对将刷写于汽车变速器的一种Hex文件进行填充,但本发明中的Hex文件解析直至最后的填充可以用于多种场景,只要是使用Hex文件,需要对Hex文件进行解析和填充均可,如应用于AMT和CVT等,方法与上述类似不再重复;(2)上述实施例中Record填充均为步骤5,但Record填充也可以在步骤4之前,对Hex文件进行解析后,Hex文件被划分为n个Segement,此时可以先在相邻Segement间填充字节,也可以先进行Record填充。
下面以一段Hex文件为例,进一步对上述填充方法进行说明。
表1某Hex文件的Record列表
如表1所示是某Hex文件中,由于全部Record内容过多,仅具体展示了其中部分Record内容。根据前述的具体解析方法,逐一读取Record,根据Record的数据类型以及地址是否连续,将Hex文件划分为5个Segement,其中当数据类型为0x05,代表为Hex文件的起始执行地址,这种数据类型会出现在Hex文件结尾,遇到该类型则视为文件结束。以第5448行和第5449行为例,第5448行的数据类型为0x00,结束地址为0x800254FF,第5449行的数据类型为0x00,起始地址为0x80026000,地址不连续,因此作为Segement2和Segement 3之间的划分出。整个Hex文件划分后的各Segement地址情况如表2。
表2Hex文件解析结果表
Segement序号 | 起始地址 | 结束地址 | 长度/字节 |
Segement1 | 0x80010000 | 0x8002533F | 86848 |
Segement2 | 0x80025400 | 0x800254FF | 256 |
Segement3 | 0x80026000 | 0x80051CAF | 179376 |
Segement4 | 0x803C0000 | 0x803C01E7 | 488 |
Segement5 | 0x803D0000 | 0x803FFFFF | 196608 |
从表2可知,各Segement间的地址并不连续,因此,需要在各Segement间进行字节填充。
本发明对Hex文件进行逐行解析,将Hex划分为若干Segement,再根据需要在Segement之间以及指定的Record内进行字节填充,确保下载时的一致性和准确性。
另外,上述的Hex文件填充方法还可以用在存储介质和计算机中,如一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述方法的步骤;或一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行所述程序时实现上述方法的步骤。
对上述文中的英文缩写进行解释说明:
Record:指Hex文件中每行记录的概念。
Segement:对Hex文件解析的结果,是本发明中为解析划分Hex文件而做的定义。
AMT:自动变速箱。
CVT:无级变速器。
以上所述仅为本发明的实施例,并非对本发明保护范围的限制,凡是利用本发明说明书及附图内容所作的等效结构变换,或直接或间接运用在其他相关的技术领域,均包括在本发明的专利保护范围内。
Claims (6)
1.一种Hex文件填充方法,其特征在于,包括以下步骤:
步骤1,读取Hex文件中数据类型为0x04的第一个Record,从中获取基地址,记为Segement 1的基地址;
步骤2,依次读取后续的每一个Record,判断当前Record的数据类型;
若当前Record的数据类型为0x04,则从中获取基地址;
若当前Record的数据类型为0x00,则读取该Record的偏移地址和长度,并根据最近一次获取的基地址,计算得到该Record的起始地址和结束地址;并判断相邻两个数据类型为0x00的Record的地址是否连续,若前一个Record的结束地址与后一个Record的起始地址连续,则将这两个Record均归属于当前的Segement i;若不连续,则当前Segement i结束,产生一个新的Segement,记为Segement i+1;i依次取1,2,3……n-1;
步骤3,重复步骤2,直至读取到Record的数据类型为0x01或0x05,则Hex文件读取结束,最后一个Segement即Segement n;
步骤4,在相邻两个Segement间填充字节0xFF或0x00。
2.如权利要求1所述一种Hex文件填充方法,其特征在于:所述步骤3和步骤4之间,或步骤4之后,还包括Record填充;逐个读取Record,获得每个Record的长度,若Record的长度小于16个字节,则填充字节0xFF或0x00至16个字节;若等于16个字节,则继续读取下一个Record。
3.如权利要求1所述一种Hex文件填充方法,其特征在于:所述步骤3和步骤4之间,或步骤4之后,还包括Record填充;设定预填充的文件起始地址和文件结束地址,从文件起始地址处开始逐个读取Record,获得每个Record的结束地址,并与文件结束地址相比较;
若Record的结束地址小于文件结束地址,则判断该Record的长度是否为16个字节,若小于16个字节,则填充字节0xFF或0x00至16个字节,若等于16个字节,则读取下一个Record;
若Record结束地址大于等于文件结束地址,则结束填充。
4.一种计算机可读存储介质,其上存储有计算机程序,其特征在于:该程序被处理器执行时实现权利要求1至权利要求3任一所述方法的步骤。
5.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于:所述处理器执行所述程序时实现权利要求1至权利要求3任一所述方法的步骤。
6.权利要求1至3任一项所述Hex文件的填充方法在汽车变速器中的应用。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910823716.4A CN110597770A (zh) | 2019-09-02 | 2019-09-02 | 一种Hex文件填充方法、应用和计算机及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910823716.4A CN110597770A (zh) | 2019-09-02 | 2019-09-02 | 一种Hex文件填充方法、应用和计算机及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN110597770A true CN110597770A (zh) | 2019-12-20 |
Family
ID=68856999
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910823716.4A Pending CN110597770A (zh) | 2019-09-02 | 2019-09-02 | 一种Hex文件填充方法、应用和计算机及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110597770A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112737831A (zh) * | 2020-12-25 | 2021-04-30 | 中国第一汽车股份有限公司 | 一种固件升级包处理方法、装置、电子设备和存储介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20130044775A (ko) * | 2011-10-24 | 2013-05-03 | 주식회사 현대케피코 | 임베디드 소프트웨어의 실행 파일 간 유효성 검사 장치 및 그 방법 |
CN108491224A (zh) * | 2018-07-09 | 2018-09-04 | 深圳市路畅科技股份有限公司 | 一种车载软件更新方法及系统 |
-
2019
- 2019-09-02 CN CN201910823716.4A patent/CN110597770A/zh active Pending
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20130044775A (ko) * | 2011-10-24 | 2013-05-03 | 주식회사 현대케피코 | 임베디드 소프트웨어의 실행 파일 간 유효성 검사 장치 및 그 방법 |
CN108491224A (zh) * | 2018-07-09 | 2018-09-04 | 深圳市路畅科技股份有限公司 | 一种车载软件更新方法及系统 |
Non-Patent Citations (1)
Title |
---|
徐旭等: "一种英特尔Hex文件的解析和填充方法", 《汽车实用技术》 * |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112737831A (zh) * | 2020-12-25 | 2021-04-30 | 中国第一汽车股份有限公司 | 一种固件升级包处理方法、装置、电子设备和存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109670053B (zh) | 数据对象映射方法、装置、设备和计算机可读存储介质 | |
CN108399130A (zh) | 自动生成测试案例的方法、装置、设备及可读存储介质 | |
CN110580147A (zh) | 一种应用程序的开发方法和装置 | |
WO2013109555A1 (en) | Managing script file dependencies and load times | |
CN110493342B (zh) | 文件传输方法、装置、电子设备及可读存储介质 | |
CN106933887B (zh) | 一种数据可视化方法及装置 | |
CN104049974A (zh) | 控件动态组装方法和系统 | |
Ullman | PHP for the world wide web: visual quickstart guide | |
CN113312322B (zh) | Stdf文件的读写方法、介质、设备及装置 | |
CN111639026A (zh) | 接口测试方法、装置和系统 | |
CN110347390B (zh) | 一种快速生成web页面的方法、存储介质、设备及系统 | |
CN109299352B (zh) | 搜索引擎中网站数据的更新方法、装置和搜索引擎 | |
CN109426496B (zh) | 程序日志写入文件的方法、存储介质、电子设备及系统 | |
CN110597770A (zh) | 一种Hex文件填充方法、应用和计算机及存储介质 | |
CN111177119A (zh) | 基于数据库的全量数据比对方法、装置、设备及存储介质 | |
CN108694049B (zh) | 一种更新软件的方法和设备 | |
CN107544811B (zh) | IOS平台隐藏dylib文件的方法、存储介质、电子设备及系统 | |
CN111124894A (zh) | 代码覆盖率的处理方法、装置和计算机设备 | |
CN108073709B (zh) | 一种数据记录的操作方法、装置、设备和存储介质 | |
US9436587B2 (en) | Test context generation | |
CN111078529A (zh) | 客户端写入模块测试方法、装置、电子设备 | |
CN105389236A (zh) | 一种基于fio的hba卡自动化测试方法 | |
CN111325007B (zh) | 一种pptx文件的批注解析方法及终端 | |
CN114416674A (zh) | 报表生成方法及装置 | |
CN116382775B (zh) | 基于Hbuilderx插件的多平台程序包生成方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20191220 |
|
RJ01 | Rejection of invention patent application after publication |