调试经验--codec
davinci平台,在dvsdk中提供了一套arm与dsp的交互机制,即codec engine机制。简单讲,就是通过定义好的一套接口,可以在arm端调用dsp算法。codec是编解码的简写,在本文中代表dsp算法。
我们采用的开发方法:在ccs中开发dsp算法,编译生成库,复制到linux下的dvsdk中,生成dsp运行程序。
在系统启动后,先运行arm程序,然后调用dsp算法。
在codec的调试过程中,也有些经验与教训:
1,在davinci平台上对dsp程序的调试方法;
2,TDS560USB仿真器连接;
3,codec打不开;
4,codec编译问题。
一、在davinci平台上对dsp程序的调试方法
调试方法有多种,具体根据情况采用。
1,使用codec engine接口,输出变量值给arm,由arm在串口中显示查看;
2,使用codec engine接口,输出算法日志,写文件,供算法人员查看;
3,关闭算法内部模块,逐步缩小问题点所在范围;
4,使用仿真器连接,调试;
5,使用codec engine的调试通道,实时输出dsp运行信息;
6,回溯算法版本,对比问题原因。
二、TDS560USB仿真器连接
在最初的硬件调试、或算法调试,需要使用仿真器。
但是使用ccs连接仿真器,是比较容易出现问题的。
安装步骤:
1,解压并安装Code_Composer_Studio_v3.3_Build_3.3.38.2.zip;
2,运行CCS_v3.3_SR5_3.3.54.1.exe,安装ccs依赖的ActiveState Perl。
3,连接仿真器,上电,根据PC的提示安装仿真器驱动。
4,运行TDS560USB_ccs33_Setup.exe;此处注意,对于ccs不同版本,需要不同的setup安装文件。
5, 看帮助文档,设置ccs setup。重启。
连接不上仿真器的解决办法:
1,板卡的启动模式要配置成仿真模式(开发板拨码开关S3的所有引脚全off);
2,gel文件一定要与板卡匹配。
3,对闻亭的TDS560仿真器连接DM6467,需要在ccs setup中将clk的频率调为10.368M或指定为5M。
具体步骤:CCS Setup中,TDS560USB的属性中,选连接属性,默认的TCLk为35M,改为10.368M。
(注:在连接DM6446时,不需要调整时钟频率)
4,重启板卡及电脑,有时能解决问题。
5,如果ccs是很久以前安装的,重装ccs是可以一试的方案。
三、codec打不开:
codec打不开的原因,也有多种,例如:
没找到x64P,名称不匹配,工具链不匹配,x64P文件损坏,都会遇到codec打不开的问题。
当遇到codec打不开的情况,我做了多种方法的尝试,来分析问题原因:
1,首先,要确认x64P与dsplink的版本是否匹配;
2,调试,可以使用 CE_DEBUG=1 ./app.out 查看codec运行的详细信息。
3,某些codec原来好用,在加了大量代码后,codec出现打不开的问题,可以加大decode.cfg 中的 RMAN.tableSize。
4,通过改动算法中数组的大小,测试是否在某个值时,codec会出现打不开的情况。
5,测试发现,小的codec比较容易打开,这样,可以采用临时方案,先运行一个能打开的codec,再打开同类型的codec,一般能打开。
6,最终解决问题,是采用codec engine的原始例程video_copy,解决codec打不开问题。
原来我们采用的例程是dvsdk下的combos,可能是combos在加强封装的同时,也增加了某些限制,在对dsp算法做了较大改变的时候,已经不再适用了。
四、codec编译问题
通常,按照例程来布置目录,编译codec,没有什么问题。
有一次,我拷贝了其它电脑上的一套codec编译环境目录,想集成一个新的a64P,编译生成x64P的过程,却编译失败。
编译步骤都是与之前的一样,进入相应目录,make,为何会出错呢?
原来是在dvsdk中编译codec成x64P,若某些文件的时间在未来,也会导致编译不通。比较安全的做法,是每次编译时,先make clean,然后make。