基于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,从而可以实时地调整或者修改处理算法。
|