1.前言

本文主要讲述keil MDK 下STM32编译生成的的HEX镜像文件格式。并说明镜像load地址是如何添加进HEX文件的。

2.keil MDK如何在HEX文件中添加load addr

通过在keil mdk中进行如下的设置,则会将0x8019000的load addr加入到HEX文件中

图 镜像配置

3.HEX文件格式

冒号 本行数据长度 本行数据起始地址 数据类型 数据 校验码
  1 byte 2 bytes 1 byte n byte 1 byte

表 HEX文件格式

  • 以行为单位,每行以冒号开头,内容全部为16进制码(以ASCII码形式显示)
  • 在HEX文件里面,每一行代表一个记录。记录的基本格式为如上表所示

(1)第一个字节 表示本行数据的长度;

(2)第二、三字节表示本行数据的起始地址;

(3)第四字节表示数据类型,数据类型有:0x00、0x01、0x02、0x03、0x04、0x05。

'00' Data Rrecord:                                  用来记录数据,HEX文件的大部分记录都是数据记录

'01' End of File Record:                            用来标识文件结束,放在文件的最后,标识HEX文件的结尾

'02' Extended Segment Address Record:用来标识扩展段地址的记录

'03' Start Segment Address Record:       开始段地址记录

'04' Extended Linear Address Record:    用来标识扩展线性地址的记录

'05' Start Linear Address Record:           开始线性地址记录

(4)之后是数据

(5)最后一个字节 为校验和。

注:校验和的算法为:计算校验和前所有16进制码的累加和(不计进位),检验和 = 0x100 - 累加和

3.HEX实例

笔者说编译出的HEX文件内容如下:

:020000040801F1
:10900000E84D002039930108F5B30108F7B30108D2
:10901000F9B30108FBB30108FDB30108000000002B
:109020000000000000000000000000004D92010858
:10903000FFB3010800000000D59201082593010844 .... :00000001FF
  • 第一条语句:02 0000  04 0800  F2
冒号 本行数据长度 本行数据起始地址(偏移地址) 数据类型 数据 校验码
  1 byte 2 bytes 1 byte n byte 1 byte
02 0000 04 0801

F1

在上面的数据类型后2种记录(04,05)都是用来提供地址信息的。每次碰到这2个记录的时候,都可以根据记录计算出一个“基”地址。对于后面的数据记录,计算地址的时候,都是以这些“基”地址为基础的。

以我们的语句为例:第1条记录的长度为02,LOAD OFFSET为0000,RECTYPE为04,说明该记录为扩展段地址记录。数据为0801,校验和为F1。

从这个记录的长度和数据,我们可以计算出一个基地址,这个地址为(0x0801 << 16) = 0x0801 0000 ,后面的数据记录都以这个地址为基地址。

  • 第二条语句 :10900000E84D002039930108F5B30108F7B30108D2
冒号 本行数据长度 本行数据起始地址(偏移地址) 数据类型 数据 校验码
  1 byte 2 bytes 1 byte n byte 1 byte
: 10 9000 00 E84D002039930108F5B30108F7B30108 D2

第2条记录的长度为10(0x10=16字节),LOAD OFFSET为0000,RECTYPE为00('00' Data Rrecord:用来记录数据,HEX文件的大部分记录都是数据记录),数据为E84D002039930108F5B30108F7B30108 校验码为D2;

此时基地址为:0x0801 0000  加上偏移地址:0x9000   这条记录的16个字节的数据的起始地址为:0x0801 0000+ 0x9000 =0x0801 9000

  • 第四条语句:00000001FF”  (每一个.hex文件的最后一行都是固定为这个内容)
冒号 本行数据长度 本行数据起始地址(偏移地址) 数据类型 数据 校验码
  1 byte 2 bytes 1 byte n byte 1 byte
: 00 0000 01   FF

(每一个.hex文件的最后一行都是固定为这个内容)
记录的长度为00,LOAD OFFSET为0000,RECTYPE为01  (01' End of File Record:用来标识文件结束,放在文件的最后,标识HEX文件的结尾)

4.参考文献

[1] http://blog.csdn.net/yx_l128125/article/details/13624947

[转]HEX文件格式解析的更多相关文章

  1. hex文件格式

    hex文件格式是可以烧写到单片机中,被单片机执行的一种文件格式,生成Hex文件的方式有很多种,可以通过不同的编译器将C程序或者汇编程序编译生成hex.   Hex文件格式解析 Hex文件如果用特殊的程 ...

  2. ArcGIS三大文件格式解析

    原文:ArcGIS三大文件格式解析 Shape数据 Shapefile是ArcView GIS 3.x的原生数据格式,属于简单要素类,用点.线.多边形存储要素的形状,却不能存储拓扑关系,具有简单.快速 ...

  3. Android init.rc文件格式解析

    /***************************************************************************** * Android init.rc文件格式 ...

  4. mp4文件格式解析(转载)

    mp4文件格式解析 原作:http://blog.sina.com.cn/s/blog_48f93b530100jz4b.html 目前MP4的概念被炒得很火,也很乱.最开始MP4指的是音频(MP3的 ...

  5. C++PE文件格式解析类(轻松制作自己的PE文件解析器)

    PE是Portable Executable File Format(可移植的运行体)简写,它是眼下Windows平台上的主流可运行文件格式. PE文件里包括的内容非常多,详细我就不在这解释了,有兴趣 ...

  6. Intel HEX文件解析

    近期有一个需求就是为Arduino开发板做一个基于蓝牙的无线烧录程序.眼下的Arduino程序都是通过USB线连接到电脑的主机上,实际的传输过程是基于USB协议的,这个过程还是比較麻烦的.由于每次的编 ...

  7. HEX文件格式学习笔记

    这也是一篇学习摘抄:原文地址:http://blog.csdn.net/syrchina/article/details/7004998        为了编写一个可以按照自己的要求进行ISP的程序, ...

  8. 解析prototxt文件的python库 prototxt-parser(使用parsy自定义文件格式解析)

    解析prototxt文件的python库 prototxt-parser https://github.com/yogin16/prototxt_parser https://test.pypi.or ...

  9. mp4文件格式解析(转)

    mp4文件格式解析 MP4文件格式带数据详解 MP4文件格式的解析,以及MP4文件的分割算法

随机推荐

  1. 洛谷P2054 [AHOI2005]洗牌(扩展欧几里德)

    洛谷题目传送门 来个正常的有证明的题解 我们不好来表示某时刻某一个位置是哪一张牌,但我们可以表示某时刻某一张牌在哪个位置. 设数列\(\{a_{i_j}\}\)表示\(i\)号牌经过\(j\)次洗牌后 ...

  2. 自学Python1.5-Centos内python2识别中文

    自学Python之路 自学Python1.5-Centos内python2识别中文 方法一,python推荐使用utf-8编码方案 经验一:在开头声明: # -*- coding: utf-8 -*- ...

  3. emwin之LISTWHEEL控件之LISTWHEEL_SetPos函数的使用

    @2018-09-05 [小记] LISTWHEEL控件的LISTWHEEL_SetPos函数的使用注意事项: 该函数不能在创建窗口的WM_INIT_DIALOG分支下作为修改LISTWHEEL控件属 ...

  4. 「THUSCH 2017」大魔法师 解题报告

    「THUSCH 2017」大魔法师 狗体面太长,帖链接了 思路,维护一个\(1\times 4\)的答案向量表示\(A,B,C,len\),最后一个表示线段树上区间长度,然后每次的操作都有一个转移矩阵 ...

  5. sklearn 总结

    一张思维导图总结一下用到的大体模块:

  6. EFCodeFirst快速搭建入门

    EFCodeFirst快速搭建入门 1.新建Model类库项目. 添加EntityFramework.dll的引用. 编写实体类Course,Student. namespace EFCodeFirs ...

  7. Java:判断当前操作系统界面采用的主题是windows经典样式还是xp样式

    想起两三年前,发现写Java界面的时候,如果将当前界面的layout设为null,由于windows的不同主题界面下,标题栏的高度不一致,导致当前界面表现也不一致. 当时就想找到一个办法先判断当前用户 ...

  8. vue2.0 之条件渲染

    条件渲染v-if.v-show <template> <div> <a v-if="isPartA">partA</a> <a ...

  9. 转:scrollWidth,clientWidth,offsetWidth的区别

    scrollWidth:对象的实际内容的宽度,不包边线宽度,会随对象中内容超过可视区后而变大. clientWidth:对象内容的可视区的宽度,不包滚动条等边线,会随对象显示大小的变化而改变. off ...

  10. Scala进阶之路-并发编程模型Akka入门篇

    Scala进阶之路-并发编程模型Akka入门篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Akka Actor介绍 1>.Akka介绍 写并发程序很难.程序员不得不处 ...