您当前的位置:五五电子网电子知识通信技术数字通信视频监控系统中快速实现ARM和DSP的通信和协同工作 正文
视频监控系统中快速实现ARM和DSP的通信和协同工作

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

点击数:7574 次   录入时间:03-04 11:57:07   整理:http://www.55dianzi.com   数字通信

  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] 


本文关键字:通信  视频监控  协同  数字通信通信技术 - 数字通信