调试DSP两天啦,今天终于搞定。
其实自己DSP水平是打酱油水平,只是上过这门课,调试经验也不足,特别是实际项目,我前段时间做的项目有一定的改进,老板感觉不错,就叫我把我们实验室以前的DSP板子刷上现在的程序,我原本以为很简单,因为我改成C语言的版本也没花多少时间,而且过程中也没有遇到什么问题(因为C版本使自己写的),哪知道移到DSP中竟然不工作啦,心情那叫一个着急,还有就是烧写一次程序要十几分钟,不工作怎么办呢,调试呗!可是怎么调试啊,不会啊,以前上课只是simulator调试过,现在可是烧到板子上调试,不会。于是问一下师兄吧,他回答是他也不会,以前的师兄也没有教过他,你自己上网查查吧,顿时心就凉了,那就上网查查吧,最终还是无果。突然想起以前看程序的文件夹时有个online版本的程序,心想那是不是在线调试的程序版本呢,打开看看,果然是,哈哈。
那就调试吧,发现还要有外部信号的输入,而且我改动的程序在中断处理程序里,那怎么调试呢?最终我想就把程序里本身就有的hamming窗的数据作为输入吧,那这样就把输入数据的问题解决了,那怎样解决中断的问题呢?那就把中断处理函数的内容姑且放到主函数里面吧。那这样问题就解决了,开始调试。
通过watch变量,最终将问题锁定在atan2()函数上,DSP用这个函数不行(至少我用的6713不行),要用dsprts67x.h中的atan2sp()函数。这样就把第一个问题解决了,接下来又出现一个莫明其妙的问题,通过排查发现就是这个acos()函数在搞怪,那就用dsprts67x.h中的acossp函数代替呗,查后结果没有这个函数,那可怎么办,就自己写个呗,下面就是啦:
Float acossp(float x)
{
returnatan2sp(sqrtsp(1.0-x*x),x);
}
Over~
改好后烧到板子里OK啦,哈哈
遇到不会的问题不要怕,换换考虑问题的角度,有可能就转化成自己会的问题,那就离解决问题不远啦。