hex文件格式学习记录

2023-11-18

.hex文件是什么

它是由一行行符合Intel HEX 文件格式的文本所构成的ASCII 文本文件。每一行包含一 个 HEX 记录 ,由对应机器语言码和/或常量数据的十六进制编码数字组成。Hex文件通常用于传输将被存于ROM 或者EPROM 中的程序和数 据。大多数EPROM 编程器或模拟器使用Intel HEX 文件。Hex文件是可以烧写到单片机中,被单片机执行的一种文件格式,生成Hex文件的方式由很多种,可以通过不同的编译器将C程序或者汇编程序编译生成hex。

.hex文件的数据结构

Hex文件的记录格式如下:
Hex文件的记录格式
Intel HEX 由任意数量的十六进制记录组成。每个记录包含5个域,每一组字母 对应一个不同的域,每一个字母对应一个十六进制编码的数字。每一个域由至少两个十六进制编码数字组成,它们构成一个字节。

  • :(冒号)每个Intel HEX 记录都由冒号开头;
  • LL 是数据长度域, 它代表记录当中数据字节 (D…D) 的数量;
  • aaaa 是地址域, 它代表记录当中数据的起始地址;
  • TT是代表HEX 记录类型的域 , 它可能是以下数据当中的一 个:
    00:数据记录(Data Record),用来记录数据,HEX文件的大部分记录都是数据记录。
    01:文件结束记录(End of FileRecord),用来标识文件结束,放在文件的最后,标识HEX文件的结尾。
    02:扩展段地址记录(ExtendedSegment Address Record),用来标识扩展段地址的记录,扩展段地址记录(HEX86),它包含4~19位数据地址段。由于普通的Intel的HEX记录文件只能记录64K的地址范围,所以大于64K的地址数据要靠扩展段地址记录。
    03:开始段地址记录(Start Segment Address Record)
    04:扩展线性地址记录(Extended Linear Address Record),用来标识扩展线性地址的记录,扩展线性地址记录也叫32位地址记录或者HEX386记录,这些记录包含了数据在存储器里真实地址的高16位。 当一个扩展线性地址记录被读取后,将一直保持有效,直到它被另一个扩展地址记录改变。因为它记录的是后面数据在存储器里存放的真实起始地址,所以它的起始地址偏移量(Load offset)总是0000。
    05:开始线性地址记录(Start Linear Address Record),32位机(80386或更高的CPU)的EIP寄存器里存放的地址(main函数的入口地址)。
  • D…D是数据域,它代表一个字节的数据。一个记录可以有许多数据字节。记录当中数据字节的数量必须和数据长度域(LL)中指定的数字相符。
  • CC是校验和域,它表示这个记录的校验和。校验和的计算是通过将记录当中所有十六进制编码数字对的值相加,以256为模进行以下补足。

(CheckSum: two’s complement of length,address,record type and data fields module 256.)

记录格式可表示为:“[1字节长度][2字节地址][1字节记录类型][n字节数据段][1字节校验和]

关于位、字节、二进制、十六进制:
二进制,是计算机为了快速方便而采用的一种记数方式,十六进制也是一种常用的记数方式。位(bit)就是一个二进制位,即可表示0和1,而字节(Byte)是计算机更通用的计算单位,1字节等于8位,可以代表256个数字(在编程中可以通过这些数字作为判断),int类型一般为4字节,即32位。一个十六进制数,如0xf,代表16个数字,2的4次方,即4位,所以两个十六进制数如0xff就是一个字节。

按照记录类型具体分析

  1. 数据记录”00”
    Intel HEX文件由任意数量以回车换行符结束的数据记录组成,数据记录外观如下:
    :10246200464C5549442050524F46494C4500464C33
    其中,10 是这个记录当中数据字节的数量,即0x10 ;2462 是数据将被下载 到存储器当中的地址,即0x2462;00 是记录类型(数据记录),即0x00;464C…464C是数据,分别代表0x46,0x4C…注意hex中的数据域是小端序的,即按照先低位字节后高位字节的方式记录的;33 是这个记录的校验和,即0x33;计算方法如下:
    256D-(10H+24H+62H+00H+46H+4CH+55H+49H+44H+20H+50H+52H+4FH+46H+49H+4CH+45H+00H+46H+4CH)%256D=33H。

各种进制数的后缀字母分别为:
B :二进制数。
Q :八进制数。
D :十进制数。
H :十六进制数。
关于%是取余和取模:
在JAVA、C、C++里,%是取余运算,英文remainder;
在Python里,%号是取模运算,英文modulus;
取余运算的除法是向零舍入,取模运算的除法是向小值舍入;
取余运算结果的符号与被除数相同,取模运算结果的符号与除数相同。

  1. 文件结束(EOF)”01”
    Intel HEX文件必须以文件结束(EOF)记录结束这个记录的记录类的值必须是01.EOF记录外观总是如下:
    :00000001FF
    其中,00 是记录当中数据字节的数量;
    0000 是数据被下载到存储器当中的地址,在文件结束记录当中地址是没有意义、被忽略的。0000h 是典型的地址;
    01 是记录类型 01(文件结束记录);
    FF 是这个记录的校验和,计算方法如下: 256D-(00H+00H+00H+01H)=FFH。
  2. 扩展线性地址记录(HEX386) ”04”
    由于每行标识数据地址的只有2Byte,所以最大只能到64K,为了可以保存高地址的数据,就有了Extended Linear AddressRecord。如果这行的数据类型是0x04,那么,这行的数据就是随后数据的基地址。扩展线性地址记录也叫作32位地址记录或HEX386记录,这些记录含数据的高16位扩展线性地址记录总是有两个数据字节,外观如下:
    :02000004FFFFFC
    其中,02 是这个记录当中数据字节的数量;
    0000 是地址域,对于扩展线性地址记录,这个域总是0000;
    04 是记录类型04( 扩展线性地址记录);
    FC 是这个记录的校验和, 计算如下: 256D-(02H+00H+00H+04H+FFH+FFH)/256D=FFH。

当一个扩展线性地址记录被读取,存储于数据域的扩展线性地址被保存,它被用于从 Intel HEX 文件读取来的随后的记录。线性地址保持有效,直到它被另外一个扩展地址记录所改变。通过把记录当中的地址域与被移位的来自扩展线性地址记录的地址数据相加获得数据记录的绝对存储器地址。

以下的例子演示了这个过 程:

:0200000480007A //数据记录的绝对存储器地址高16位为0x8000

:100000001D000A00000000000000000000000000C9

:100010000000000085F170706F0104005D00BD00FC

第一行,是扩展线性地址记录,里面的数据、也就是基地址是0x8000,第二行是数据记录,里面的地址值是0x0000。那么数据1D000A00000000000000000000000000(共16个字节)要写入FLASH中的地址为 (0x00008000<< 16)| 0x0000,也就是写入FLASH的0x80000000这个地址;第三行的数据写入地址为0x80000010。当一个HEX文件的数据超过64k的时候,文件中就会出现多个扩展线性地址记录。

左移运算符(<<):
将一个运算对象的各二进制位全部左移若干位(左边的二进制位丢弃,右边补0)。
例:a = a << 2 将a的二进制位左移2位,右补0,
左移1位后a = a * 2;
若左移时舍弃的高位不包含1,则每左移一位,相当于该数乘以2。

按位或运算符(|):
参加运算的两个对象,按二进制位进行“或”运算。
运算规则:0|0=0; 0|1=1; 1|0=1; 1|1=1;
即 :参加运算的两个对象只要有一个为1,其值为1。
例如:3|5 即 0000 0011 | 0000 0101 = 0000 0111 因此,3|5的值得7。 
另,负数按补码形式参加按位或运算。
“或运算”特殊作用:
常用来对一个数据的某些位置1。
方法:找到一个数,对应X要置1的位,该数的对应位为1,其余位为零。此数与X相或可使X中的某些位置1。
例:将X=10100000的低4位置1 ,用 X | 0000 1111 = 1010 1111即可得到。

  1. 扩展段地址记录(HEX86)“02“
    扩展段地址记录也叫HEX86 记录 , 它包括4-19 位数据地址段。扩展段地址记总是有两个数 据字节 , 外观如下:
    :020000021200EA
    其中,02 是记录当中数据字节的数量;
    0000 是地址域。对于扩展段地址记录,这个域总是0000;
    02 是记录类型 02( 扩展段地址记录);
    1200 是地址段;
    EA 是这个记录的校验和。

当一个扩展段地址记录被读取,存储于数据域的扩展段地址被保存, 它被应用于 从 Intel HEX 文件读取来的随后的记录。段地址保持有效, 直到它被另外一 个扩展地址记录所改变。通过把记录当中的地址域与被移位的来自扩展段地址记录的地址数据相加获得数据记录的绝对存储器地址。

以下的例子演示了这个过程:

来自数据记录地址域的地址 2462
扩展段地址记录数据域    +1200
                                         ---------
绝对存储器地址           00014462


2018年12月29日15:17:45

Mermaid

编译连接示意:

编译
链接
打包
编译
打包
链接
.c/.h源文件
.o二进制文件
.hex烧录文件
.a压缩文件
.c/.h更新源文件
.o二进制文件

项目相关需求:

寻址
替换
.map地址文件
.hex烧录文件
更新数据

2018年12月29日15:20:33

Flowchart

具体流程细节

Created with Raphaël 2.2.0 开始 n=0 读取.map文件中待替换变量在 pflash中的起始地址和字节数, 记作aa和s 获取下一个行数:n=n+1 读取.hex文件中第n行的地址域, 记作an 搜索替换的起始行数: an<=aa<an+32? 计算替换变量所占行数: l=s/32向上取整; 令i=n;a(i)=an+32*(i-n) 判断变量是否多跨一行: an+32*l<aa+s? l=l+1 从第i行数据域的aa-a(i)字节后开始替换; 替换完成后重算该行的校验和; 判断循环是否继续: i+1<n+l? 获取下一行行数:i=i+1; 从第i行数据域开始替换; 替换完成后重算该行的校验和; 结束 yes no yes no yes no
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

hex文件格式学习记录 的相关文章

  • 代码评审工具Phabricator安装和部署

    1 安装 1 1 安装要求 Phabricator是一个LAMP应用套件 因此最基本的要求就是LAMP环境 Linux Linux的不同发行版及变种是必需的 MacOS X是一个可接受的Linux变种 Windows不是 Phabricat
  • 解决 kali换源之后签名无效

    报错问题 apt get update 报错 更新扩展知识 kali更新源 终端输入 vi etc apt sources list 中科大 deb http mirrors ustc edu cn kali kali rolling ma
  • 课程设计总结

    1 政府职能部门 望细分 具体 课程压缩所致 2 企业家 结构好 利于规划 参考 强烈希望协调与管理融合进来 3 工程师 技术人员 指导行强 望精化 深化 细化 4 学生 利于未来规划 创业 就业 发展 学习方向等等 老师总结课程缺陷 1
  • 数据下载网站整理

    数据十分重要 如何找到理想的数据显得更重要了 这里记录自己经过网上查询到的数据 进行整理 如果侵权 请联系我删除 再次感谢网友大佬们提供的资料 1 中国气象站点数据 下载地址 https www resdc cn data aspx DAT
  • arcgis 10.8 for win10安装教程

    本文主要记录arcgis安装步骤 遇到的问题等 文章目录 一 前提 二 下载与安装 1 下载 2 安装 参考资料 一 前提 下载前需要确定 1 ArcGIS对系统的要求 安装之前系统需安装 net framework 4 5 以上版本 我的
  • 大学生竞赛项目

    编程 蓝桥杯 报名时间 10月 报名网址 https dasai lanqiao cn 中国软件杯大学生软件设计大赛 报名时间 5月 报名网址 http www cnsoftbei com 中国高校计算机大赛 报名时间 11月 报名网址 h
  • UWB与蓝牙AOA定位技术简要对比

    1 UWB基本原理 UWB 超宽带技术 是基于IEEE802 15 4a z标准的利用纳秒级窄脉冲进行数据传输的无线通信技术 主要服务于微位置 micro location a person s placement to within a
  • “条件递进式编程”技巧两例

    什么是 条件递进式编程 呵呵 这是我自己起的名字 所谓条件递进式编程 就是指需要一系列相关函数组合执行的情况下 后续函数执行的必要性由前面所有函数执行是否成功来决定 比如说 有一系列函数如下DoSomething1 DoSomething2
  • 为什么计算机中的整数要用补码表示?补码表示有什么好处?

    为什么计算机中的整数要用补码表示 补码表示有什么好处 在计算机中 补码可谓是十分神奇而又重要的存在 我们知道整数在计算机内部的机器数一般都是补码表示的 这里给出几个这样表示的好处 符号位可以和数值为一起参加运算 比如俩个负数相加 只要结果在
  • 第一篇博--初入CSDN

    选择开博并计划按月定期发布一些敲码路上的收获和心得 目的是在梳理知识 复盘总结的同时 能够和志同道合的朋友们一起学习 共同进步 在互联网上留下一份自己的痕迹 与诸君共勉 联系方式 631435743 qq com 欢迎大家找我讨论计算机专业
  • UG NX10.0软件安装教程

    软件下载 名称 UG NX 10 0 语言 简体中文 安装环境 Windows 下载链接 链接 https pan baidu com s 1SkskLU2CYLQznfGWM7O4HQ 提取码 ersv 安装中有问题请咨询管家微信 don
  • 如何阅读论文?

    入门级 1 入门级推荐阅读文献 大牛近五年的论文研究综述 学位论文 网站 知网 t宝买知网号 SCI HUB https sci hub tw 2 知网搜索 学会提取关键词 在搜索引擎上找研究方向关键词 综述 进展 展望 看被引率高的论文
  • 【软件测试】用例篇

    一 什么是测试用例 测试用例 向被测试系统发起的一组集合 这组集合包含测试数据 测试步骤 测试平台 预期结果 二 为什么在测试前要设计测试用例 三 基于需求设计测试用例 3 1测试是我们测试人员进行测试的依据 3 2测试人员首先要分析需求
  • 【电机学】直流电机

    直流电机 什么是直流电机 直流电机的工作原理 直流发电机的工作原理 直流电动机的工作原理 可逆性原理 直流电机的主要结构部件 直流电机的电枢绕组 基本特点 并联支路对数 电刷的放置 一些概念 直流电机的磁场 直流电机的空载磁场 电枢电流Ia
  • 远程控制 ToDesk

    ToDesk 远程控制软件 支持跨平台的远程控制 有且不限于PC对PC iOS Android也可以直接控制 最近发现的一个好用的远程连接软件 也是近些年非常火热的 远程控制软件 ToDesk 虽然 QQ 和 向日葵 也都可以满足我们实现的
  • 什么是离岸公司?有什么作用?

    离岸公司是泛指在离岸法区内依据其离岸公司法规范成立的有限责任公司或股份有限公司 这些公司不能在注册地经营 而主要是在离岸法区以外的地方开展业务活动 离岸公司的主要特点包括高度保密性 无外汇管制和减免税务负担 离岸公司的作用主要有以下几个方面
  • 走进暄桐教室 一起观看暄桐同学作品及感受

    暄桐是一间传统美学教育教室 创办于2011年 林曦是创办人和授课老师 教授以书法为主的传统文化和技艺 旨在以书法为起点 亲近中国传统之美 以实践和所得 滋养当下生活 其实 暄桐教室的写字画画课 不仅是林曦老师单方面的输出 而是有分享 也有回
  • FL Studio21.2.2963水果音乐软件安装

    FL Studio是功能强大的音乐制作解决方案 使用旨在为用户提供一个友好完整的音乐创建环境 让您能够轻松创建 管理 编辑 混合具有专业品质的音乐 一切的一切都集中在一个软件中 只要您想 只要您需要 它总能满足您的音乐需求 工具方面 包括强
  • Mac/Linux虚拟机CrossOver2024新版下载使用教程

    CrossOver不像Parallels或VMware的模拟器 而是实实在在Mac OS X系统上运行的一个软件 该软件可以让用户在mac是上直接运行windows软件 本文为大家带来的是CrossOver Mac版安装教程 CrossOv
  • 液晶偏振光栅

    1 偏振 光是横波 在垂直于光的传播方向的平面内光波振动 即E矢量振动 各方向振幅都相等的光为自然光 只在某一方向有光振动的光称为线偏振光 各方向光振动都有 但振幅不同的光叫部分偏振光 螺旋着振动的光称圆偏振光 分旋和右旋 2 庞加莱球表示

随机推荐

  • Linux 基础知识

    一 从认识操作系统开始 1 1 操作系统简介 我通过以下四点介绍什么操作系统 操作系统 Operation System 简称OS 是管理计算机硬件与软件资源的程序 是计算机系统的内核与基石 操作系统本质上是运行在计算机上的软件程序 为用户
  • 【状态估计】基于无味卡尔曼滤波模拟倾斜传感器研究(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码及讲解 1 概述 本文包括两部分中的第一部分 第一部分设计
  • VT Msr Hook Syscall

    VT Msr Hook Syscall 什么是系统调用 系统调用是内核提供给应用层的接口 比如在 win10x64 应用层打开一个应用 其实就是 explorer 调用了 CreateProcess 这个函数通过 NTDLL 调用表的 0x
  • 大数据技术——hadoop集群搭建出现的问题

    出现的问题和解决方案 ssh免密出现的问题 解决方法 出现上图的是语法错误 在ssh和 keygen中多了空格 去掉即可 2 ssh免密登录出现的问题 ssh登陆报错 WARNING REMOTE HOST IDENTIFICATION H
  • 区块链的工作原理

    区块链系统由数据层 网络层 共识层 激励层 合约层和应用层组成 其中 数据层封装了底层数据区块以及相关的数据加密和时间戳等基础数据和基本算法 网络层则包括分布式组网机制 数据传播机制和数据验证机制等 共识层主要封装网络节点的各类共识算法 激
  • tcp/ip 详细解析以及网络层简单的发送syn

    利用tcp发送syn 我们可以从网络层进行下发 其实就是组装tcp ip包发送出去 include
  • 微信小程序列表item左滑操作

    页面DOM index wxml
  • TLAB简单介绍

    1 什么是TLAB 新对象都是在Eden区分配空间 这块空间是在多线程间共享的 那么考虑一下 多线程是可能同时创建新对象的 这时候必然需要一种同步机制 使用队列 或者通过互斥 这些方式确实都可以 不过 我们还有一种更好的方式 TLAB 它全
  • 网络传输基本流程

    网络传输流程图 在数据链路层有一个标识 每一台主机的唯一符 MAC地址 MAC地址 计算机的网卡在出厂时就打上了一串数据 MAC 地址 其通常是唯一的 所以局域网中发消息必须加上目的主机的MAC地址 两台计算机通过 TCP IP 协议通讯的
  • 【算法笔记】Prim算法

    定义 prim算法 图论中的一种算法 可在加权连通图里搜索最小生成树 由此算法搜索到的边子集所构成的树中 不但包括了连通图里的所有顶点 并且其所有边的权值之和最小 算法描述 输入 一个加权连通图 其中顶点集合为V 边集合为E 初始化 Vne
  • Spring Cloud

    添加config properties文件就行了 内容为空的都可以 加上该文件再次运行
  • 如何防止CSRF攻击

    随着互联网的高速发展 信息安全问题已经成为企业最为关注的焦点之一 而前端又是引发企业安全问题的高危据点 在移动互联网时代 前端人员除了传统的 XSS CSRF 等安全问题之外 又时常遭遇网络劫持 非法调用 Hybrid API 等新型安全问
  • Lunece全文检索搜索引擎

    Lunece全文检索 1 什么是全文检索 lucene是apache软件基金会4 jakarta项目组的一个子项目 是一个开放源代码的全文检索引擎工具包 但它不是一个完整的全文检索引擎 而是一个全文检索引擎的架构 提供了完整的查询引擎和索引
  • Postman如何做接口测试,那些不得不知道的技巧

    目录 导读 前言 Postman如何做接口测试1 如何导入 swagger 接口文档 Postman如何做接口测试2 如何切换测试环境 Postman如何做接口测试3 什么 postman 还可以做压力测试 Postman如何做接口测试4
  • substance designer中的warp节点分析

    一直觉得warp挺适用 但是用起来有时候效果挺奇怪的 还有directional warp貌似两个产生的效果截然不同 于是尝试用u3d 材质实现下 directional warp 这个节点主要功能是用灰度信息推开像素 常常用来分割连续贴图
  • Ubuntu安装配置tftp服务器

    Ubuntu安装配置tftp服务器 实验环境 ubuntu 1604 x64 一 安装配置 建立tftp目录 sudo mkdir tftpboot sudo chmod 777 tftpboot 安装客户端和服务器 sudo apt ge
  • 大数据量的冒泡排序 (计次数)

    题目描述 给定一个包含从0到n 1各一次的数组 若使用冒泡排序将其排为升序 问其中需要进行多少次交换 输入 测试数据有多组 每组由两行组成 第一行包含正整数n n lt 5000 下一行包含从0到n 1的n个整数的序列 输出 对于每组测试数
  • [论文分享] Adversarial Training for Raw-Binary Malware Classifiers

    Adversarial Training for Raw Binary Malware Classifiers USENIX 2023 Keane Lucas Carnegie Mellon University Samruddhi Pai
  • 面试题61. 扑克牌中的顺子(java+python)

    从若干副扑克牌中随机抽 5 张牌 判断是不是一个顺子 即这5张牌是不是连续的 2 10为数字本身 A为1 J为11 Q为12 K为13 而大 小王为 0 可以看成任意数字 A 不能视为 14 示例 1 输入 1 2 3 4 5 输出 Tru
  • hex文件格式学习记录

    hex文件 hex文件是什么 hex文件的数据结构 按照记录类型具体分析 Mermaid Flowchart hex文件是什么 它是由一行行符合Intel HEX 文件格式的文本所构成的ASCII 文本文件 每一行包含一 个 HEX 记录