Intel HEX文件是记录文本行的ASCII文本文件

合集下载

HEX文件转换为C文件的小工具

HEX文件转换为C文件的小工具

项目名称:HEX2C开发者:刘军华运行环境:Dos软件授权:免费软件大小:196KB版本信息:功能简介:Intel HEX文件是记录文本行的ASCII文本文件,在Intel HEX文件中,每一行是一个HEX 记录由十六进制数组成的机器码或者数据常量,Intel HEX文件经常被用于将程序或数据传输存储到ROM.EPROM,大多数编程器和模拟器使用Intel HEX文件.许多编程烧录文件都是HEX格式,而同时C语言又是最普遍的编程语言,所以在工作过程中,如果有一个小工具能够转换这两种语言,也许会给人们的工作带来一些便利。

所以,有了这个小工具。

HEX文件转换主要就是先记录记录的类型和地址,根据记录类型,分类处理。

如果是数据记录,则先写入记录的长度、地址和类型,再写入记录数据;如果是文件结束记录,直接写文件结束;如果是扩展段地址记录,则取出上次保存的数据记录的地址域得到地址,根据以下公式:绝对内存地址= 数据记录中的地址+ 移位后的扩展段地址,扩展段地址左移4位;如果是扩展线性地址记录,则取出上次保存的数据记录的地址域得到地址,根据算法:绝对内存地址= 数据记录中的地址+ 移位后的扩展线性地址,扩展线性地址左移16位。

C语言文件中,按照记录长度,记录地址,记录类型和数据记录的顺序来进行写入。

而数据以“{”开头,以“}”结束。

这个小工具的特点是:简单,针对性强。

只针对HEX文件转换成用户定义的C语言文件。

使用方法:这个小工具HEX2C在使用过程中,有以下三种格式1.HEX HEX文件地址C文件地址例如:HEX D:\HEX.hex D:\C.c2.HEX -s HEX文件地址-o C文件地址例如:HEX -s D:\HEX.hex -o D:\C.c3.HEX -o C文件地址-s HEX文件地址例如:HEX -o D:\C.c -s D:\HEX.hex当命令行参数类型不正确时,直接输出HELP(帮助)提示,告诉使用者这个工具的正确格式是什么。

HEX文件和BIN文件格式的区别

HEX文件和BIN文件格式的区别

HEX⽂件和BIN⽂件格式的区别在单⽚机开发中HEX⽂件和BIN⽂件是⾮常常见的烧写⽂件格式,以常⽤开发环境Keil为例,分别创建HEX和BIN⽂件,⽐如:1、创建HEX:在Keil⾥⾯可以通过勾选【魔法棒>Output>Creat HEX File】让⼯程输出HEX⽂件。

2、创建BIN:在Keil中在【魔法棒>User>After Build/Rebuild】标签下勾选Run #1,同时在其对应的User Command ⽂本框中输⼊fromelf --bin --output=@L.bin !L编译后就会输出BIN⽂件。

⾔归正传,先简单描述下HEX(左边)和BIN(右边)⽂件的区别:1、HEX⽂件HEX⽂件中同时包含的数据和地址信息,所以在烧写或下载HEX⽂件的时候,⼀般都不需要⽤户指定地址。

2、BIN⽂件BIN⽂件只有纯粹的数据(代码)信息,并不包含地址,所以烧写BIN时就需要指定烧写地址,⼀般可以在烧写⼯具上修改。

下⾯看⼀个Keil下⽣成的HEX和BIN⽂件的部分代码:HEX⽂件内容都是ASCII编码得到的,可以⽤本本编辑器直接打开,BIN⽂件不能⽤编辑器直接查看,可以把它转换成16进制然后显⽰(如在notepad++下装⼀个插件就好:):很直观的可以看到BIN⽂件只是HEX⽂件中的数据区域。

HEX格式解读: HEX⽂件每⼀⾏代表⼀个记录(RECORD),其基本格式如下 RECORD MARK 冒号(:) 表⽰起始标志 LOAD RECLEN 数据长度 即INFO or DATA 段的数据长度 OFFSET 地址偏移 指定相对基地址的偏移量 RECTYP 记录类型 记录类型:“00”数据记录 “01”⽂件结束记录 '02'扩展段地址记录 '03'起始段地址记录 '04'扩展线性地址记录 '05'开始线性地址记录 INFO or DATA 数据信息 校验值⾸先要注意的时,1-byte中的byte在HEX⽂件中因为经过ASCII编码的所以⽤两个字符表⽰⼀个16进制即⼀个字节,,在BIN⽂件中则是直接⽤⼀个字节表⽰这两字符,上⾯的图很直观下⾯以HEX⽂件第⼀⾏为例,它的含义主要有,02表⽰数据段“6000”长度为2,0000表⽰偏移地址,04表⽰记录类型为扩展线性地址的记录,6000表⽰线性地址的基地址并且表⽰的时[16-31]区域即⾼位地址,[0-15]区域即低位默认为0。

如何读懂hex文件

如何读懂hex文件

如何读懂hex⽂件什么是Intel HEX ⽂件格式Intel HEX ⽂件是遵循Intel HEX ⽂件格式的ASCII ⽂本⽂件。

在Intel HEX ⽂件的每⼀⾏都包含了⼀个HEX 记录。

这些记录是由⼀些代表机器语⾔代码和常量的16进制数据组成的。

Intel HEX ⽂件常⽤来传输要存储在ROM 或者EPROM 中的程序和数据。

⼤部分的E PROM 编程器能使⽤Intel HEX ⽂件。

Intel HEX由任意数量的⼗六进制记录组成。

每个记录包含5个域,它们按以下格式排列:Start Code每个Intel HEX 记录都由冒号开头Byte count是数据长度域,它代表记录当中数据字节的数量Address是地址域,它代表记录当中数据的起始地址Record type是代表HEX记录类型的域,它可能是以下数据当中的⼀个:00-数据记录01-⽂件结束记录02-扩展段地址记录03-开始段地址记录04-扩展线性地址记录05-开始线性地址记录Data是数据域,⼀个记录可以有许多数据字节.记录当中数据字节的数量必须和数据长度域中指定的数字相符Checksum是校验和域,它表⽰这个记录的校验和.校验和的计算是通过将记录当中所有⼗六进制编码数字对的值相加,以256为模进⾏以下补⾜。

HEX⽂件以⾏为单位。

每⾏以字符‘:’ (0x3a)开头,以回车换⾏符0x0d, 0x0a为结束。

每⾏开始和结束之间的所有内容,都是以字符形式表现的。

例如数据如果是 0x1A ,那么转换到HEX格式的⾏⾥⾯就是0x31 0x41。

如果数据是16bit的,例如地址,则先显⽰⾼位,后显⽰底位。

例如 0x1234,转换成HEX格式⽂件后变成 0x31 0x32 0x33 0x34,显⽰出来以后就是1234。

将数据部分内容每2个字符看做⼀个HEX数据,例如::020*********FA , 我把它看做 0x02 0x00 0x00 0x04 0x00 0x00 0xFA第⼀个 0x02 为数据长度。

HEX格式介绍及分析程序

HEX格式介绍及分析程序

HEX格式介绍及分析程序
HEX是一种十六进制格式,用于将二进制数据编码成可读的文本格式。

在计算机科学领域,HEX格式通常用于表示机器指令、数据结构或者程序。

HEX格式通常以一个冒号开始,后跟一个表示地址的四位十六进制数。

然后是16个字节的十六进制表示。

每个字节之间通常用一个空格分隔,
以提高可读性。

在16个字节之后通常会跟着一个空格再跟着16个ASCII
字符的文本表示。

这些ASCII字符是对相应字节的可打印表示。

为了更好地理解HEX格式,我们可以尝试分析一个简单的程序的HEX
表示。

假设我们有一个包含两个指令的程序:
地址指令
00002010
0002C012
这个程序首先加载从地址0010开始的两个字节的值到A寄存器中(2010),然后将A寄存器的值存储到地址0012(C012)。

HEX格式的表
示将如下所示:
通过分析HEX表示,我们可以更好地理解程序的指令和数据在内存中
的布局,以及通过更改HEX文件来修改程序的能力。

HEX格式介绍及分析程序

HEX格式介绍及分析程序

Intel HEX格式你熟悉吗?——HEX格式介绍及分析程序来源:21ic 作者:LPC900栏目:MCU技术INTEL HEX格式你熟悉吗?——HEX格式介绍及分析程序用Keil C51编程时,可以自动生成INTEL HEX格式的程序文件。

INTEL HEX文件通常由若干个记录组成,每个记录都具有如下的形式::ll AAAA ttdd...ddcc其中:开头的冒号“:”是记录起始标志。

“ll”是记录的有效数据长度。

“AAAA”是装入地址。

“tt”是记录类型。

00表示数据记录,01表示结束。

“dd...dd”是记录中的有效数据。

数据个数必须与“ll”一致。

“cc”校验和。

将它的值与记录中所有字节(冒号“:”除外)内容相加,其结果应为00,否则出错。

举例:某行记录的内容是“:05012000B5412B215543”,则数据长度ll是05H,装入地址是0120H,记录类型是数据记录,有效数据是B5H、41H、2BH、21H、55H,校验和为43H。

在文件的最后一行,总是“:00000001FF”,表示无任何有效数据,装入地址为0000H(没有用处),记录类型为01H,表示结束,校验和当然是FFH了。

以下是一个分析INTEL HEX记录的简单程序:/*INTEL HEX.h分析处理INTEL HEX格式记录的头文件*/#ifndef _INTEL_HEX_H_#define _INTEL_HEX_H_#include <ctype.h>#include <string.h>//定义INTEL HEX记录的结构struct{unsigned CHAR ll; //长度unsigned int AAAA; //地址unsigned CHAR tt; //记录类型,0-数据,1-终止CHAR dd[16]; //数据CHAR cc; //校验和}INTEL HEX;/*函数:AnalyseHEX()功能:分析一条HEX记录(把INTEL HEX记录的文本转换成INTEL HEX结构)参数:hex[]是记录的文本一行内容转换后的结果保存在INTEL HEX结构中返回:0-转换成功1-HEX记录文本中有错误*/bit AnalyseHEX(CHAR hex[]){unsigned CHAR i;unsigned CHAR j;unsigned CHAR t;unsigned CHAR n;unsigned CHAR cc;unsigned int x;//检查冒号if ( hex[0] != ':' ) return 1;//检查长度t = (toint(hex[1])<<4) + toint(hex[2]);if ( t > 16 ) return 1;n = 2 * t + 11;if ( n != strlen(hex) ) return 1;INTEL HEX.ll = t;cc = t;//提取地址t = (toint(hex[3])<<4) + toint(hex[4]);cc += t;x = (unsigned int)t;x <<= 8;t = (toint(hex[5])<<4) + toint(hex[6]);cc += t;x += (unsigned int)t;INTEL HEX.AAAA = x;//提取记录类型t = (toint(hex[7])<<4) + toint(hex[8]);if ( (t==0) || (t==1) ){cc += t;INTEL HEX.tt = t;}else{return 1;}//提取数据i = 9;if ( t == 0 ){j = 0;n = INTEL HEX.ll;do{t = (toint(hex[i++])<<4);t += toint(hex[i++]);cc += t;INTEL HEX.dd[j++] = t;} while ( --n != 0 );}//提取校验和t = (toint(hex[i++])<<4);t += toint(hex[i++]);cc += t;INTEL HEX.dd[j++] = t;//检查校验if ( cc == 0 )return 0;elsereturn 1;}#endif。

hex和bin文件的由来

hex和bin文件的由来

hex和bin文件的由来与计算机编程和嵌入式系统开发有关。

hex文件是以ASCII文本形式保存编译后的二进制文件信息。

它不仅保存了Bin文件的内容,还包含了一些配置信息。

hex文件使用“:”开始,之后是地址域、数据类型、数据域和校验和。

hex文件可以由下载器(如jlink)烧写到MCU的ROM中。

而Bin文件是MCU固件烧写的最终形式,也就是说MCU的ROM中烧写的内容完全就是Bin文件的内容。

hex文件可以说是MCU固件的中间形式,由下载器的软件根据hex文件生成Bin文件再烧写到MCU的ROM 中。

以上信息仅供参考,如需了解更多信息,建议查阅计算机编程和嵌入式系统开发的相关书籍或咨询专业人士。

单片机下载文件:HEX文件和BIN文件的区别

单片机下载文件:HEX文件和BIN文件的区别

单片机下载文件:HEX文件和BIN文件的区别单片机程序写好之后,我们都要把程序下载到单片机的内存中,单片机才会按照程序员的逻辑执行命令实现功能。

之前也讲过下载单片机的几种方式,比如ISP下载,JTAG下载,下载文件的格式最常见的是hex文件,这个格式大家都是知道的,还有一种bin文件是单片机的下载文件。

下面介绍这两种格式的区别。

HEX文件和BIN文件是我们经常碰到的2种文件格式。

下面简单介绍一下这2种文件格式的区别:1. hex文件包含地址信息。

在用ISP 方式烧写程序时,我们都有这样的经验:1)选择单片机型号;2)选择串口号;3)设置波特率(或者默认);4)选择下载的文件;5)点击下载按钮下载。

如下图所示。

经过这几步后,程序下载工作就完成了,在以上的步骤中我们并没有选择要把程序下载到单片机的哪块内存中,即不需要设置地址。

因为HEX文件内部的信息已经包括了地址。

而烧写BIN文件的时候,用户是一定需要指定地址信息的。

单片机多下载hex文件。

2. BIN文件格式只包括了数据本身,没有包含地址bin文件本身只是数据,没有包含地址信息,所以在下载bin文件时需要选择内存的起始地址和终止地址,即要把bin文件下载到指定的内存空间。

通常需要指定程序内存地址的芯片为ARM芯片和DSP 芯片。

3、HEX文件和BIN文件大小不一样对于bin文件,通过右键属性查看到的文件的大小就是数据的实际大小。

而对HEX文件而言,你看到的文件大小并不是实际的数据的大小。

一是因为HEX文件是用ASCII来表示数据,二是因为HEX文件本身还包括别的附加信息。

hex文件的大小该怎么看呢?之前我推送过查看方法,忘记的同学可以点下面的链接查看:。

HEX文件格式

HEX文件格式

Intel HEX文件是记录文本行的ASCII文本文件,在Intel HEX文件中,每一行是一个HEX记录,由十六进制数组成的机器码或者数据常量。

Intel HEX文件经常被用于将程序或数据传输存储到ROM、EPROM,大多数编程器和模拟器使用Int el HEX文件。

很多编译器的支持生成HEX格式的烧录文件,尤其是Keil c。

但是编程器能够下载的往往是BIN格式,因此HEX转BIN是每个编程器都必须支持的功能。

HEX格式文件以行为单位,每行由“:”(0x3a)开始,以回车键结束(0x0d, 0x0a)。

行内的数据都是由两个字符表示一个16进制字节,比如”01”就表示数0 x01;”0a”,就表示0x0a。

对于16位的地址,则高位在前低位在后,比如地址0x010a,在HEX格式文件中就表示为字符串”010a”。

下面为HEX文件中的一行::10000000FF0462FF051EFF0A93FF0572FF0A93FFBC“:”表示一行的开始。

“:”后的第1,2个字符“10”表示本行包含的数据的长度,这里就是0x10即16个。

第3,4,5,6个字符“0000”表示数据存储的起始地址,这里表示从0x0000地址开始存储16个数据,其中高位地址在前,低位地址在后。

第7,8个字符“00”表示数据的类型。

该类型总共有以下几种:00 ----数据记录01 ----文件结束记录02 ----扩展段地址记录04 ----扩展线性地址记录这里就是0x00即为普通数据记录。

自后的32个字符就是本行包含的数据,每两个字符表示一个字节数据,总共有16个字节数据跟行首的记录的长度相一致。

最后两个字符表示校验码。

每个HEX格式的最后一行都是固定为::00000001FF以上的信息其实就足够进行HEX转BIN格式的程序的编写。

首先我们只处理数据类型为0x00及0x01的情况。

0x02表示对应的存储地址超过了64K,由于我的编程器只针对64K以下的单片机,因此在次不处理,0x04也是如此。

一种英特尔Hex文件的解析和填充方法

一种英特尔Hex文件的解析和填充方法

4 Hex 文件解析的实现
图 1 中展示的 Hex 文件内容,PROM 从地址 0x8001000 至 0x803FFFFF,共计 4032Kbytes。 文件以 Record Type 0x04 为起始,以 Record Type 0x01 为结束,中间行穿插着 Record Type 0x04,分别记录了不同的 linear Address,如果上一个 Record 的结束地址与当前 Record 的起始地址不连续,则视 为 Block 中断。
容位于 MCU PROM 中的哪个位置; ● Record 的类型,表示第 5 个域中所含内容的意义,所
含的是一个基地址或数据; ● Record 的校验和,表示这个 Record 中所含数据的校
验和。
● RecordType 0x00,表示域 5 中的内容是数据。 ● RecordType 0x01,表示这是整个 hex 文件中最后一个 record。 ● RecordType 0x02,可同时用于 16 位和 32 位格式的 MCU,表示 16 位地址中的高 12 位,低 4 位是 0。 ● RecordType 0x03,可同时用于 16 位和 32 位格式的 MCU,是专门针对 8086 和 80186 这种架构的 MCU,DATA 中定义的 4 字节数据是 CS 和 IP 寄存器中的值。 ● RecordType 0x04,仅针对 32 位格式的 MCU,表示的 是 32 位地址的高 16 位基地址,低 16 位是 0x0000。 ● RecordType 0x05,这种 record type 仅针对 32 位格式 的 MCU,表示的是这个 hex 文件内容的起始执行地址。 根据 Record Type 对 Hex 文件中的每个 Record 进行相应 意义的解析,从而梳理出 Hex 文件的起始执行地址,每个 Block 的起始地址和长度。

《hex文件(是文本文件)和bin文件(是二进制文件)的区别》

《hex文件(是文本文件)和bin文件(是二进制文件)的区别》

************************************************************************************ hex文件:是ASCII码的文本文件,由“:”开头的一行行的记录组成,每个记录的格式如下:***********************************************************************************:ll aaaa tt[dd...]cc记录格式中每个字符表示一个16进制数(4bit),前4个字节和最后一个字节是附加信息,[dd...]是数据(代码)格式含义解释如下:<:> --- hex记录开始符号<ll> --- dd的长度<aaaa> --- dd的地址<tt> --- hex记录的类型,含义如下:00 = data record (数据记录)01 = end-of-file record (文件结束记录)02 = extended segment address record (8086段地址记录,即4~19的高16位地址)04 = extended linear address record(80386线性地址记录,分成高16位和低16位分别表示,如下面的截图)<dd...> --- 数据cc --- 记录校验和************************************************************************************ bin文件:是二进制文件,只包含数据。

***********************************************************************************hex文件和bin文件的区别一个数据比如0x12h,在hex文件中,由两个字节的ASCII码组成:0x31、0x32表示.在bin文件中,直接是0x12.hex文件第二条记录的数据如黄色区域粉红框中的“04”,表示是记录是按照80386模式(32位地址)的记录;绿色框中的是高16位地址;蓝色框中的是低16位地址,当低16位地址超过0x0000FFFF时,会变为下图:bin文件用hex查看器打开,只包含hex文件的数据区。

OllyDebug工具的使用

OllyDebug工具的使用

OllyDebug工具的使用【摘要】OLLYDBG是一个新的动态追踪工具,将IDA与SoftICE结合起来的思想,Ring 3级调试器,非常容易上手,己代替SoftICE成为当今最为流行的调试解密工具了。

同时还支持插件扩展功能,是目前最强大的调试工具。

【关键词】OLLYDBG 反汇编调试专用工具一、OllyDBG 的安装OllyDBG 2.01b版的发布版本是个 ZIP 压缩包,只要解压到一个目录下,运行其中的OllyDBG.exe 就可以了。

汉化版的发布版本是个 RAR 压缩包,同样只需解压到一个目录下运行 OllyDBG.exe 即可(如图1-1)。

在其文件夹中:Plugin目录为OllyDebug软件的插件的存放文档。

UDD 目录的作用是保存你调试的工作。

比如你调试一个软件,设置了断点,添加了注释,一次没做完,这时 OllyDBG 就会把你所做的工作保存到这个 UDD 目录,以便你下次调试时可以继续以前的工作。

如果不设置这个 UDD 目录,OllyDBG 默认是在其安装目录下保存这些后缀名为 udd 的文件,时间长了就会显的很乱,所以还是建议专门设置一个目录来保存这些文件。

图1-1(注:对于初学者本软件不需用额外进行设置,全部使用默认设置即可。

)二、OllyDBG的操作界面OllyDBG的操作界面主要如图1-2所示。

1 23 4图1-2整个操作界面分成四大部分:1.反汇编窗口:显示被调试程序的反汇编代码,具体的有:地址:本条汇编代码的内存地址。

HEX 数据:Intel HEX文件是记录文本行的ASCII文本文件,由十六进制数组成的机器码或者数据常量,Intel HEX文件经常被用于将程序或数据传输存储ROM、EPROM,大多数编程器和模拟器使用Intel HEX文件。

反汇编:由反汇编得到的代码。

注释2.寄存器窗口:显示当前所选线程的CPU 寄存器内容,可以实时查看所有寄存器的变化情况。

3.内存数据窗口:显示内存或文件的内容,并且可以用快捷键Ctrl+G方便的查看和修改内存中的任意位置的数据,就像是一个小型的“内存编辑器”。

hex、bin、elf、axf文件区别

hex、bin、elf、axf文件区别

hex,bin,axf,elf的区别一、HEX 和 BINHex文件,这里指的是Intel标准的十六进制文件,也就是机器代码的十六进制形式,并且是用一定文件格式的ASCII码来表示.具体格式介绍如下: Intel hex 文件格式Intel hex 文件常用来保存单片机或其他处理器的目标程序代码。

它保存物理程序存储区中的目标代码映象。

一般的编程器都支持这种格式。

Intel hex 文件全部由可打印的ASCII字符组成,如下例所示::2000000012014c75a800e4f508f509780a7a78e4f608dafcd283fcfded240af9a 7050dbd81:2000200000010ced2488ec34ff50edc283e4fcfded240af9e76d7013ed33e43c7 00d0dbd2a:2000400000010ced2488ec34ff50e50509e50970020508e50924a8e50834fd50a ee4f50874Intel hex 由一条或多条记录组成,每条记录都由一个冒号“:”打头,其格式如下::CCAAAARR...ZZ其中:CC本条记录中的数据字节数AAAA本条记录中的数据在存储区中的起始地址RR记录类型:00 数据记录 (data record)01 结束记录 (end record)02 段记录 (paragraph record)03 转移地址记录 (transfer address record)...数据域ZZ数据域校验和Intel hex文件记录中的数字都是16进制格式,两个16进制数字代表一个字节。

CC域是数据域中的实际字节数,地址、记录类型和校验和域没有计算在内。

校验和是取记录中从数据字节计数域(CC)到数据域(...)最后一个字节的所有字节总和的2的补码。

Bin文件是最纯粹的二进制机器代码,没有格式,或者说是"顺序格式"按assembly code顺序翻译成binary machine code.Bin是直接的内存映象的表示。

hex文件

hex文件

hex文件解析Keil开发环境编程时对源程序进行编译链接后都可以成一个可执行文件即hex文件,但是有不完全是一个可执行文件。

然后可以通过烧录工具烧写到对应的单片机的flash中,当然也还有其他方法可以进行烧录。

大家在编程时是否对生成的hex文件有这样的疑问:1、当hex文件的大小大于单片机的flash时烧录工具还是可以把hex文件烧写到flash中呢;2、单片机运行的是二进制指令和数据,那么hex文件的内容是否都是二进制数呢;3、烧录工具是根据什么把程序指令和数据烧写到flash固定的位置呢。

我们就带着这三个疑问深入学习hex文件,想深入理解hex文件必须从内容入手。

查看hex 文件的很简单,用文本随便打开一个文件都可以看到hex文件的内容。

例如::020*********F2:1000000080040020690100087101000873010008E4:1000100000000000000000000000000000000000E0:100020000000000000000000000000007501000852:1000300000000000000000007701000879010008BE``````````````````````````````:1005E0002001000800000000006CDC020*********:1005F00000000000010203040607080900000000D3:04000005080000C12E:00000001FF上面就是一个hex文件内容首尾的一部分数据,从内容中很明显可以看出这不是二进制数据。

Hex文件是用ASCII来表示二进制的数值,十六进制数组成的指令或者数据,每一行就是一个hex记录。

由于单片机执行的只能是二进制指令和数据,而hex文件是十六进制数,所以烧录器的工作必然有一个进制转换机制。

具体机制怎么实现暂时可以不管,知道是烧录器处理的就行了。

Intel的hex格式含义

Intel的hex格式含义

Intel的hex格式含义Intel HEX file(文件名.hex)是具有约定格式的ASCII文本文件。

文件中每一行包含一个HEX 记录(record)。

记录由十六进制数组成,这些数字代表机器指令码或常量。

Intel HEX files 用来向ROM中传递代码和数据,即它和Bin文件类似,指导下载程序或仿真器将指令码和数据下载到ROM存储器特定的位置上。

Intel HEX file可以包含任意多行记录(record),每个record主要由5个部分(域)组成,每部分至少包含两个十六进制字符,即一个字节(8位),其具体形式为“:llaaaatt[dd...]cc ”其中:“:”表示record的开始“ll”表示record中数据位(dd)的长度(几个字节)“aaaa”表示record中的数据存储起始地址“tt”表示record类型,可以为00(数据record),01(文件结束record),02(扩展段地址record),04(扩展线性地址record)“dd”表示record数据的一位,一个record可能包含多个数据字节,数据字节的数量必须与ll中指定的相一致“cc”表示record的校验域,下面给出一个实例:10008000AF5F67F0602703E0322CFA92007780C361:1000900089001C6B7EA7CA9200FE10D2AA00477D81:0B00A00080FA92006F3600C3A00076CB:00000001FF第一行,":"符号表明记录的开始. 后面的两个字符表明记录的长度,这里是10h. 后面的四个字符给出调入的地址,这里是0080h. 后面的两个字符表明记录的类型;0 数据记录 1 记录文件结束 2 扩展段地址记录 3 开始段地址记录 4 扩展线性地址记录 5开始线性地址记录后面则是真正的数据记录, 最后两位是校验和检查,它加上前面所有的数据和为0.最后一行特殊,总是写成这个样子.扩展Intel Hex的格式(最大1M): 由于普通的Intel的Hex记录文件只能记录64K的地址范围, 所以大于64K的地址数据要靠扩展Intel Hex格式的文件来记录.对于扩展形式Hex文件,在每一个64K段的开始加上扩展的段地址规定,下面的数据地址均在这个段内,除非出现新的段地址定义.一个段地址定义的格式如下:起始符长度起始地址扩展段标示扩展段序号无用累加和: 02 0000 02 3000 EC段地址的标识符是第四组数据02,表示扩展地址段的定义,再后面的以为HEX数表示段的数目, 上面的定义为3,表示段地址是3,所以下面的数据地址是3 + XX(XX是64K段内的地址)目标文件.HEX的各部分具体含义.HEX是Intel的目标文件格式。

Intel HEX文件

Intel HEX文件
数据记录的具体格式:
+---------------------------------------------------------------+ | RECORD | RECLEN | LOAD | RECTYPE | INFO or DATA | CHKSUM | | MARK ':' | | OFFSET | '00' | | | +---------------------------------------------------------------+ | 1-byte | 1-byte | 2-byte | 1-byte | n-byte | 1-byte | +---------------------------------------------------------------+
2 -
BIN文件格式 对二进制文件而言,其实没有”格式”。 文件只是包括了纯粹的二进制数据。
3 -
HEX文件格式 HEX文件都是由记录(RECORD)组成的。 在HEX文件里面,每一行代表一个记录。
记录的基本格式为:
+---------------------------------------------------------------+ | RECORD | RECLEN | LOAD | RECTYPE | INFO or DATA | CHKSUM | | MARK ':' | | OFFSET | | | | +---------------------------------------------------------------+ | 1-byte | 1-byte | 2-byte | 1-byte | n-byte | 1-byte | +---------------------------------------------------------------+

MC8051_IP核简单指令的仿真步骤

MC8051_IP核简单指令的仿真步骤

1.MC8051 IP核简单指令的仿真步骤(作者:老邹 zouzhibin@ MC8051 IP核下载地址 http://oregano.at/ip/8051.htm)为了能够比较仔细的观察、分析、验证MC8051 IP核,我让MC8051 IP核运行一个简单的程序,利用ModelSim仿真,然后和工业标准的8051微控制器指令集对比结果,查看MC8051 IP Core和工业标准8051是否兼容。

1.1仿真步骤整个仿真过程步骤如下:1、设计程序,输出hex文件利用Keil公司的C51开发工具uVision3建立工程,编写仿真程序,编译工程,输出以Intel HEX文件格式保存下来的hex文件。

Intel HEX文件是由一行行符合Intel HEX文件格式的文本所构成的ASCII文本文件。

Intel HEX由任意数量的十六进制记录组成。

每个记录包含5个域,它们按以下格式排列::LLAAAATT[DD...]CC每一组字母对应一个不同的域,每一个字母对应一个十六进制编码的数字。

每一个域由至少两个十六进制编码数字组成,它们构成一个字节,就像以下描述的那样: : 每个Intel HEX记录都由冒号开头.LL 是数据长度域,它代表记录当中数据字节(DD)的数量.AAAA 是地址域,它代表记录当中数据的起始地址.TT 是代表HEX记录类型的域,它可能是以下数据当中的一个:00–数据记录 01-文件结束记录 02–扩展段地址记录 04–扩展线性地址记录DD 是数据域,它代表一个字节的数据.一个记录可以有许多数据字节.记录当中数据字节的数量必须和数据长度域(LL)中指定的数字相符.CC 是校验和域,它表示这个记录的校验和.校验和的计算是通过将记录当中所有十六进制编码数字对的值相加,以256为模进行以下补足.2、导入ROM文件利用工具hex2dual.exe(在目录mc8051_design\msim中有hex2dual.c,编译可得exe 文件)将hex文件转换成程序ROM数据格式dua文件,将此文件更名为mc8051_rom.dua,拷贝到”mc8051_design\msim”目录中即可。

Keil生成的Hex文件详解

Keil生成的Hex文件详解

Keil HEX文件是由一行行符合Intel HEX文件格式的文本所构成的ASCII文本文件。

在Intel HEX文件中,每一行包含一个HEX记录。

这些记录由对应机器语言码和/或常量数据的十六进制编码数字组成。

Intel HEX文件通常用于传输将被存于ROM或者EPROM中的程序和数据。

大多数EPROM编程器或模拟器使用Intel HEX文件。

记录格式Intel HEX由任意数量的十六进制记录组成。

每个记录包含5个域,它们按以下格式排列::llaaaatt[dd...]cc每一组字母对应一个不同的域,每一个字母对应一个十六进制编码的数字。

每一个域由至少两个十六进制编码数字组成,它们构成一个字节,就像以下描述的那样:: 每个Intel HEX记录都由冒号开头.ll 是数据长度域,它代表记录当中数据字节(dd)的数量.aaaa 是地址域,它代表记录当中数据的起始地址.tt 是代表HEX记录类型的域,它可能是以下数据当中的一个:00 –数据记录01 –文件结束记录02 –扩展段地址记录04 –扩展线性地址记录dd 是数据域,它代表一个字节的数据.一个记录可以有许多数据字节.记录当中数据字节的数量必须和数据长度域(ll)中指定的数字相符.cc 是校验和域,它表示这个记录的校验和.校验和的计算是通过将记录当中所有十六进制编码数字对的值相加,以256为模进行以下补足.数据记录Intel HEX文件由任意数量以回车换行符结束的数据记录组成.数据记录外观如下::10 2462 00 464C5549442050524F46494C4500464C 33其中:10 是这个记录当中数据字节的数量.2462 是数据将被下载到存储器当中的地址.00 是记录类型(数据记录)464C…464C是数据.33 是这个记录的校验和.扩展线性地址记录(HEX386)扩展线性地址记录也叫作32位地址记录或HEX386记录.这些记录包含数据地址的高16位.扩展线性地址记录总是有两个数据字节,外观如下::02000004FFFFFC其中:02 是这个记录当中数据字节的数量.0000 是地址域,对于扩展线性地址记录,这个域总是0000.04 是记录类型04(扩展线性地址记录)FFFF 是地址的高16位.FC 是这个记录的校验和,计算方法如下:01h + NOT(02h + 00h + 00h + 04h + FFh + FFh).当一个扩展线性地址记录被读取,存储于数据域的扩展线性地址被保存,它被应用于从Intel HEX文件读取来的随后的记录.线性地址保持有效,直到它被另外一个扩展地址记录所改变. 通过把记录当中的地址域与被移位的来自扩展线性地址记录的地址数据相加获得数据记录的绝对存储器地址.以下的例子演示了这个过程..来自数据记录地址域的地址2462扩展线性地址记录的数据域+ FFFF------------绝对存储器地址FFFF2462扩展段地址记录(HEX86)扩展段地址记录也叫HEX86记录,它包括4-19位数据地址段.扩展段地址记录总是有两个数据字节,外观如下::020*********EA其中:02 是记录当中数据字节的数量.0000 是地址域.对于扩展段地址记录,这个域总是0000.02 是记录类型02(扩展段地址记录)1200 是地址段.EA 是这个记录的校验和,计算方法如下:01h + NOT(02h + 00h + 00h + 02h + 12h + 00h).当一个扩展段地址记录被读取,存储于数据域的扩展段地址被保存,它被应用于从Intel HEX 文件读取来的随后的记录.段地址保持有效,直到它被另外一个扩展地址记录所改变.通过把记录当中的地址域与被移位的来自扩展段地址记录的地址数据相加获得数据记录的绝对存储器地址.以下的例子演示了这个过程..来自数据记录地址域的地址2462扩展段地址记录数据域+ 1200---------绝对存储器地址00014462文件结束(EOF)记录Intel HEX文件必须以文件结束(EOF)记录结束.这个记录的记录类型域的值必须是01.EOF记录外观总是如下::00000001FF其中:00 是记录当中数据字节的数量.0000 是数据被下载到存储器当中的地址.在文件结束记录当中地址是没有意义被忽略的.0000h是典型的地址.01 是记录类型01(文件结束记录)FF 是这个记录的校验和,计算方法如下:01h + NOT(00h + 00h + 00h + 01h).:02 0000 04 0800 F2:10 0000 00 7806002051040008690200086B020008 0D注意:地址是大开端,0800+0000 = 0x0800000078060020是MSP初始值,其实为0x20000678,是小开端。

单片机烧录文件HEX文件格式说明

单片机烧录文件HEX文件格式说明

HEX文件格式说明在我讲解《微型计算机控制技术》的时候,一个学生问我关于HEX的内容解释时,我的解释不够清晰,感觉不太,我下课后立刻上网查找收集资料,并且整理如下,同时发给学生一份。

整理如下:概念描述HEX文件格式是一种能够烧写到单片机中,被单片机执行的文件格式。

可以使用不同的编辑器将C 或汇编源文件编译成HEX文件,如IAR,KEIL等。

Hex文件是遵循Hex文件格式的ASCII文本文件。

在Hex文件的每一行中都包含了一个hex记录。

这些记录是由一些代表机器语言代码和常量的16进制数据组成。

Hex文件常用来传输要存储在ROM、EPROM或者Flash中的程序和数据。

大部分的EPROM编程器都能使用Hex文件。

格式介绍Hex由任意数量的十六进制记录组成。

每个记录包含6个域,它们按下列格式排列。

| MARK | RECLEN | OFFSET | RECTYP | DA TA | CHKSUM |,实际表示如下例1::04010C00303230005D用以下表1解释上述格式:1Byte(8 bit)用表 1 HEX格式组成| MARK |——(1Byte)Start Code(冒号):每个HEX记录都由冒号开头;| RECLEN |——(1Byte)Byte count(本行数据长度):是数据长度域,它代表记录中数据的字节量,如例1中的04表示本条记录中有4个字节的数据;| OFFSET |——(2 Byte)Address(本行数据的起始地址):是地址域,它代表记录当中数据的起始地址;如例1中的010C表示本条记录中第一个数据30的地址为010C。

| RECTYP |-----> (1 Byte)Record type(数据类型):是代表HEX记录类型的域,它可能是以下数据当中的一个:例子中的00表示该行为数据记录。

表 2 数据类型对照表| DATA |——(n Byte)Data(数据):是数据域,一个记录可以有许多数据字节.记录当中数据字节的数量必须和数据长度域中指定的数字相符;最多0xFF个。

2016年度精品--HEX文件转换为C文件的小工具

2016年度精品--HEX文件转换为C文件的小工具

项目名称:HEX2C开发者:刘军华运行环境:Dos软件授权:免费软件大小:196KB版本信息:功能简介:Intel HEX文件是记录文本行的ASCII文本文件,在Intel HEX文件中,每一行是一个HEX 记录由十六进制数组成的机器码或者数据常量,Intel HEX文件经常被用于将程序或数据传输存储到ROM.EPROM,大多数编程器和模拟器使用Intel HEX文件.许多编程烧录文件都是HEX格式,而同时C语言又是最普遍的编程语言,所以在工作过程中,如果有一个小工具能够转换这两种语言,也许会给人们的工作带来一些便利。

所以,有了这个小工具。

HEX文件转换主要就是先记录记录的类型和地址,根据记录类型,分类处理。

如果是数据记录,则先写入记录的长度、地址和类型,再写入记录数据;如果是文件结束记录,直接写文件结束;如果是扩展段地址记录,则取出上次保存的数据记录的地址域得到地址,根据以下公式:绝对内存地址= 数据记录中的地址+ 移位后的扩展段地址,扩展段地址左移4位;如果是扩展线性地址记录,则取出上次保存的数据记录的地址域得到地址,根据算法:绝对内存地址= 数据记录中的地址+ 移位后的扩展线性地址,扩展线性地址左移16位。

C语言文件中,按照记录长度,记录地址,记录类型和数据记录的顺序来进行写入。

而数据以“{”开头,以“}”结束。

这个小工具的特点是:简单,针对性强。

只针对HEX文件转换成用户定义的C语言文件。

使用方法:这个小工具HEX2C在使用过程中,有以下三种格式1.HEX HEX文件地址C文件地址例如:HEX D:\HEX.hex D:\C.c2.HEX -s HEX文件地址-o C文件地址例如:HEX -s D:\HEX.hex -o D:\C.c3.HEX -o C文件地址-s HEX文件地址例如:HEX -o D:\C.c -s D:\HEX.hex当命令行参数类型不正确时,直接输出HELP(帮助)提示,告诉使用者这个工具的正确格式是什么。

hex是什么文件格式?.hex文件如何打开?

hex是什么文件格式?.hex文件如何打开?

hex是什么⽂件格式?.hex⽂件如何打开?
有时候⽤记事本打开⽂件时会出现⼀些全是数字加字母的代码,其实这个就是hex⽂件,Intel HEX⽂件是记录⽂本⾏的ASCII ⽂本⽂件,在Intel HEX⽂件中,每⼀⾏包含⼀个HEX记录。

hex是什么⽂件?
hex的全称是Intel HEX,此类⽂件通常⽤于传输将被存于ROM或者EPROM中的程序和数据。

是由⼀⾏⾏符合Intel HEX⽂件格式的⽂本所构成的ASCII⽂本⽂件。

⼤多数EPROM编程器或模拟器使⽤Intel HEX⽂件。

HEX⽂件记录由对应机器语⾔码和/或常量数据的⼗六进制编码数字组成。

hex⽂件如何打开?
因⼤多数EPROM编程器或模拟器使⽤Intel HEX⽂件。

HEX⽂件记录由对应机器语⾔码和/或常量数据的⼗六进制编码数字组成。

所以在⽇常使⽤中,⽤IDA可以反编译⼀些单⽚机的程序,或者使⽤UltraEdit可以看⼆进制码。

写了这么多,希望读者对HEX⽂件有⼀个系统的认识。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Intel HEX文件是记录文本行的ASCII文本文件,在Intel HEX文件中,每一行是一个HEX记录
由十六进制数组成的机器码或者数据常量,Intel HEX文件经常被用于将程序或数据传输
存储到ROM.EPROM,大多数编程器和模拟器使用Intel HEX文件.记录格式一个Intel HEX文件可以包含任意多的十六进制记录,每条记录有五个域,下面是一个记录的格式.:llaaaatt[dd...]cc每一组字母是独立的一域,每一个字母是一个十六进制数字,每一域至少由两个十六进制数字组成,下面是字节的描述.:冒号是每一条Intel HEX记录的开始
ll 是这条记录的长度域,他表示数据(dd)的字节数目.
aaaa 是地址域,他表示数据的起始地址
<如果是数据记录,这表示将要烧录的这条记录中的数据在EPROM中的偏移地址,
对于不支持扩展段地址和扩展线性地址的,如89C51,这就是此条记录的起始地址>
tt 这个域表示这条HEX记录的类型,他有可能是下面这几种类型
00 ----数据记录
01 ----文件结束记录
02 ----扩展段地址记录
04 ----扩展线性地址记录
dd 是数据域,表示一个字节的数据,一个记录可能有多个数据字节,字节数目可以
查看ll域的说明
cc 是效验和域,表示记录的效验和,计算方法是将本条记录冒号开始的所有字母对
<不包括本效验字和冒号> 所表示的十六进制数字
<一对字母表示一个十六进制数,这样的一个十六进制数为一个字节>都加起来然后模除256得到的余数最后求出余数的补码即是本效验字节cc.
<例如:
:0300000002005E9D
cc=0x01+NOT((0x03+0x00+0x00+0x00+0x02+0x00+0x5E)%0x100)=0x01+0x9C=0x9D
C语言描述:
UCHAR cc;
cc=(UCHAR)~(0x03+0x00+0x00+0x00+0x02+0x00+0x5E);
cc++;
>
数据记录
Intel HEX文件由若干个数据记录组成,一个数据记录以一个回车和一个换行结束
<回车为0x0d换行为0x0a>比如下面的一条数据记录
:10246200464C5549442050524F46494C4500464C33
10 是此行记录数据的字节数目
2462 是数据在内存<将要烧写的eprom地址>中的起始地址
00 是记录类型00(是一个数据记录)
464C 到464C 是数据
33 是此行记录的效验和扩展线性地址记录(HEX386)
扩展线性地址记录也可称为32位地址记录和HEX386记录,这个纪录包含高16(16-31位)位数据地址,这种扩展的线性记录总是有两个字节数据,像下面这样::02000004FFFFFC
02 是记录的数据字节数目
0000 是地址域这在扩展地址记录中总是0000
04 是记录类型04(扩展地址记录)
FFFF 是高16位地址
FC 是记录效验和,计算方法如下:
01h + NOT(02h + 00h + 00h + 04h + FFh + FFh)当一个扩展线性地址记录被读到后,扩展线性地址记录的数据区域将被保存
并应用到后面从Intel HEX文件中读出的记录,这个扩展线性记录一直有效,
直到读到下一个扩展线性记录.绝对内存地址= 数据记录中的地址+ 移位后的扩展线性地址下面举例说明这个过程从数据记录的地址域得到地址2462
从扩展线性地址记录的地址域得到地址FFFF
绝对内存地址FFFF2462扩展段地址记录(HEX86)
扩展段地址记录也被称为HEX86记录, 包含4-19位的数据地址段,
这个扩展段地址记录总是有两字节数据,如下::020*********EA
02 是记录中的数据字节数目
0000 是地址域,在扩展段地址记录中,这个域总是0000
02 是记录类型02(扩展段地址的标示)
1200 是该段的地址
EA 是效验和
计算如下:
01h + NOT(02h + 00h + 00h + 02h + 12h + 00h).当扩展段地址记录被读后,扩展段地址将被存储并应用到以后从Intel HEX文件读出的记录,这个段地址一直有效直到读到下一个扩展段地址记录绝对内存地址= 数据记录中的地址+ 移位后的扩展段地址数据记录中的地址域移位后扩展段地址记录中的地址域
下面举例说明这个过程从数据记录的地址域得到地址 2 4 6 2 从扩展段地址记录的地址域得到地址 1 2 0 0
绝对内存地址0 0 0 1 4 4 6 2文件结束记录(EOF)
一个Intel HEX文件必须有一个文件结束记录,这个记录的类型域必须是01,
一个EOF记录总是这样:
:00000001FF
00是记录中数据字节的数目
0000这个地址对于EOF记录来说无任何意义
01记录类型是01(文件结束记录标示)
FF是效验和计算如下
01h + NOT(00h + 00h + 00h + 01h).
========================
总结
形如
:BBAAAATTHHHH...HHHHCC
BB: Byte
AAAA:数据记录的开始地址,高位在前,地位在后
因为这个格式只支持8bits,地址被倍乘
所以,为了得到实际的PIC的地址,需要将地址除以2
TT: Type
00 数据记录
01 记录结束
04 扩展地址记录(表示32位地址的前缀,当然这种只能在INHX32) HHHH:一个字(Word)的数据记录,高Byte在前,低Byte在后
TT之后,总共有BB/2 个字的数据
CC: 一个Byte的CheckSum因为PIC16F873A只有4K的程序空间。

相关文档
最新文档