3.2 利用CCSLink 连接调试访问DSP 内存
在编译并加载.out 文件后,可以直接由CCSLink 读取目标符号表并获取变量在DSP 内存中的地址。如输入ddatA =dec2hex(address(cc,'ddat')),将返回变量ddat 的地址和所在页:
23AC,0000。
在MATLAB 中,可以控制CCS IDE 中程序的显示及断点的增加和删除,并控制程序代码的执行和暂停,读写DSP 的内存变量。例如,执行以下程序:
open(cc,'ccstut.c','text')%在CCS 中打开ccstut.c 文件
open(cc,'ccstut_54xx.cmd','text')%在CCS 中打开ccstut_54xx.cmd 文件
activate(cc,'ccstut.c','text')%将ccstut.c 作为当前的活动文件
insert(cc,'ccstut.c',64)%在第64 行加入断点
halt(cc)%暂停CPU
restart(cc) %继续与CCS 保持联系
run(cc,'runtohalt',20)%DSP 程序执行到断点
ddatV = read(cc,address(cc,'ddat'),'single',4) %(1)读取C 代码初始化数据ddat
idatV = read(cc,address(cc,'idat'),'int16',4) %(2)读取C代码初始化数据idat
write(cc,address(cc,'ddat'),single([pi, 12.3, exp(-1), sin(pi/4)])) % (3)修改DSP 内存中的数据ddat
write(cc,address(cc,'idat'),int16([1:4]))% (4)修改DSP 内存中的数据idat
run(cc,'runtohalt',20) %从断点处继续执行
ddatV = read(cc,address(cc,'ddat'),'single',4)% (5)读取修改后的数据ddat
idatV = read(cc,address(cc,'idat'),'int16',4) %(6)读取修改后的数据idat
阅读本例工程文件可知,在C 代码中,变量初始化值为ddat=[16.3,-2.13,5.1,11.8],idat=[1,508,647,7000]。执行上述(1)、(2)两语句,在MATLAB 中获得了这两个变量的值ddatV 和idatV。经过(3)、(4)两语句的修改,ddat 和idat 分别改为了新值ddat=[3.1416,12.3,0.3679,0.7071]和idat=[1,2,3,4]。这一修改,可从(5)、(6)两语句的执行在MATLAB 中得到验证,同时也可在CCS IDE 下通过变量观测器进行证实。
在MATLAB 下,同样可以通过regread 和regwrite 来对CPU寄存器进行读写操作。如
tReg = regread(cc,'AL','2scomp') % 按二进制补码方式读取AL
regread(cc,'TRN','binary') % 按无符号二进制数读取TRN
regwrite(cc,'AH','FFFF','binary') % 按无符号二进制数读写AH
3.3 利用CCSLink 嵌入式对象调试访问DSP 内存
利用MATLAB 的面向对象编程技术和CSLink,可以为目标程序中的所有C 符号创建嵌入式对象,并通过对象来操作该C 符号。
仍以上述程序为例,首先复位DSP,并创建一个嵌入式对象:
restart(cc) % 复位程序,使PC 指向程序入口处
goto(cc,'main') %将PC 定位到C 主程序入口
cvar = createobj(cc,'idat') %(7)为操作嵌入式对象idat 创建MATLAB 对象
cvar
语句(7)创建了指向DSP 中C 符号的MATLAB 对象,从而可以在MATLAB 环境下实现对其全部或部分读取和修改。
read(cvar)%(8)将嵌入式数组读入到MATLAB 工作空间
read(cvar,2)%只读取第2 个元素
write(cvar,4,7001)%(9)将第4 个元素修改为7001
set(cvar,'size',[2])%(10)将对象减小到2 个元素
语句(8)将指向idat 的嵌入式数组cvar 读入MATLAB,在语句(9)中对其第4 个元素进行了修改,而在语句(10)中对数组的大小进行了改变。
通过CCSLink,不仅可以为数组变量创建对象,而且也可以为结构体变量创建对象并进行相应的操作,如:
cvar = createobj(cc,'myStruct')%创建指向C 结构体的MATLAB 对象
write(cvar,'iz', 'Simulink') %修改结构体的字符串iz 域为Simulink
cstring = getmember(cvar,'iz')%读取该域到MATLAB
write(cstring,1,'s')%该写字符串的首字符
readnumeric(cstring)%按数值方式读取字符串
上述5 条语句,均通过MATLAB 环境下的对象cvar,实现了对DSP 的C 语言程序中结构体变量myStruct 的读写操作和修改,具有很大的方便性。
通过CCSlink,无论对CCS IDE 建立了连接对象还是嵌入式对象,均可在MATLAB 环境下进行操作,达到了DSP 内部各种变量的读写和修改,并进行相关的调试过程,具有很大的方便性。对于上述示例所有的操作执行结果,均可以在MATLAB和CCS IDE 环境下进行观测和验证。
4 结束语
本文简要讨论了基于MATLAB 的DSP 程序调试方法,描述了CCSLink 与CCS IDE 的基本概念,介绍了建立CCS 对象的过程,并以MATLAB 提供的实际工程文件为例,演示了利用CCSLink 连接和嵌入式对象进行C 变量操作的实际过程,并对其执行过程和结果进行了简要解释。
应该说明的是,MATLAB提供了大量的进行DSP程序调试的函数,本文只涉及到了其中极少的一部分。要充分利用MATLAB的强大功能进行更深层次的DSP程序调试,应进一步参考MathWorks公司提供的技术资料MATLAB Link for Code Composer Studio Development Tools。
上一页 [1] [2]