CCS save memory 数据存储问题 采用CCSsave memory存储变量名为ad_data[0]中的数据,该数据的定义为float ad_data[12],该数据十进制范围为大于-1,小于1。存储步骤如下
导出数据为32位16进制浮点数,数据文件见附件32-Bit-Hex-C.dat。具体内容见附件:
CCS导出数据请教.rar
(109.96 KB)
编制matlab 程序Read_CCS_Data.m,matlab程序如下,也可在附件中下载。
% Read *dat file of CCS6.0 % xiahouzuoxin % 2014.04.21 % =========================================================================
clc;clear all;close all;
% 对话框选择*.dat文件 [fname,pname]=uigetfile(... {'*.dat';'*.*'},'Input *.dat File');
fid = fopen(fullfile(pname,fname)); fseek(fid, 23,-1); % 去文件头, 21字节,如 1651 1 80000006 0 100
% 按指定格式读取解析,并转化为十进制数 fm = 4; switch (fm) case 4 % 按4Byte格式读,如 0x 80000000 x = textscan(fid, '%2s %8s'); z(:,1) = hex2dec(x{2}); case 2 % 按2Byte格式读,如 0x 8000 0000 x = textscan(fid, '%2s %4s %4s'); z(:,1) = hex2dec(x{3}); z(:,2) = hex2dec(x{2}); case 1 % 按1Byte格式读,如 0x 80 00 00 00 x = textscan(fid, '%2s %2s %2s %2s %2s'); z(:,1) = hex2dec(x{5}); z(:,2) = hex2dec(x{4}); z(:,3) = hex2dec(x{3}); z(:,4) = hex2dec(x{2}); otherwise z = []; end
if ~isempty(z) [h w] = size(z); % 将数据处理代码放在这里 y = zeros(h,w);
for i = 1:h for j = 1:w sign = bitget(z(i,j),32); %将数据转化为二进制数,并获取二进制数上的某位 exponent = bitget(z(i,j),24:31) * 2.^(0:7).'; fraction = bitget(z(i,j),1:23) * 2.^(-23:-1).'; y(i,j) = (-1)^sign * (1+fraction) * 2^(exponent-127); end end end fclose(fid);
plot(y(10:2000,1))
将32位16进制浮点数转换位10进制数时,出现前2013个数是正确的(图 1),2013个以后是错误的(图 2)。多次结果都是2013之前的数据转换是正确的,2013个以后的数据转换是错误的。 图 1前2013个数据读取后的结果 图 2 2013个数据以后的结果 经过多次验证,Matlab转换程序转换CCS 变量观察窗口中的数据是正确的。 问题是否出在CCS 中save memory中, 还请专家给出指导,谢谢! |