当前位置: 首页 > article >正文

HEX文件格式详解

文章目录

    • 介绍
    • Record格式
    • 数据Record
    • 扩展线性地址Record
    • 扩展段地址Record
    • 起始线性地址Record
    • 文件结尾Record

介绍

HEX文件是一个ASCLL文本文件,其中的每一行都包含一条HEX记录(record),这些记录由表示机器码或常量数据的十六进制数字组成。

Record格式

HEX文件由任意条的记录(record)组成,而每条记录由5个字段组成,并按下方格式排列:

:llaaaatt[dd...]cc
  • :是起始字段,代表每条record的开始
  • ll是长度字段,代表数据字段[dd...]中数据的长度
  • aaaa是地址字段,代表后方数据域中数据的存放地址,一般是偏移地址
  • tt是类型字段,代表record的类型,可能是下方中的一种
    • 00 - 数据record
    • 01 - 文件结尾record
    • 02 - 扩展段地址record(extended segment address record)
    • 04 - 扩展线性地址record(extended linear address record)
    • 05 - 起始线性地址record(start linear address record)
  • [dd...]是数据字段,一个dd的长度为1个字节,一条record中包含0个或多个dd,具体长度由ll长度字段指定
  • cc是校验字段,计算方式为除去record中的:cc的所有字节相加的结果对256取模得到sum,然后将sum按位取反再加1后得到cc,即cc是sum的补码,这样验证一条record是否正确时,只需要检查record中除:所以字节相加的结果是否为0即可

数据Record

:10246200464C5549442050524F46494C4500464C33

对应格式如下:
在这里插入图片描述

扩展线性地址Record

Extended linear address record也被叫做32-bit address record, record中包含32bits地址的高16位,如下所示:

:02000004FFFFFC

其中:

  • 02代表数据的长度
  • 0000是地址字段,对于扩展线性地址Record来说,这个字段总是0000
  • 04代表类型
  • FFFF是32bits地址的高16位
  • FC是校验码,NOT((0x02+0x00+0x00+0x04+0xFF+0xFF) mod 256) + 1 = 0xFC

当读取扩展线性地址Record时,存储在数据字段中的扩展线性地址被保存,并应用于从HEX文件中读取的后续Record,扩展线性地址在被另一个扩展线性地址Record更改之前保持有效。

数据Record的绝对内存地址是通过将记录中的地址字段(低16bits)添加到扩展线性地址Record数据字段(高16bits)中来获得的,下面的例子说明了这个过程:

数据Record的地址字段						        2462
扩展线性地址Record的数据字段 				    FFFF
                                            --------
数据Record中数据存放的绝对地址                FFFF2462

扩展段地址Record

用法与扩展线性地址Record一致,只不过是偏移位置不一样,例如:

:020000021200EA

计算绝对地址:

Address from the data record's address field     2462
Extended segment address record data field      1200
                                             --------
Absolute memory address                      00014462

起始线性地址Record

在GCC编译器中,这条Record的数据用于指定Reset_Handler的地址,而在MDK编译器中,用于指定__main的地址,这条Record在用于使用HEX下载Flash时用处不大,例如:

:04000005000000CD2A

分析可知,地址0x000000CD为程序中Reset_Handler__main的地址

文件结尾Record

:00000001FF

用于HEX文件的结束,固定就是这一行


http://www.kler.cn/a/450111.html

相关文章:

  • 对文件内的文件名生成目录,方便查阅
  • web-密码安全口令
  • C/C++基础错题归纳
  • unity Toggle制作滑动开关
  • docker 容器的基本使用
  • Day13 用Excel表体验梯度下降法
  • flask-admin modelview 中重写get_query函数
  • oracle怎样使用logmnr恢复误删除的数据
  • 优化 HTTP 接口请求:缓存策略与实现方法
  • Leetcode1705:吃苹果的最大数目
  • Jetson xavier 刷机安装教程
  • new 分配空间;引用
  • 电气设计 | 低压接地系统:TN-C 、TN-S、TN-C-S、TT适用哪些场所?
  • vue中proxy代理配置(测试二)
  • 大模型面试快问快答
  • 设计模式--抽象工厂模式【创建型模式】
  • 利用Spring Cloud Gateway Predicate优化微服务路由策略
  • 【wordpress】建立数据库连接时出错,您看到此页面,则表示您在 wp-config.php 文件中定义的用户名和密码信息不正确,或是……
  • QT——day1
  • 畅捷通-条件竞争
  • 前端开发 之 12个鼠标交互特效上【附完整源码】
  • 120页PPT讲解ChatGPT如何与财务数字化转型的业财融合
  • Scala_【2】变量和数据类型
  • 批量生成二维码,助力数字化管理-Excel易用宝
  • Debezium日常分享系列之:Debezium 3.0.5.Final发布
  • 腾讯云云开发 Copilot具有以下优势