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

HEX与BIN文件格式详解及嵌入式开发应用

1. 文件格式的本质差异第一次接触单片机开发时我也曾被HEX和BIN文件搞得晕头转向。直到有次烧录出错导致硬件锁死才真正明白这两种格式的区别绝非表面那么简单。HEX文件本质上是一种带地址信息的文本编码格式而BIN文件则是纯粹的二进制映像。举个例子当你用文本编辑器打开HEX文件时会看到类似:100000000C9434000C9446000C9446000C9446006A的字符串而BIN文件打开后全是乱码——这就是最直观的区别。HEX文件采用Intel HEX格式规范每条记录包含起始符:字节数如10表示16字节地址域4字符十六进制数记录类型00数据记录/01文件结束等数据域n字节十六进制数据校验和而BIN文件就像内存的照片直接按顺序存储机器码。比如对于STM32F1030x08000000地址的代码在BIN文件中就位于文件开头没有任何元数据。关键提示HEX文件中的地址可能不连续但BIN文件必须保证地址连续性。这就是为什么有些HEX转换BIN工具需要指定填充值通常0xFF。2. 开发工具链中的处理差异在Keil MDK中编译生成HEX文件时编译器会执行以下关键步骤将各个.o目标文件链接成绝对地址的ELF文件提取.text、.data等段内容生成带地址标记的HEX记录添加启动地址记录通常是03类型的扩展线性地址记录而生成BIN文件时工具链的工作流程截然不同fromelf --bin -o project.bin project.axf这个命令直接从ELF文件提取二进制内容不做任何地址编码。我曾遇到过因忘记指定--bin参数导致生成错误格式的情况烧录后单片机直接跑飞。IAR Embedded Workbench的处理更有意思——它的HEX文件默认使用Motorola S-record格式与Intel HEX的差异就像大端序和小端序的区别。有次我将IAR生成的HEX文件直接给产线烧录结果设备全部无法启动排查半天才发现格式不兼容。3. 烧录过程的底层机制使用ST-Link烧录HEX文件时编程器会解析每条HEX记录的地址和数据自动处理地址跨页如STM32的Flash每页2KB根据记录类型判断文件结束计算并验证校验和而烧录BIN文件时则必须手动指定起始地址st-flash write firmware.bin 0x08000000这个0x08000000对STM32来说就是Flash的起始地址。有次我误写成0x8000000少个0结果程序烧到了RAM区上电后代码立刻丢失。J-Link的处理更智能些它的命令行工具可以自动检测HEX文件中的起始地址JLinkExe -device STM32F407VG -CommanderScript flash.jlink其中flash.jlink内容loadfile firmware.hex r q但对BIN文件仍需明确地址loadfile firmware.bin 0x080000004. 实际项目中的选型建议在汽车ECU开发中我们强制要求使用HEX格式因为产线烧录时需要验证地址范围避免误刷Bootloader区支持多段非连续地址如单独配置参数区内置校验机制降低不良率但在IoT设备OTA升级时BIN文件更合适文件体积小比HEX小30%-50%云端不需要解析复杂格式单片机内置Bootloader可直接解析有个经典案例某智能家居项目最初用HEX格式OTA导致升级包过大用户流量费用激增。改为BIN格式后单个升级包从120KB缩减到78KB每年节省数百万服务器流量成本。5. 格式转换的实用技巧使用objcopy工具转换时这个命令堪称万能arm-none-eabi-objcopy -O ihex firmware.elf firmware.hex arm-none-eabi-objcopy -O binary firmware.elf firmware.bin但要注意两个坑BIN文件转换可能丢失调试信息建议保留ELF文件跨工具链转换时注意字节序问题我常用的HEX转BIN方法是import intelhex ih intelhex.IntelHex(firmware.hex) ih.tobinfile(firmware.bin, start0x08000000)这个Python脚本可以精确控制输出范围比某些GUI工具更可靠。6. 校验机制深度解析HEX文件每条记录都有校验和计算公式是校验和 0x100 - (字节数 地址高字节 地址低字节 记录类型 所有数据字节之和的低8位)例如记录:100000000C9434000C9446000C9446000C9446006A的校验和0x6A验证0x100 - (0x10 0x00 0x00 0x00 0x0C0x940x340x000x0C0x940x460x00 0x0C0x940x460x000x0C0x940x460x00) 0x6A而BIN文件通常需要额外生成CRC校验。STM32的硬件CRC模块计算示例uint32_t calc_crc(const uint8_t *data, size_t len) { CRC-CR | CRC_CR_RESET; for(size_t i0; ilen; i4) { uint32_t word *(uint32_t*)(datai); CRC-DR __RBIT(word); // 字节序转换 } return __RBIT(CRC-DR); }7. 调试排错实战记录曾遇到一个诡异问题HEX文件烧录正常但转成BIN后运行异常。最终发现是链接脚本里这个配置作祟MEMORY { FLASH (rx) : ORIGIN 0x08000000, LENGTH 512K RAM (xrw) : ORIGIN 0x20000000, LENGTH 128K }HEX文件会跳过未使用的Flash区域而BIN文件会包含这些空白区域填充0xFF导致文件超大。解决方案是在objcopy时指定只提取.text段arm-none-eabi-objcopy -O binary -j .text firmware.elf firmware.bin另一个典型案例某客户反映HEX文件烧录后部分配置丢失。经查是HEX文件中包含多个相同地址的记录后一条覆盖了前一条。这种问题用BIN文件就不会出现因为每个地址只能对应一个字节。

相关文章:

HEX与BIN文件格式详解及嵌入式开发应用

1. 文件格式的本质差异第一次接触单片机开发时,我也曾被HEX和BIN文件搞得晕头转向。直到有次烧录出错导致硬件锁死,才真正明白这两种格式的区别绝非表面那么简单。HEX文件本质上是一种带地址信息的文本编码格式,而BIN文件则是纯粹的二进制映像…...

小白必看:cv_resnet18_ocr-detection WebUI界面详解,功能一目了然

小白必看:cv_resnet18_ocr-detection WebUI界面详解,功能一目了然 1. 快速认识cv_resnet18_ocr-detection 如果你正在寻找一个简单好用的文字识别工具,cv_resnet18_ocr-detection绝对值得一试。这个由科哥开发的OCR文字检测模型&#xff0c…...

嵌入式开发必备终端工具与效率提升技巧

1. 项目概述作为一名在嵌入式领域摸爬滚打十多年的老工程师,我深知终端工具对开发效率的决定性影响。今天要分享的这些"终端神器",都是我在实际项目中反复验证过的效率加速器。它们不是那些花里胡哨的新潮工具,而是经过时间考验的实…...

OpenClaw+千问3.5-9B自动化报告:从数据到PPT一键生成

OpenClaw千问3.5-9B自动化报告:从数据到PPT一键生成 1. 为什么需要自动化报告系统 每周五下午三点,我的日历总会准时弹出提醒:"准备本周工作报告"。这个重复性任务通常要耗费1-2小时:从数据库导出CSV、用Excel制作图表…...

OpenClaw+Qwen2.5-VL-7B:低成本自动化内容生成方案

OpenClawQwen2.5-VL-7B:低成本自动化内容生成方案 1. 为什么选择这个组合 去年我开始尝试用AI辅助内容创作时,遇到了两个核心痛点:一是商业API调用成本太高,二是现有工具无法实现端到端的自动化。经过多次尝试,最终找…...

光储微网ODM/OEM标杆实践:爱阳储能的技术深耕与全场景赋能之路

在双碳目标推动下,全球储能产业进入规模化爆发期,分布式储能作为能源结构转型的核心支撑,正迎来前所未有的发展机遇。其中,ODM/OEM模式凭借柔性定制、技术适配、成本优化的核心优势,成为连接储能技术研发与全球市场需求…...

工商业储能柜的 OEM 定制需要关注哪些关键指标?

“同一款工商业储能柜,为什么不同工厂的报价差异能达到 30%?” 这是不少储能贸易商在筛选供应商时遇到的典型问题。随着国内峰谷电价差持续拉大,工商业储能需求快速释放,但面对市场上五花八柜的产品方案,贸易商往往难以…...

LeetCode 3740. 三个相等元素之间的最小距离 I, 3741. 三个相等元素之间的最小距离 II【按照相同元素分组】中等

本文属于「征服LeetCode」系列文章之一,这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁,本系列将至少持续到刷完所有无锁题之日为止;由于LeetCode还在不断地创建新题,本系列的终止日期可能是永远。在这一系列刷题文章…...

ERTEC 系列 PROFINET 芯片级硬件过滤器分析仓

一、语言特性:Java 26 与模式匹配进化 1.1 Java 26 语言级别支持 IDEA 2026.1 EAP 最引人注目的变化之一,就是新增 Java 26 语言级别支持。这意味着开发者可以提前体验和测试即将在 JDK 26 中正式发布的语言特性。 其中最重要的变化是对 JEP 530 的全…...

SparkFun Qwiic OLED Arduino图形库深度解析

1. 项目概述 SparkFun Qwiic OLED Arduino Library 是一个面向嵌入式显示应用的轻量级、高效率图形驱动库,专为 SparkFun 全系列基于 SSD1306 控制器的 Qwiic 接口 OLED 模块设计。该库并非简单封装,而是从底层硬件抽象层出发,重构了图形渲染…...

3步实现Windows系统全面优化:开源工具的智能解决方案

3步实现Windows系统全面优化:开源工具的智能解决方案 【免费下载链接】Winhance-zh_CN A Chinese version of Winhance. C# application designed to optimize and customize your Windows experience. 项目地址: https://gitcode.com/gh_mirrors/wi/Winhance-zh_…...

超级个体时代:一人公司+AI Agent军团

超级个体时代:一人公司+AI Agent军团 1. 引入与连接:当一个人成为一支军队 1.1 开场故事:未来已来,只是分布不均 2023年的一个平凡早晨,32岁的独立开发者李明醒来,像往常一样打开了他的"指挥中心"——一个由多个显示屏组成的工作台。但与大多数上班族不同,李…...

Python数据分析项目实战(049)——DataFrame数据类型转换

版权声明 本文原创作者:谷哥的小弟 作者博客地址:http://blog.csdn.net/lfdfhl 数据类型转换概述 数据类型转换是数据预处理中规范数据格式、适配分析需求的核心操作,指将DataFrame中字段的原始数据类型(如字符串、整数、浮点数等)转换为目标类型的过程,其本质是解决“数…...

使用Alpine配置WSL ssh门户鼐

1. 哑铃图是什么? 哑铃图(Dumbbell Plot),有时也称为DNA图或杠铃图,是一种用于比较两个相关数据点的可视化图表。 它源于人们对更有效数据比较方式的持续探索。 在传统的时间序列比较中,我们通常使用两条折…...

掼蛋开源项目

掼蛋开源项目,纯娱乐,支持单机模式,AI智能程度还是可以的。欢迎来学习交流,能给个Star最好了,感谢~ 代码仓库...

AI 入门 30 天挑战 - Day 6 费曼学习法版 - 模型评估和优化

🌟 完整项目和代码 本教程是 AI 入门 30 天挑战 系列的一部分! 💻 GitHub 仓库: https://github.com/Lee985-cmd/AI-30-Day-Challenge📖 CSDN 专栏: https://blog.csdn.net/m0_67081842?typeblog⭐ 欢迎 Star 支持!…...

AI写论文就选它们!4个AI论文写作工具,搞定期刊论文写作!

撰写期刊论文、毕业论文或职称论文时,学术朋友们常常会遇到不少挑战。自己动手写论文时,面对大量的学术文献,寻找相关资料简直像在大海捞针;而繁琐的格式要求又让人应接不暇,恨不得抓狂;一遍又一遍的修改&a…...

安装对中不到位,丝杆升降机越用越费!5大严重后果必看

在设备安装现场,经常能看到这样的场景:工人用卷尺大概量一下电机座和升降机输入轴的距离,然后用锤子把联轴器敲进去,螺栓拧紧就完事了。他们不知道,这种“差不多”的对中操作,正在为丝杆升降机埋下致命隐患…...

OpenClaw学术合作:Qwen2.5-VL-7B辅助科研团队文献筛选

OpenClaw学术合作:Qwen2.5-VL-7B辅助科研团队文献筛选 1. 科研文献处理的痛点与自动化契机 去年参与一个跨学科研究项目时,我深刻体会到传统文献调研的低效。团队每周需要从数百篇论文中筛选出20-30篇相关文献,这个过程耗费了研究人员近40%…...

好用的山东蜂窝卤煮锅推荐

好的,为您介绍一款在食品加工领域应用广泛且口碑良好的设备。专业之选:广合盛蜂窝卤煮锅在寻找一款高效、稳定且合规的卤煮设备时,来自山东广合盛机械科技有限公司的蜂窝卤煮锅是一个值得考虑的专业选项。该公司专注于食品加工设备的研发与制…...

先进封装中如何判定凸点结合力大小?

在先进封装中,凸点(Bump)的结合力是决定芯片可靠性的核心指标。如果结合力不足,芯片在后续的倒装焊、底部填充或长期热循环中会出现分层或断路。判定凸点结合力大小,通常采用凸点剪切测试。简单来说,它的原…...

2 UI 设计师工具

2 UI 设计师工具 2.1 按键 QPushButton 1.按键插入:将左侧buttons中的pushbutton拖拽到右侧即插入一个按键。2.按键命名:可在objectName处直接更改按键名字。3.按键重命名:单调的命名可能会存在如下图问题,用户没有办法直接从按键…...

CVPR‘26 | 从任务统一到模态协同:电商通用多模态表征MOON 2.0

小记:自 2023 年以来,电商多模态表征模型 MOON 历经 3 年多的持续建设与迭代升级,已在阿里妈妈搜索直通车全面落地,并在多个核心场景中取得显著效果。以精排 CTR 预估模型为例,累计全量 5 期,带来大盘 CTR …...

基于前述双系统安装与切换遇到的问题

一、 引导管理类问题 这类问题是双系统环境中最常见且最影响使用的核心故障。 1. GRUB菜单丢失,开机直接进入Windows 问题现象:安装Kali后首次重启或Windows系统更新后,GRUB引导菜单消失,计算机直接启动至Windows。根本原因&am…...

用可逆数据结构实现 Harness 的无损回滚

用可逆数据结构实现 Harness 的无损回滚 1. 引入与连接:在复杂部署系统中寻找安全网 1.1 一个运维工程师的不眠之夜 2023年某个周五的晚上,9点37分,电商平台"SmoothShop"的CI/CD负责人张磊正准备关机下班,期待着即将到来的周末。突然,监控系统的警报声响彻整…...

直播预告 | 别再从零写标准了!——AI帮你5分钟生成标准草案

直播预告写一份标准草案,通常要多久?查模板、搭框架、写内容、调格式、改编号……熟悉流程的人都知道,哪怕是一份相对简单的企业标准,从空白文档到初稿完成,少则半天,多则数天。本期直播,我们将…...

# 002、智能体基础架构:从LLM到多模态模型的支撑体系

上周调一个视觉问答的Demo,半夜被报警短信吵醒。日志里赫然一行:RuntimeError: Expected tensor for image to be CUDA, but got CPU。就这一行错误,背后是三个小时的多模态数据管道调试——图像在预处理阶段漏了.cuda(),而文本编…...

BGE-M3移动端部署:Android/iOS调用BGE-M3嵌入服务SDK封装

BGE-M3移动端部署:Android/iOS调用BGE-M3嵌入服务SDK封装 1. 项目背景与价值 BGE-M3是一个专门为检索场景设计的三合一"多功能"文本嵌入模型。它集成了密集检索、稀疏检索和多向量检索三种模式,能够在不同场景下提供最优的文本相似度计算能力…...

SQL查询语句--EXISTS子查询

EXISTS子查询的逻辑是先查询外层数据,再逐行进行EXISTS子查询。外层查询出的每条记录都执行一EXISTS子查询,EXISTS子查询为TRUE则保留当前记录,为FALSE则不保留。例如:需求:查询选择了课程号C_id为1的学生学号和姓名。…...

EcomGPT电商智能助手效果惊艳展示:中英泰越四语营销文案生成作品集

EcomGPT电商智能助手效果惊艳展示:中英泰越四语营销文案生成作品集 1. 多语言电商文案生成新体验 在跨境电商日益繁荣的今天,语言障碍和文案创作成为许多商家面临的挑战。传统的人工翻译和文案创作不仅成本高昂,而且难以保证多语言环境下的…...