資源簡介
使用Matlab解析HEX386格式數(shù)據(jù).zip

代碼片段和文件信息
%function?d=HEX386_TO_DEC()
%使用MDK輸出內(nèi)存數(shù)據(jù)后,通過本腳本讀入并繪圖
%假設(shè)內(nèi)存中有數(shù)組?short?Data[2500]可以通過以下命令導(dǎo)出HEX文件
%輸出命令?save?e:\d2500.hex?Data&Data[2499]
%應(yīng)用時(shí)需要修改導(dǎo)出的數(shù)據(jù)寬度和文件路徑
clear;
file_path=[];
hex_file_name=[];
pow_2_8=2^8;
pow_2_16=2^16;
pow_2_32=2^32;
%?定義讀取文件的數(shù)據(jù)寬度
%?1:BYTE??8bit
%?2:short?16bit
%?4:long?32bit
%?Float_Type_Flag=1?表示讀取的是浮點(diǎn)數(shù)據(jù)(只能為單精度)
%?若讀取浮點(diǎn)數(shù)標(biāo)志有效,則數(shù)據(jù)位寬度強(qiáng)制為4,下方的配置無效
%?Sign_Flag=1?表示導(dǎo)入的數(shù)據(jù)為有符號數(shù)
%?Float_Type_Flag有效時(shí)?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
%配置浮點(diǎn)數(shù)數(shù)據(jù)寬度強(qiáng)制為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(‘?dāng)?shù)據(jù)位寬錯誤!‘);
else?
????save(‘d.mat‘‘d‘);
????plot(d‘b.‘)grid?on
end
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件???????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
評論
共有 條評論