DSP

调试经验--codec

2019-07-13 10:15发布

  调试经验--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。