qwe890asd 发表于 2017-11-16 17:27

CCSLink实例:基于MATLAB(ccslink)调试DSP中FIR滤波程序

基于MATLAB调试DSP中FIR滤波程序

建立起MATLAB链接之后,就可以在MATLAB命令窗通过CCS为DSP目标产生可执行代码,并进行编译、 调试和分析。下面以FIR数字滤波器程序为例,介绍基于CCSLink调试DSP程序的过程。源程序fir.pit保存在MATLAB根目录下的myprojects文件夹下。

1 、加载DSP目标板
      在MATLAB环境下执行以下代码:
[*]projfile=fullfile(MATLABroot,‘myprojects’,‘fir.pit’)%选择工程m.pjt文件

复制代码
如代码注释所示,在MATLAB环境下完成了对工程文件的调入、编译,生成可执行文件并将其加载到DSP目标板。切换到已经打开的CCS界面,可以看到在MAT— LAB环境下已经完成了对CCS的各种操作。

2、利用OOSLink连接对象控制访问DSP

在MATLAB环境下,可以控制CCS IDE中程序的显示及断点的设置,并控制程序代码的执行和暂停,读写DSP的内存变量。例如,执行以下程序:
[*]open(ce,‘fir.C’,‘text’)               %在CCS中打开源程序

[*]open(ee,‘fir.cmd’,‘text’)            %在CCS中打开链接命令文件

[*]insert(cc,‘fir.C’,30)                %在源文件中第3O行插入断点

[*]halt(cc)                                          %暂停CPU

[*]restart(cc)                                          %复位程序计数器PC

[*]run(cc,‘runtohalt’,30)                            %DSP程序执行到断点

[*]ddatV=read(cc,address(cc,‘table’),‘double’,7)               %读取C代码初始化滤波器系数table

[*]idatV—read(CC,address(CC,‘buff’),‘single’,7)               %读取C代码初始化数据buff

[*]write(cc,address(cc,‘table’),double(E0,0.0468,0.1009,

[*]0.1514,O.1009,0.0468,O])                                           %修改滤波器系数table

[*]run(cc,‘runtohalt’,20)                                          %从断点处继续执行

[*]ddatV=read(ee,address(cc,‘table’),‘double’,7)                           %读取修改后的数据table

[*]idatV=read(cc,address(cc,‘buff’),‘single’,7)                           %读取修改后的数据buff

复制代码
阅读本例工程文件可知,在程序设计中,把滤波器系数表存储在变量ddatV中,把采样的信号数据存储在变量idatV中,在MATLAB环境下,同样可以通过regread和regwrite函数对CPU寄存器进行读写操作。这样在程序调试的过程中,就可以实时地修改滤波器的系数和读取采样信号数据;同时DSP硬件无须停止程序执行,实时地提供了程序调试的平台,直到达到满意的效果。

3 利用OCSUnk嵌入式对象调试访问DSP内存

利用MATLAB的面向对象编程技术和CCSLink技术,可以为目标程序中的所有C符号创建嵌入式对象,并通过对象来操作该C符号。
在本程序中,首先复位DSP并创建一个嵌入式对象:
[*]restart(cc)                        %复位程序,使PC指向程序人口处

[*]goto(cc,‘main’)                     将PC定位到主程序人口

[*]cvar=createobj(cc,‘table’)                     %为操作嵌入式对象table创建MATLAB对象cvar

复制代码
上述语句创建了指向DSP中C符号的MATLAB对象,从而可以实现对其全部或者部分读取和修改。
[*]read(evar)%将嵌入式对象读人到MATLAB工作空间

[*]write(cvar,4,10)%将滤波器系数的第4个元素修改为1O

[*]set(cvar,‘size’,E11]) %修改滤波器的阶数

复制代码
通过CCSLink,不仅可以为数组变量创建对象,而且可以为C定义的一切数据结构变量创建对象并进行相应的操作,例如:
[*]cvar=createobj(cc,‘etype’) %创建指向C枚举常量的MATLAB对象

[*]write(cvar,‘errorcondition’,‘NO_ ERROR’) %重新给枚举常量赋值

复制代码
上述语句均通过MATLAB环境下的对象cvar,实现了在DSP硬件不停止执行程序的情况下对DSP的C语言程序中数据结构变量的读写修改。这对于调试实时嵌入式系统具有很大的必要性和方便性。
         通过CCSLink,无论是CCS IDE连接对象还是嵌入式对象,均可以在MATLAB环境下进行操作,从而达到对DSP内部各种变量的读写和修改。这种能力给开发者提供了一个观察DSP实时运行的“窗口”,开发者可以在MATLAB中改变一个参数或者变量,并把此值传递给正在运行的DSP,从而可以实时地调整或者修改处理算法。
页: [1]
查看完整版本: CCSLink实例:基于MATLAB(ccslink)调试DSP中FIR滤波程序