解读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烧录到单片机中,通过烧录工具,得到机器码如下:

原创粉丝点击