Keil导出的数据保存与处理——NXP芯片MKV31F256VLL12型号
数据保存
存储指令
save d:\test\speed_200.txt 0x20000bf0,0x200017a8 %地址不区分大小写
save d:\test\speed_200.txt 0x20000bf0,0x200017a8
(不区分大小写)
其中save是存盘命令,用于将指定的存储区的数据存储到电脑文件中。
d:\test\speed_200.txt
是文件路径和文件名。可以根据具体要求进行修改。
起始地址与终止地址的计算
计算时采取十六进制。
首地址的计算
变量名后的地址即为首地址
末地址的计算
末地址的计算式为,末地址=(首地址+存储点数*4)
计算实例
例子中,储存的数据类型为int32_t,数据是32位,地址计算的过程中使用字节数参与计算。对于speed变量而言,首地址为0x20000BF0,末地址=0x20000BF0+BB8(750*4)=0x200017A8。
辅助计算过程
利用计算机自带的计算器辅助计算,过程如下:
数据存储演示
回车后,在指定路径(D:\test\speed_200)出现相应文件
数据处理的思想
数据提取
取练习素材前四行数据分析
:020000042000DA
:100BF00046CD2A0075CF2A0075CF2A0075CF2A006E
:100C0000A4D12A00A4D12A005BC22A009FB92A00DD
:100C10009FB92A005BC22A00B9C62A00B9C62A00B9
本行数据长度是数据长度域,它代表记录当中数据字节(dd)的数量,数据是以16进制数呈现,故数据应为16byte。
图片中有用的数据是标红部分数据,其余的数据可视为’无用‘数据。对图片中的剩余参数不做过多介绍。现对有用的数据进行分析。
46CD2A00 75CF2A00 75CF2A00 75CF2A00 %有用的数据
A4D12A00 A4D12A00 5BC22A00 9FB92A00
9FB92A00 5BC22A00 B9C62A00 B9C62A00
数据处理思路
存数据的数组定义为int32_t(表示有符号32位整型变量),每个字节表示8位,故每个数据由4个字节组成。数据采取小端存储模式,较高的字节存在高位,较低的字节存在低位,以第一个数据46CD2A00为例,真实的数据(十六进制)应为002ACD46,后续进行的工作是将十六进制数据转换为十进制。在转化成十进制的过程中,需要进行负数处理,在计算机的世界中,负数是以补码的形式的存在的。至此,数据的处理思想讲述完毕。
数据处理演示
数据处理源代码
clear;clc
data = importdata('speed_200.txt');
a = char(data);
b = a(2:size(a,1)-2,:); %去掉第一行和最后两行无效数据
[m,n] = size(b);
for i=1:m
store_data(i,1:32) = b(i,10:41);
end
store_data = store_data'; %利用reshape函数获得想要的数据
A = reshape(store_data,8,4*m);
A = A';
for i=1:4*m
real_store_data(i,7) = A(i,1);
real_store_data(i,8) = A(i,2);
real_store_data(i,5) = A(i,3);
real_store_data(i,6) = A(i,4);
real_store_data(i,3) = A(i,5);
real_store_data(i,4) = A(i,6);
real_store_data(i,1) = A(i,7);
real_store_data(i,2) = A(i,8);
end
for k=1:4*m
nomalized_data(k,1) = hex2dec(real_store_data(k,1:8));
if nomalized_data(k,1)>2^30 %对负数进行处理
nomalized_data(k,1) = nomalized_data(k,1)-2^32;
end
end
t = 0:2/12000:(m*4-1)*2/12000; %隔两个点采集一次有效数据,采样频率12k
real_data = nomalized_data/2^24*3000; %反标幺处理代码,按上述处理得到的十进制数据需要进行反标幺处理
figure
plot(t,real_data,'b','linewidth',1);
%对图片的属性进行简易的设置
axis([0 0.12 495 505])
set(gcf,'unit','centimeters','position',[30 15 15 7]);%设置画布大小和位置
set(gca,'FontName','Times New Roman','FontSize',16,'FontWeight','bold');%坐标轴数字大小
xlabel('Time (s)','FontName','Times New Roman','FontWeight','Bold','FontSize',16);
ylabel('Encoder speed (rpm)','FontName','Times New Roman','FontWeight','Bold','FontSize',16);
grid on