HEX文件解析全指南:嵌入式开发必备

目录

一、HEX文件概述

二、HEX文件基本结构

三、记录类型详解

1. 数据记录 (00)

2. 文件结束记录 (01)

3. 扩展段地址记录 (02)

4. 扩展线性地址记录 (04)

5. 开始线性地址记录 (05)

6. 开始段地址记录 (03)

四、地址计算示例

示例1:扩展线性地址

示例2:扩展段地址

五、校验和计算方法

六、HEX文件解析算法

七、常见HEX文件结构

典型的ARM Cortex-M HEX文件

包含数据的HEX文件

八、高级特性

1. 不连续地址

2. 最小化文件

3. 多段地址空间

九、工具支持

常用工具arm-none-eabi-objcopy -O ihex firmware.elf firmware.hexsrec_cat input.hex -intel -o output.bin -binaryhex2bin firmware.hex

Python解析库

十、注意事项

十一、实际应用示例

生成HEX文件(C语言)

解析HEX并烧录(Python)

十二、常见问题

Q1: HEX文件中的地址是物理地址吗?

Q2: 如何合并多个HEX文件?

Q3: HEX文件能包含调试信息吗?

Q4: 为什么HEX文件比二进制文件大?


一、HEX文件概述

Intel HEX(十六进制)文件是一种用于存储和传输二进制数据的文本编码格式,广泛应用于嵌入式系统、微控制器编程等领域。

二、HEX文件基本结构

每个HEX文件由多行记录组成,每行记录格式如下:

:BBAAAATTDDDD...DDCC

各字段含义:

  • ::起始字符,每行以冒号开始

  • BB:数据长度(1字节,十六进制),表示本行数据字节数

  • AAAA:地址(2字节,十六进制),表示数据存储的起始地址

  • TT:记录类型(1字节,十六进制)

  • DD...DD:数据字段,长度由BB指定

  • CC:校验和(1字节,十六进制)

三、记录类型详解

1. 数据记录 (00)

:102000008121122C2F4512280B4512283FDD122862
  • 最常见的记录类型

  • 包含要烧录到存储器中的实际数据

  • 地址字段表示存储的起始地址

2. 文件结束记录 (01)

:00000001FF
  • 标志HEX文件结束

  • 数据长度必须为00

  • 地址字段通常为0000

  • 校验和计算:01h + NOT(00h + 00h + 00h + 01h) = FFh

3. 扩展段地址记录 (02)

:020000021200EA
  • 用于8086/8088处理器的段地址扩展

  • 数据字段包含2字节的段地址

  • 后续数据记录的地址是段地址+偏移地址

  • 段地址左移4位后与偏移地址相加

4. 扩展线性地址记录 (04)

:020000040800F2
  • 用于32位地址空间(如ARM Cortex-M)

  • 数据字段包含2字节的高16位地址

  • 与后续数据记录的地址拼接形成32位地址

  • 示例中0800表示高16位,实际地址为0x0800XXXX

5. 开始线性地址记录 (05)

:04000005000020C116
  • 指定程序的入口地址(复位向量)

  • 数据字段包含4字节的32位地址

  • 用于ARM架构的EIP(入口点)

  • 示例中000020C1是程序的入口地址

6. 开始段地址记录 (03)

:0400000300003800C7
  • 用于x86架构的CS:IP设置

  • 数据字段包含4字节:2字节CS + 2字节IP

  • 较少使用

四、地址计算示例

示例1:扩展线性地址

:020000040800F2 ; 设置高地址为0x0800 :10000000B5084B... ; 实际地址 = 0x08000000 + 0x0000 = 0x08000000 :10001000F0B50A4B...; 实际地址 = 0x08000000 + 0x0010 = 0x08000010

示例2:扩展段地址

:020000021000EC ; 设置段地址为0x1000 :10000000B5084B... ; 实际地址 = (0x1000 << 4) + 0x0000 = 0x10000

五、校验和计算方法

校验和 = 0x100 - (所有字节和 mod 0x100)

计算步骤:

  1. 将冒号后的所有字节(包括长度、地址、类型、数据)相加

  2. 取和的低8位

  3. 计算补码(0x100 - 和值)

示例:

:10246200464C5549442050524F46494C4500464C33

计算过程:

  • 字节值:0x10, 0x24, 0x62, 0x00, 0x46, 0x4C, 0x55, 0x49, 0x44, 0x20, 0x50, 0x52, 0x4F, 0x46, 0x49, 0x4C, 0x45, 0x00, 0x46, 0x4C

  • 求和:0x10 + 0x24 + 0x62 + 0x00 + ... + 0x46 + 0x4C = 0x6CD

  • 取低8位:0xCD

  • 补码:0x100 - 0xCD = 0x33 ✓

六、HEX文件解析算法

def parse_hex_line(line): """解析一行HEX记录""" if line[0] != ':': return None byte_count = int(line[1:3], 16) address = int(line[3:7], 16) record_type = int(line[7:9], 16) data = bytes.fromhex(line[9:9+byte_count*2]) checksum = int(line[9+byte_count*2:], 16) # 验证校验和 calc_sum = sum(bytes.fromhex(line[1:-2])) calc_checksum = (0x100 - (calc_sum & 0xFF)) & 0xFF if calc_checksum != checksum: print(f"校验和错误: 计算值={calc_checksum:02X}, 文件值={checksum:02X}") return { 'byte_count': byte_count, 'address': address, 'type': record_type, 'data': data, 'checksum': checksum }

七、常见HEX文件结构

典型的ARM Cortex-M HEX文件

:020000040800F2 ; 设置Flash地址为0x08000000 :10000000B5084B1B68184698474268D368... ; 中断向量表 :10001000F0B50A4B1B6800221A701946... ; 程序代码 ... (更多数据记录) ... :04000005000020C116 ; 入口地址 :00000001FF ; 文件结束

包含数据的HEX文件

:1001000041646472657373202020203031323334 ; ASCII数据 :1001100035363738392020202020202020202020 ; 更多数据 :00000001FF

八、高级特性

1. 不连续地址

HEX文件可以包含不连续的地址区域,用于:

  • 跳过保留区域

  • 仅更新部分Flash

  • 多段数据存储

2. 最小化文件

只包含实际使用的地址空间,减少文件大小。

3. 多段地址空间

通过多次使用扩展地址记录,可以访问不同的地址空间:

  • Flash存储器

  • EEPROM

  • 配置寄存器

九、工具支持

常用工具arm-none-eabi-objcopy -O ihex firmware.elf firmware.hexsrec_cat input.hex -intel -o output.bin -binaryhex2bin firmware.hex

Python解析库

import telhex # 读取HEX文件 ih = intelhex.IntelHex('firmware.hex') # 获取数据 data = ih.tobinarray() # 写入二进制文件 ih.tobinfile('firmware.bin')

十、注意事项

  1. 字节序:HEX文件使用大端字节序(MSB first)

  2. 地址对齐:ARM Cortex-M通常要求4字节对齐

  3. 填充值:未编程区域通常为0xFF

  4. 最大长度:每行记录最多255字节数据

  5. 兼容性:确保烧录工具支持所有记录类型

十一、实际应用示例

生成HEX文件(C语言)

// 使用链接脚本指定地址 MEMORY { FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 256K RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 64K }

解析HEX并烧录(Python)

def hex_to_binary(hex_file, bin_file): """将HEX文件转换为二进制""" ih = intelhex.IntelHex() ih.loadhex(hex_file) # 获取地址范围 start = ih.minaddr() end = ih.maxaddr() # 生成连续二进制数据 with open(bin_file, 'wb') as f: for addr in range(start, end+1): f.write(bytes([ih[addr] if addr in ih else 0xFF]))

十二、常见问题

Q1: HEX文件中的地址是物理地址吗?

A:通常是物理地址,但可以通过扩展地址记录映射到不同地址空间。

Q2: 如何合并多个HEX文件?

A:使用工具如srec_cat:

srec_cat file1.hex -intel file2.hex -intel -o combined.hex -intel

Q3: HEX文件能包含调试信息吗?

A:不能,HEX只包含二进制数据。调试信息通常存储在单独的ELF或MAP文件中。

Q4: 为什么HEX文件比二进制文件大?

A:HEX是文本格式,每个字节需要2个字符表示,加上地址和校验和等开销。

这种格式虽然看似简单,但在嵌入式开发中极其重要,是连接编译器和硬件的关键环节。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1131259.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

阿里通义Z-Image-Turbo商用实战:免配置云端GPU环境搭建全攻略

阿里通义Z-Image-Turbo商用实战&#xff1a;免配置云端GPU环境搭建全攻略 对于广告公司而言&#xff0c;将AI图像生成技术融入工作流程可以大幅提升创意产出效率&#xff0c;但技术门槛和版权风险往往成为阻碍。阿里通义Z-Image-Turbo作为一款商用友好的AI图像生成工具&#xf…

教学实践:如何在计算机课程中快速部署Z-Image-Turbo实验环境

教学实践&#xff1a;如何在计算机课程中快速部署Z-Image-Turbo实验环境 为什么选择Z-Image-Turbo作为教学工具 作为一名计算机教授&#xff0c;我最近在机器学习课程中遇到了一个难题&#xff1a;如何让数十名学生快速体验AI图像生成技术&#xff0c;而不必花费大量时间配置复…

惠普P1106打印机驱动安装教程:零基础也能会,避坑+排障全流程!

“惠普P1106驱动安装只点‘下一步’&#xff1f;顺序错了90%会失败&#xff01;”作为专注打印机问题解决的博主&#xff0c;后台每天都能收到大量同类求助&#xff1a;“小编&#xff0c;惠普P1106打印机驱动安装教程有没有&#xff1f;”“装了三次驱动都提示失败&#xff0c…

左手带娃,右手法典:宝爸宝妈的法考时间管理术

深夜十一点半&#xff0c;终于哄睡了孩子&#xff0c;你轻轻推开 书房门。桌上摊开的《刑法精讲》还停留在三天前的那一页&#xff0c;疲惫如潮水般涌来&#xff0c;但那个成为律师或法律人的梦想&#xff0c;仍在心底闪烁微光——这是无数备考宝爸宝妈最真实的夜晚。当“父母”…

JSM541-JSM546 系列高压霍尔效应开关

在汽车电子与工业控制领域&#xff0c;霍尔效应开关作为核心传感部件&#xff0c;其稳定性、抗干扰能力和环境适应性直接决定了终端产品的性能上限。提到行业标杆级霍尔开关&#xff0c;A1204 凭借宽电压范围、强防护性能成为众多工程师的首选。而今天&#xff0c;杰盛微重磅推…

全频段SDR干扰源模块设计

一、 介绍 全频段SDR干扰源模块是一款高频段、多通道、宽实时带宽的通用干扰源&#xff0c;覆盖20-6000MHz全频段&#xff0c;支持多制式调制与快速跳频&#xff0c;可满足通信、雷达、电子对抗等场景的信号模拟需求&#xff0c;功能可扩展。 二、技术优势 2.1 性能指标&…

别再手写了!SpringBoot 6 种数据脱敏方案,第 5 种直接封神!

沉默是金&#xff0c;总会发光大家好&#xff0c;我是沉默在日常开发中&#xff0c;你一定遇到过这种需求&#xff1a;手机号中间四位要打星身份证号要隐藏中间邮箱只能露前缀银行卡只能看头尾比如手机号&#xff1a;13812345678 → 138****5678 身份证&#xff1a;43010119900…

工业级IoT库房温湿度实时监测系统:从感知到管控的全链路方案

一、项目背景 在食品、药品、电子元件、仓储物流、文物馆藏等众多领域&#xff0c;库房内的温湿度环境是影响物资存储质量的关键因素。传统库房温湿度管理多采用人工定时巡检、纸质记录的方式&#xff0c;存在效率低下、误差大、实时性差、漏检误报等问题。一旦温湿度超出安全阈…

小白别踩坑:async-await真能保证顺序执行?搞懂调用时机才不翻

小白别踩坑&#xff1a;async-await真能保证顺序执行&#xff1f;搞懂调用时机才不翻 小白别踩坑&#xff1a;async-await真能保证顺序执行&#xff1f;搞懂调用时机才不翻车&#xff01;先整点废话——“我明明写了 await&#xff0c;怎么还是乱&#xff1f;”async 函数到底返…

spss 性别类似的二分类变量 多分类变量 做线性回归分析

在SPSS中&#xff0c;可以用性别作为自变量纳入线性回归模型&#xff0c;但需要先对性别这个分类变量进行适当的编码处理&#xff0c;因为线性回归要求自变量为数值型变量。 一、核心前提&#xff1a;性别变量的编码 性别是典型的二分类变量&#xff08;如男/女&#xff09;&am…

电商数据质量的智能监测

电商数据质量的智能监测 关键词:电商数据、数据质量、智能监测、数据清洗、数据校验 摘要:本文围绕电商数据质量的智能监测展开深入探讨。首先介绍了电商数据质量监测的背景、目的、预期读者等内容。接着阐述了核心概念,包括数据质量的各个维度以及智能监测的原理,并通过示…

多云架构下的Z-Image-Turbo:如何实现高可用图像生成服务

多云架构下的Z-Image-Turbo&#xff1a;如何实现高可用图像生成服务 在当今AI技术快速发展的时代&#xff0c;图像生成服务已成为许多应用场景的核心需求。Z-Image-Turbo作为阿里开源的高效图像生成模型&#xff0c;通过创新的8步蒸馏技术&#xff0c;能够在保持照片级质量的同…

2026年国产数据库客户成功案例与迁移成本综合对比分析

核心观点摘要2026年国产数据库市场持续增长&#xff0c;客户成功案例数量与迁移实践成为选型重要参考&#xff1b;不同国产数据库在金融、政务、互联网等行业的落地案例数量差异显著&#xff0c;客户选型需结合行业属性&#xff1b;数据库迁移成本受数据规模、兼容性、人力投入…

“补贴”能烧出未来吗?“排队免单”模式的价值与隐忧

当直接的打折促销已经无法撬动消费者的钱包时&#xff0c;一种名为“订单排队免单”的模式开始流行。“花出去的有可能全部回来”&#xff0c;其背后是一套精密的商业计算。一、核心玩法&#xff1a;一个虚构的“智能水站”案例为了让逻辑更清晰&#xff0c;我们假设一个完全简…

信息流广告点击率提升300%丨实战案例解析

信息流广告的点击率优化&#xff0c;确实是一个需要综合考量多个因素的精细活。下面是结合行业经验&#xff0c;梳理几个关键方向和具体策略。精准定向与用户洞察精准定向是基础。关键在于将广告推送给真正可能感兴趣的人&#xff0c;这依赖于对用户的深入理解。通过分析用户行…

跨平台创作无忧:Z-Image-Turbo云端服务+多终端访问方案

跨平台创作无忧&#xff1a;Z-Image-Turbo云端服务多终端访问方案 作为一名数字创作者&#xff0c;你是否经常需要在Windows工作室电脑、MacBook和iPad之间切换工作&#xff1f;每次换设备都要重新配置复杂的AI绘画环境&#xff0c;不仅浪费时间&#xff0c;还容易出错。本文将…

库卡机器人气保焊智能节气阀

库卡机器人凭借在气保焊领域的高效作业表现和精准轨迹控制&#xff0c;广泛应用于车架焊接、不锈钢容器加工、汽车零部件制造等场景。保护气消耗成本在气保焊工序中占比显著&#xff0c;其管控效果直接关系生产线的盈利空间。库卡机器人进行气保焊时&#xff0c;会依据工件特性…

背调软件:重塑企业招聘风控的高效工具

在数字化转型加速的当下&#xff0c;企业招聘流程正朝着智能化、高效化方向升级&#xff0c;背调软件作为招聘风控的核心工具&#xff0c;逐渐取代传统人工背调&#xff0c;成为企业筛选人才的重要助力。它不仅解决了传统背调流程繁琐、耗时久、信息准确率低的痛点&#xff0c;…

计算机等级考试CMMI考试高频考点速记表

核心模块考点内容修仙类比考试关键词 / 必背点CMMI 全称Capability Maturity Model Integration能力成熟度模型集成修仙界「门派修炼体系总纲」区分 CMM&#xff08;旧版软件模型&#xff09;与 CMMI&#xff08;集成版&#xff0c;覆盖软件、系统、服务三大领域&#xff09;两…

AI创作马拉松:从环境搭建到作品提交的全流程指南

AI创作马拉松&#xff1a;从环境搭建到作品提交的全流程指南 参加AI艺术生成赛道的编程马拉松&#xff0c;最让人头疼的莫过于环境配置。本文将带你从零开始&#xff0c;快速搭建一个稳定的AI创作环境&#xff0c;让你把宝贵的时间都用在创意实现上&#xff0c;而不是浪费在依赖…