解读keil生成的hex文件---小V
来源:互联网 发布:未来天空摇杆淘宝店 编辑:程序博客网 时间:2024/05/16 07:26
keil---arm公司收购的集成单片机的编译链接等一系列工具的开发环境,支持C和汇编编程。经常烧录keil生成的hex文件,不免想知道其数据组成,以下为使用keil 4结合网上和自身的使用,解读一下。使用keil c51,即大端格式;请使用小端编译的自行转换;
keil hex文件是由一行行符合Intel HEX文件格式的文本所构成的ASCII文本文件。每一行包含一个HEX记录,由对应机器语言码和/或常量数据的十六进制编码数字组成,并且以回车符,即\r\n 0d0a结束,见下图的实例说明。Intel HEX文件通常用于传输存于ROM或EPROM中的程序和数据。每个记录包含5个域按如下格式排列: :llaaaatt[dd...]cc
: 每个记录都以冒号开头
ll 数据长度域,代表记录中数据字节(dd)的数量;
aaaa 地址域,代表下载数据到存储器的起始地址;对于扩展线性地址记录,始终为0000;
tt 记录类型的域:
1. 00 --- 数据记录;
2. 01 --- 文件结束记录;Intel HEX文件必须以文件结束符EOF记录结束,这个记录必须是: :00000001FF
3. 02 --- 扩展段地址记录;HEX86记录,它包括4-19位数据地址段;总是包含两个字节数据;例如::020000021200EA;通过地址域与被移位的扩展段地址数据相加获得数据记录的绝对存储器地址;例如:2462,1200 --- 00014462
4. 04 --- 扩展线性地址记录;32位地址记录或HEX386记录,数据地址的高16位;应该是数据存放的32位地址的高16位;通过与地址域与被移位的来自扩展线性地址记录的地址数据相加,获得数据记录的绝对存储器地址;例如:2462,1234 --- 12342462
dd 数据域,由许多数据字节组成;
cc 校验和域,这个记录的校验和;所有字节和的低八位,对256取余;例如hex文件的第二行记录:01000F0022CE
01 00 0F 00 22 相加,对低八位的去256的余数,为CE.。
对于大端格式,即数据的高位存储在低地址,低位存储在高地址,如下实例:
0x12存储在0x08地址,0x34存储在0x09地址;
以下是测试程序和相应汇编码,全部由keil 4生成:
#include<reg52.h>void main(){ int i=0x1234; char x0,x1; x0 = ((char *)&i)[0]; x1 = ((char *)&i)[1];}
hex文件数据:
:0C00030075081275093485080A85090B80
:01000F0022CE
:03000000020010EB
:0C001000787FE4F6D8FD75810B02000338
:00000001FF
hex文件十六进制数据:
把此hex烧录到单片机中,通过烧录工具,得到机器码如下:
- 解读keil生成的hex文件---小V
- 利用KEIL生成hex文件
- keil编译不能生成“.HEX”的解决方法
- keil输出hex文件
- STC51单片机 让keil生成可以下载到单片机的Hex文件
- keil软件汇编为啥不能生成HEX文件
- keil的a51生成的lst文件有点小问题
- Hex文件解读
- 如何将现成的hex文件用keil烧写
- 51在利用keil输出hex文件之后怎么找不到带.hex的文件
- Keil 下载HEX文件,无需源代码。
- Keil L51 输出的hex文件格式为Hex-80
- keil4生成的hex文件为空--proteus加载的hex文件不能运行
- stm32 bin文件和hex文件的生成和下载
- Keil生成Bin文件的方法
- Keil生成Bin文件的方法
- keil中生成bin文件的方法
- TI生成hex文件方法
- TableLayout使用实例
- f(x) = e^(-x) * cos(2*PI*x)源代码
- iOS在项目中使用ASIHttpRequest
- B树
- ab高级进阶
- 解读keil生成的hex文件---小V
- QBIR
- freemarker doc 嵌套 循环
- java入门基础
- 动物叫(练习继承,抽象类)
- hdu 4303 Hourai Jeweled(树形dp)
- 好久没写博客了
- grid中使用临时表
- ocp-047-84 create table