打印

CCS save memory导出数据转化为十进制问题

[复制链接]
3601|17
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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))

3216进制浮点数转换位10进制数时,出现前2013个数是正确的( 1),2013个以后是错误的( 2)。多次结果都是2013之前的数据转换是正确的,2013个以后的数据转换是错误的。
12013个数据读取后的结果
2 2013个数据以后的结果
经过多次验证,Matlab转换程序转换CCS 变量观察窗口中的数据是正确的。
问题是否出在CCS save memory
还请专家给出指导,谢谢!

相关帖子

沙发
wwppd| | 2017-2-21 22:38 | 只看该作者
是不是只有一半的数据?

使用特权

评论回复
板凳
wwppd| | 2017-2-21 22:48 | 只看该作者
以前用的CCS还是设置的定义的变量类型。

使用特权

评论回复
地板
qyfh2005|  楼主 | 2017-2-22 15:48 | 只看该作者
也不是一半的数据,采集了3000个点,2014个点之后的数据变换后是错误的,不知为什么,还请多多指导,谢谢!

使用特权

评论回复
5
232321122| | 2017-2-22 22:22 | 只看该作者
这个定义不一样吧。

使用特权

评论回复
6
232321122| | 2017-2-22 22:31 | 只看该作者
就是设置的固定位数的float才行吧。

使用特权

评论回复
7
tongbu2015| | 2017-2-22 23:10 | 只看该作者
这个不是很复杂的哈

使用特权

评论回复
8
tongbu2015| | 2017-2-22 23:11 | 只看该作者
主要是注意float型数据跟整形数据间的转换即可

使用特权

评论回复
9
zhangbo1985| | 2017-2-22 23:34 | 只看该作者
这个memory中的数据直接导出来的话可以使二进制的,,也可以是16进制的

使用特权

评论回复
10
zhangbo1985| | 2017-2-22 23:35 | 只看该作者
直接是是十进制的没见人做过的额,,这个需要将导出来的文件的再做一次转换的

使用特权

评论回复
11
chuntian2016| | 2017-2-22 23:48 | 只看该作者
直接导出十进制的数据的没见过的

使用特权

评论回复
12
chybeyond| | 2017-2-23 20:55 | 只看该作者
为什么不用matlab直接去操作CCS读取数据,不用保存转换

使用特权

评论回复
13
qyfh2005|  楼主 | 2017-2-24 17:12 | 只看该作者
是用到matlab调用dsp R232串口吗?请多多指教,谢谢!

使用特权

评论回复
14
qyfh2005|  楼主 | 2017-2-28 14:59 | 只看该作者
我安装的CCS6和matlab2010b,老是出现错误信息:Cannot start CCS application (COM error code:
    0x80040154). Verify that your CCS software is
    installed and configured properly
求指教,谢谢!

使用特权

评论回复
15
vibra2016| | 2017-2-28 18:41 | 只看该作者
这个直接导出十进制的文件的是不容易实现的

使用特权

评论回复
16
小清新941006| | 2019-6-29 15:14 | 只看该作者
我想请问您在save memory 保存你所想要的数组的数据,设定好数据的类型和起始地址,我发现ccs只能保存该值一次,它不是循环保存的,你想保存3000个ad_data[0]的数据,可实际上他保存的是从ad_data[0]开始的向下3000个数据。

使用特权

评论回复
17
我家哥哥酷酷的| | 2019-9-23 20:43 | 只看该作者
chybeyond 发表于 2017-2-23 20:55
为什么不用matlab直接去操作CCS读取数据,不用保存转换

请问您怎么弄的啊

使用特权

评论回复
18
zhangmangui| | 2019-9-30 22:34 | 只看该作者
小清新941006 发表于 2019-6-29 15:14
我想请问您在save memory 保存你所想要的数组的数据,设定好数据的类型和起始地址,我发现ccs只能保存该值 ...

那就要将你的数据从其实地址开始往后存储  这样导出的时候  通过首地址+长度的方式就可以导出了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

8

帖子

0

粉丝