• 大小: 0.02M
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-06-07
  • 语言: Matlab
  • 标签: 其他  

资源简介

使用Matlab解析HEX386格式数据.zip

资源截图

代码片段和文件信息

%function d=HEX386_TO_DEC()
%使用MDK输出内存数据后,通过本脚本读入并绘图
%假设内存中有数组 short Data[2500]可以通过以下命令导出HEX文件
%输出命令 save e:\d2500.hex Data&Data[2499]
%应用时需要修改导出的数据宽度和文件路径
clear;
file_path=[];
hex_file_name=[];
pow_2_8=2^8;
pow_2_16=2^16;
pow_2_32=2^32;
% 定义读取文件的数据宽度
% 1:BYTE  8bit
% 2:short 16bit
% 4:long 32bit
% Float_Type_Flag=1 表示读取的是浮点数据(只能为单精度)
% 若读取浮点数标志有效,则数据位宽度强制为4,下方的配置无效
% Sign_Flag=1 表示导入的数据为有符号数
% Float_Type_Flag有效时 Data_Width无作用,Sign_Flag无作用
%%%%%%%%%%%%%% 需要改动的地方 %%%%%%%%%%%%%%
Data_Width=4;
Float_Type_Flag=1;
Sign_Flag =1;
%file_path=‘e:\d2500.hex‘;
[hex_file_name hex_path_name]=uigetfile({‘*.hex;*.bin;*.txt‘}‘选择HEX文件‘);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 如果选择了文件则合成完整路径
if hex_file_name
    file_path=[hex_path_name hex_file_name];
end
%配置浮点数数据宽度强制为4(单精度)
if Float_Type_Flag
    Data_Width=4;
end
Read_Data=importdata(file_path‘ ‘);
char_data=char(Read_Data);
[rowcolumn]=size(char_data);
d=zeros(1(column-11)/(Data_Width*2)*(row-4));
counter=0;
error_flag=0;

for i=2:row
    if strcmp(char_data(i8:9) ‘01‘)
       break;
    end
    len = hex2dec(char_data(i2:3));
    switch Data_Width
        case 1
            for i2=1:len
                val=(hex2dec(char_data(i(9+(i2-1)*2):(9+i2*2))));
                if and(Sign_Flagbitshift(val-7))
                  val =val-pow_2_8; 
                end
                    counter=counter+1;
                    d(1counter)=val;
            end
        case 2
            len=len/2;
            for i2=1:len
                val=(hex2dec(char_data(i[(12+(i2-1)*4):(9+i2*4) ... 
                    (10+(i2-1)*4):(7+i2*4)])));
                if and(Sign_Flagbitshift(val-15))
                    val =val-pow_2_16;
                end
                counter=counter+1;
                d(1counter)=val;
            end
        case 4
            len=len/4;
            for i2=1:len
                Long_Data_str=char_data(i[(10+i2*8-2):(10+i2*8-1) (10+i2*8-4)...
                    :(10+i2*8-3) (10+i2*8-6):(10+i2*8-5) (10+i2*8-8):(10+i2*8-7)] );
                val=(hex2dec(Long_Data_str));
                if Float_Type_Flag
                    sign= bitshift(val-31);
                    m   = bitshift(val-23)-127-bitshift(sign8);
                    last= (bitand(val2^23-1)+2^23);
                    val =(2^m)*((-1)^sign)*last/(2^23);
                elseif and(Sign_Flagbitshift(val-31))
                    val =val-pow_2_32;
                end
               counter=counter+1;
                d(1counter)=val;
            end
        otherwise
            error_flag=1;
    end       
end
if error_flag
    disp(‘数据位宽错误!‘);
else 
    save(‘d.mat‘‘d‘);
    plot(d‘b.‘)grid on
end




 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件       28149  2019-07-10 22:29  sign_f2500.hex
     文件       28149  2019-07-10 22:29  sign_l2500.hex
     文件       28170  2019-07-10 22:29  sign_l2500000.hex
     文件       14097  2019-07-10 22:28  sign_s2500.hex
     文件         606  2019-07-29 21:52  使用说明.txt
     文件        2984  2019-07-10 23:20  Float_figure.m

评论

共有 条评论