视频监控系统中如何快速实现ARM和DSP的通信和协同工作

时间:2012-08-31来源:网络

4.2 DSP系统工程师应该如何着手?

  通常DSP算法工程师都会把自己的符合xDM标准算法编成一个.lib文件(或 .a6?P),供DSP系统工程师调用。DSP系统工程师最终build出一个DSP Server(也就是DSP的可执行程序.x6?P,和CCS下编译生成的.out类似)。(参考http://focus.ti.com/lit/ug/sprued5b/sprued5b.pdf,这个文档会讲到.xdc和.bld等文件,Codec Engine1.20及以上版本的用户可以先不细究,后面介绍工具帮您自动生成这些文件。)

  1)如果现在有一个.lib文件(或 .a6?P)(算法必须符合xDM标准),如何生成自己的DSP Server呢?下面URL有详细的关于RTSC Codec and Server Package Wizard工具介绍,教您如何把一个.lib文件封装成RTSC Codec 包和RTSC DSP Server包,并最终build出DSP的可执行程序.x6?P。http://wiki.davincidsp.com/index.php?title=RTSC_Codec_And_Server_Package_Wizards http://wiki.davincidsp.com/index.php?title=I_just_want_my_video_codec_to_work_with_the_DVSDK

  2)如果您使用的是Codec Engine 1.20以前的版本,请参考Codec Engine安装路径下examples/servers/video_copy这个例子。这时就需要搞清楚sprued6c.pdf和sprued5b.pdf中提到的.xdc和.xs等文件的功能,也可以在video_copy中的相关文件的基础上修改手动创建出自己的RTSC Codec包和RTSC DSP server包。

  3)创建好RTSC Codec 和RTSC DSP Server包之后,就是如何build出.x6?P的问题了。点击图2所示的Examples,就可以找到build Codec Engine例子的说明文档的链接。按照这个文档做一遍后,就可以对如何build Codec Server有一个清楚的了解。其中关键是修改user.bld和xdcpaths.mak文件,设置Codec Engine依赖的其它软件模块和工具的正确路径。

  4)如果自己的硬件DDR2大小和例子中的256Mbytes不一致,需要修改DSP的.tcf文件和其他配置。还有些工程师不清楚如何分配memory及如何决定具体段,如:DDRALGHEAP和DDR的大小,以及如何配置./loadmodules里的参数都请参考: http://wiki.davincidsp.com/index.php?title=Changing_the_DVEVM_memory_map。

  4.3 ARM应用程序工程师应该如何着手?

  ARM应用工程师需要调用Codec Engine的VISA API,最终编出ARM侧的可执行程序,因此,必须根据自己的应用学习相关的VISA API、如何创建应用侧Codec Engine的package及配置文件。(参考http://focus.ti.com/lit/ug/sprue67d/sprue67d.pdf,这个文档也涉及到如何调试Codec Engine的内容)。

  1)了解ARM应用程序调用Codec Engine的流程、VISA API和其他Codec Engine API。可以参考Codec Engine安装路径下examples/apps/video_copy的例子(较简单)或者DVSDK安装路径下demos里的encode/decode/encodedecode例子(较复杂)。http://wiki.davincidsp.com/index.php?title=Configuring_Codec_Engine_in_Arm_apps_with_createFromServer

  2)了解ceapp.cfg文件。sprue67d.pdf有相关介绍,可以先读懂examples/apps/video_copy/ceapp.cfg。

  3)用4.2 3)中提到的方法学习如何build ARM侧的可执行程序。

  4)如何在多线程中调用codec engine,参考:http://wiki.davincidsp.com/index.php?title=Multiple_Threads_using_Codec_Engine_Handle

  5)还可以参考以下三个文档了解更多TI demo的ARM应用程序的结构、线程调度等具体的问题。

  EncodeDecode Demo for the DaVinci DVEVM/DVSDK 1.2 (Rev. A) (spraah0a.htm, 8 KB) 27 Jun 2007 Abstract

  Encode Demo for the DaVinci DVEVM/DVSDK 1.2 (Rev. A) (spraa96a.htm, 8 KB) 27 Jun 2007 Abstract

  Decode Demo for the DaVinci DVEVM/DVSDK 1.2 (Rev. A) (spraag9a.htm, 8 KB) 27 Jun 2007 Abstract

  5.使用中常碰到的问题

  1)如果遇到问题可以先访问http://wiki.davincidsp.com/index.php?title=Codec_Engine_FAQ。

  2)有些工程师没有DSP开发经验,或者暂时没有仿真器通过JTAG调试DSP。可以参考下面网页的内容,先做一个“Hello World”的例程对ARM和DSP如何协同工作有个感性认识。http://wiki.davincidsp.com/index.php?title=How_to_build_an_ARM/DSP_Hello_World_program_on_the_DaVinci_EVM

  3)很多工程师都是参考video_copy的例子,在它的基础上把自己的算法加进去。因为有源代码,这样比较容易。但肯定要根据自己算法的需要修改ARM和DSP之间传递的buffer和参数,重要的是先保证ARM侧的应用程序可以把buffer和参数正确传递到DSP,DSP可以把处理之后的buffer正确的传到ARM侧的应用程序。把这个通路打通之后,就比较容易定位问题是出在ARM应用程序还是DSP侧的算法。另外,参考video_copy例子时注意代码的注释,以便清楚哪一句代码可以删掉哪一句必须要修改或保留。如果要扩展xDM的数据结构请参考:http://wiki.davincidsp.com/index.php?title=Extending_data_structures_in_xDM。

  4)Codec Engine DSP侧会涉及到Cache一致性的问题。请参考:http://wiki.davincidsp.com/index.php?title=Cache_Management

  5)关于Codec Engine系统调试,有以下几种方法:

  A.打开Codec Engine trace,通过打印信息看问题出在什么地方。比如engine_open失败,DSP侧不能创建codec 等等。

  a)Codec Engine 2.0及以上版本,请参考:http://wiki.davincidsp.com/index.php?title=Easy_CE_Debugging_Feature_in_CE_2.0

  b)Codec Engine 1.x版本,请参考:http://wiki.davincidsp.com/index.php?title=TraceUtil

  B.ARM应用程序跑起来后,用仿真器连上CCS调试DSP侧程序,参考:http://wiki.davincidsp.com/index.php?title=Debugging_the_DSP_side_of_a_CE_application_on_DaVinci_using_CCS

  C.用Soc Analyzer可以做系统调试之外,还可以统计具体函数运行(ARM和DSP侧)时间(benchmark)。请参考:http://tiexpressdsp.com/wiki/index.php?title=SoC_Analyzer

  6)因为Codec Engine是介于ARM 应用程序和编解码算法中间的软件模块,很多工程师非常想知道它的开销(overhead),请参考:http://wiki.davincidsp.com/index.php?title=Codec_Engine_Overhead

  7)如何在Linux环境下编DSP的汇编或线性汇编程序?

  在Codec Engine安装路径下/packages/config.bld文件里

  var C6?P = xdc.useModule(‘ti.targets.C6?P’);

  之后添加:

  C6?P.extensions[“.sa”] = {

  suf: “.sa”, typ: “asm:-fl”

  }

  或

  C6?P.extensions[“.asm”] = {

  suf: “.asm”, typ: “asm:-fa”

  }

  8)DSP侧如何统计具体函数运行时间?

  TI DSPC6?x+内核有一个6?位的硬件定时器(Time Stamp Counter),它的频率和CPU频率一致。最简单的办法是使用TSC的低32位TSCL。注意在DM6?4x中,TSCH用于ARM。

  #include

  void main (){

  …

  TSCL=0;

  …

  t1=TSCL;

  my_code_to_benchmark();

  t2=TSCL;

  printf(“# cycles == %dn”, (t2-t1));

  }

  6.结语

  以上针对如何上手TI的Codec Engine做了简单的归纳,还有很多具体细节的问题没有涉及到。还请各位工程师从自己要用的软件模块发布说明文档开始找到相关的文档并研究。

1 2

关键词: DSP 通信 协同 工作 ARM 实现 监控系统 如何 快速 视频

加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW

或用微信扫描左侧二维码

相关文章

查看电脑版