ITKeyword,专注技术干货聚合推荐

注册 | 登录

CCS与Matlab数据交换详解

HJ199404182515 分享于 2017-03-09

推荐:MATLAB读取CCS保存的数据

转自:http://blog.sina.com.cn/s/blog_640bcc390100pt94.html 平时只是在simulink下把数据保存到workspace中处理,也就是.mat格式的数据,而CCS下保存的数据格

2019阿里云双11返场狂欢继续,
地址https://www.aliyun.com/1111/2019/home

在进行DSP算法设计时,我们通常会在Matlab上验证一下算法是否正确,然后再把算法移植到DSP当中,然而在移植的过程中会不可避免的出现各种问题,这时就需要将DSP内存中的数据导出来传到Matlab中进行分析处理,同时我们也需要从Matlab传递一些数据到DSP当中,比如我们想生成某种比较复杂的数据(例如各种类型的噪声),如果用C语言来写的话将会非常的麻烦,而这些用matlab能够亲而易举的完成,这时我们只需要将matlab生成的数据导入到DSP中就可以了,今天笔者就来向大家来分享一下实现CCS与Matlab数据交换的方法。

Matlab向CCS传递数据      

首先我们利用Matlab生成若干个数据,然后存储为dat格式的文件,然后通过CCS将dat格式的文件导入到DSP中。dat文件是CCS能够识别的文件之一。下面来讲一下dat文件的构成。


CCS支持的.dat文件的格式为:

文件头为

定数        数据格式  起始地址   页类型    数据块大小
1651             1                    80000000         0               10

固定标识      数据格式       基地址            页类型       长度

固定标识:它的值固定为1651

数据格式:1-十六进制  2-十进制  3-十进制长整型  4-十进制浮点型

基地址:    就是要存入到DSP一段内存空间的首地址

页类型:    0-数据   1-程序  

长度:        装入数据的长度

比如一个.dat文件:

1651 1 80000000 0 10
0x01020304
0x00000001
0x00000002
0x00000003
0x00000004
0x00000000
0x00000000
0x00000000
0x00000000
0x00000000
0x00000000
0x00000000
0x00000000
0x00000000
0x00000000
0x00000000


接下来讲解如何使用Matlab制作dat文件,首先给出matlab代码:

clear all;
close all
clc;

Fs = 150e3;     %定义采样率
F1 = 10e3;      %定义频率
F2 = 8e3;       
sample_num = 500;   %定义数据点个数

m = 1:sample_num;      
x = sin(2*pi*F1*m/Fs)+sin(2*pi*F2*m/Fs);   %生成原始数据
y = typecast(single(x),'uint32');          %首先将x强制转换成single型,然后再转换成具有相同二进制形式的uint32型 这样做是为了方便dat文件存储

figure;
plot(x);
title('Matlab生成的原始数据');

fid=fopen('input_file.dat','wt');                  %以写文本的方式打开一个叫input_file的dat文件(如果没有会自行创建一个)
fprintf(fid,'1651 1 c0000000 0 %x\n',length(m));   %输出文件头,文件头必须是dsp所能识别的,
                                                   %属性分别是固定标识、数据类型(十六进制)、基地址(根据你要存储在DSP什么地址处决定)、数据长度
fprintf(fid,'0x%08x\n',y);                         %输出y数组,并写到与fid标示符相同的文件
fclose(fid);                                       %关闭fid标示符的文件。
在此段代码中,笔者生成了500个数据,数据默认是 double型(内存中占8bytes)的,而在DSP中一般都是 single型(内存中占4bytes)的,为此需要将double型数据强制转换成single型的,而CCS能够识别的dat数据类型是 uint32型(内存中占4bytes)的,因此还需要再将single型数据转换成具有相同二进制形式的uint32型。接下来的数据才是真正要存下来的。文件头中的基地址写的是0xc0000000,这是根据实际你要存储到DSP的内存的地址决定的。

运行一下程序得到一个名叫input_file的dat文件,其保存在当前matlab活动的目录下。用记事本的方式打开此文件里面的内容如下:


同时出一张如下所示的图:


此图是程序生成的数据,这个图留着后面对比。


      接下来把生成的input_file.dat文件拷贝到没有中文的路径下,打开CCS使用仿真器连上相应的DSP芯片,笔者在这里使用的是TMS320C6748,进入到debug界面,在菜单栏View下找到Memory Browser选项,出现的界面如下图所示:


输入地址0xc0000000,这个地址就是刚才写到dat文件中的基地址。回车出现如下图所示的内容:


然后将鼠标放到图片中央,右键,如下图所示,选择Load Memory。


点击出现如下图所示的窗口:


点击Browse...找到刚才存放input_file.dat文件的位置,然后画红圈的地方保持一致,点击Next。如下图所示


推荐:几种数据交换格式

 主要包括以下三种: · XML · JSON · YAML   XML     XML是当前编程中最为流行的数据交换格式,拥有跨平台、跨语言的优势。对于XML应该很熟悉,所以不再多做

这两项参数是自动识别的,不用管,然后点击Finish。如下图所示:



      图中画圈的地方保持一致,可以看到加载的内容与刚才打开的文件内容一样,说明已经加载进去了。接下来我们可以使用Graph功能看一下数据是否正确。

Graph为single time配置如下:


出现如下图:


与matlab中生成的完全一样。至此我们就完成了从Matlab向CCS导入数据。

关于Graph功能如何使用请查看博客《关于CCS软件的Graph功能使用详解

CCS向Matlab传递数据 

接下来将解如何从CCS向Matlab传递数据,回到刚才打开的Memory Browser,将鼠标放在中间,右键,如下图所示:


点击Save Memory,出现如下所示窗口:

点击Browse...选择一个没有中文的路径并给文件取名为*****.dat,我在这里取名为output_file.dat,画红圈的保持一致,点击Next,


注意画红圈的部分,保持一致,点击Finish。

完成后在刚才选择的目录下找到该文件,并用记事本的方式打开,如下图所示:


        画红圈的部分是文件头,多了一个数,笔者也不太清楚是什么意思,但是后面的数据和input_file.dat是一样的,有用的数据并没有变化,因此不用担心文件头不一样,而导致使用出错。接下来给出的是利用matlab读取CCS生成的dat文件的程序:

clear all;
close all
clc;

fid=fopen('output_file.dat','r');                 %以读的方式打开
read_data = fscanf(fid,'%x\n');                   %以16进制的方式读进来
fclose(fid);                                      %关闭文件

data = read_data(7:end);                          %去掉文件头,留下有用数据 如果不知道文件头占用多少个数据,可查看后再修改去掉的个数
z = typecast(uint32(data),'single');             %首先将data强制转换成uint32型,然后再转换成具有相同二进制形式的single型,这样就实现了还原
figure;
plot(z);
title('从CCS导出经过Matlab处理还原的数据');
运行一下该程序,可以得到如下的图片:

可见数据被完好无损的传了回来。


        如果有什么问题欢迎留言。









推荐:共享内存和动态数据交换

仔细研究一下操作系统本身的机制,比如说内存管理、进程间通信等,越发觉得这些机制很精妙,很精深,perfect!越是经典的东西越是值得深究。。。 为了让具有依赖

在进行DSP算法设计时,我们通常会在Matlab上验证一下算法是否正确,然后再把算法移植到DSP当中,然而在移植的过程中会不可避免的出现各种问题,这时就需要将DSP内存中的数据导出来传到Matlab中

相关阅读排行


用户评论

游客

相关内容推荐

最新文章

×

×

请激活账号

为了能正常使用评论、编辑功能及以后陆续为用户提供的其他产品,请激活账号。

您的注册邮箱: 修改

重新发送激活邮件 进入我的邮箱

如果您没有收到激活邮件,请注意检查垃圾箱。