用matlab生成HEX文件

首先,说明一下Intel HEX文件的格式

(可以参见wiki:http://en.wikipedia.org/wiki/Intel_HEX)

:10010000214601360121470136007EFE09D2190140
:100110002146017EB7C20001FF5F16002148011988
:10012000194E79234623965778239EDA3F01B2CAA7
:100130003F0156702B5E712B722B732146013421C7
:00000001FF
每一行代表对一个数据的描述,最后一行是结束。

可以看到每一条数据有6个颜色,每个颜色表示数据的一个区域:

  表示开始码,固定为:
  数据部分的字节数,数据部分两个16进制数代表一个字节
  地址,固定4个16进制数,可见,可描述的数据是有限的
  数据类型:00表示数据,01表示结尾,,,,
  数据
  校验,检验的方式是把前面的数据除了开始码部分的按每两个16进制一个字节进行相加,加大结果保留一个字节,并取反码。
知道了结果就用matlab编个程序吧:(参考: http://bbs.ednchina.com/BLOG_ARTICLE_2087845.HTM
clear all;
clc;
%描述一个16位位宽的数据
y=0:63;
N = length(y);        %%数据的长度,即存储器深度。
word_len = 16;           %%每个单元的占据的位数,需自己设定。
len = ceil(word_len/8);  %%转换成字节数。
y_quan =fi(y,1,word_len,0); %%该函数详细见Matlab帮助
fid=fopen('dat.hex','w');%打开文件
temp1=fi(256,0,9,0);
word_len = fi(len,0,8,0); %%即前面所说的”nn”
for i=1:N
addr = fi(i-1,0,16,0); %%即前面所说的”aaaa”
%%下面计算校验和
    temp=word_len+bitsliceget(addr,16,9)+bitsliceget(addr,8,1);
    temp=temp+bitsliceget(y_quan(i),16,9)+bitsliceget(y_quan(i),8,1);
    temp=bitsliceget(temp,8,1); %%取低8位,即相当于取模256
    temp=temp1-temp;%%上面两步是取其补码,如果字长是n位,大小%%为a,则其补码为2^n-a;
    temp=bitsliceget(temp,8,1); %%重新取低8位,这里需要明白%Matlab中fi构造的定点数性质
    fprintf(fid,strcat(':',hex(word_len),hex(addr),'00',hex(bitsliceget(y_quan(i),16,9)),hex(bitsliceget(y_quan(i),8,1)),hex(temp),'\n')); 
end
fprintf(fid,':00000001ff');

fclose(fid);  %%关闭文件



补充说明一下:

  • a = fi(v,s,w,f) 这个函数返回的是v的定点表示,s表示是否是有符合的,w表示字长,f表示小数点后的字长。





  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值