IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> HEX文件格式分析 -> 正文阅读

[嵌入式]HEX文件格式分析

日常开发工作中hex文件是经常用到的一种文件格式,例如生产部门进行量产程序烧录,那么往往使用的是HEX文件。

下面以stm32生成的hex为例,分析hex的文件格式:
官方定义:
<0x3a>[数据长度1Byte][数据地址2Byte][数据类型1Byte][数据nByte][校验1Byte]<0x0d><0x0a>

打开一个stm32生成的hex文件:

1)结合格式分析第一行(指定基地址)
:020000040800F2(:02 0000 04 0800 F2)

解析:
“:” --对应格式中的<0x3a>,0x3a就是冒号的ASCII码

“02”–对应数据长度,即长度为2字节

“0000”–对应数据地址,长度为2个字节。Stm32一个32位的芯片两个字节肯定不足以表示地址(要四个),所以这里地址的具体用法要结合后面的数据类型分析。这里为4指定基地址,所以这两个字节并没有什么用。

“04”–对应数据类型,具体的含义见【注释1】,这里的4是指定基地址。

“0800”–对应数据,长度是浮动的,这里是2个字节,和前面的长度相呼应。这里指定的是基地址。当然指定的是高16的地址,如常见的0x0800 0000 ,所以这个基地址<<16使用。

“F2”–对应的是校验结果,result = 256 - (date[0] + … +date[n])% 256 ,0xF2 = 0x100 - (0x02 +0x00 + 0x00 + 0x04 + 0x08 + 0x00)%0x100。
校验范围是从长度到数据结束字节。

“”–对应<0x0d><0x0a>,就是回车和换行。

2)结合格式分析第二行(数据)
第二行开始到文件快结束的绝大部分内容都是对应的数据,即bin文件中所携带的内容,其他例如基地址,文件起始,文件结束等内容是hex文件才有的附加信息。
:10000000600700200D0C0008050400080704000824
(:10 0000 00 60 07 00 20 0D 0C 00 08 05 04 00 08 07 04 00 08 24)

“10”–对应数据长度16,即60 07 00 20 0D 0C 00 08 05 04 00 08 07 04 00 08这16个字节。

“0000”–对应地址,这里类型是数据,准确的说是低16位,高十六位由第一行的04基地址类型指定,上面指定的是0800 这里指定的是0000,那么后面的16个字节的目标位置就是addr = 0x800 << 16 + 0x0000, 即0x0800 0000。
在这里插入图片描述
在这里插入图片描述
“600700200D0C00080504000807040008”–对应的是数据,这里的数据也就是我们实实在在要写入到产品flash中的东西,下面对HEX与BIN文件做简单对比。
在这里插入图片描述
在这里插入图片描述
3)分析最后两行(入口地址和文件结束)
在这里插入图片描述
“:0400000508000189”–对应函数入口地址,可以参考 .map 文件中可以看到以下信息
在这里插入图片描述
“:00000001FF”–对应文件结束。

【20190407补充】
每行数据的地址是两个字节,可以携带64K的数据,但是如果生成的hex准确的说bin数据大于64k,这时候hex会有如何的变化呢,我用内联函数扩大了生成文件的大小,让生成hex远大于64K,结果hex文件的处理如下图所示:

我们看到了,是重新的指定了基地址,新开辟了64K字节的空间,00类型中的数据的<地址>又开始由0000开始累加了,当我们日常自己要处理hex文件,例如自己写离线下载上位机程序,或是IAP目标板程序,这一点要明确,基地址不仅是只会有一条。

【注释1】
‘00’ Data Record 数据
‘01’ End of File Record 文件结束标志
‘02’ Extended Segment Address Record 延伸段地址
‘03’ Start Segment Address Record 起始延伸地址
‘04’ Extended Linear Address Record 扩展线性地址 也就是基地址
‘05’ Start Linear Address Record 程序起始地址也就是程序入口地址(main)
————————————————
参考文章:
【1】https://blog.csdn.net/qq_38646260/article/details/89047473
【2】https://blog.csdn.net/weixin_39752827/article/details/81477686

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-08-11 12:35:13  更:2021-08-11 12:37:52 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/12 17:22:10-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码