• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 嵌入式系統 > 設計應用 > 視頻監控系統中如何快速實現ARM和DSP的通信和協同工作

    視頻監控系統中如何快速實現ARM和DSP的通信和協同工作

    作者: 時間:2012-08-31 來源:網絡 收藏

    4.2 系統工程師應該著手?

    本文引用地址:http://www.czjhyjcfj.com/article/148474.htm

      通常算法工程師都會把自己的符合xDM標準算法編成一個.lib文件(或 .a6?P),供系統工程師調用。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 應用程序工程師應該如何著手?

      應用工程師需要調用Codec Engine的VISA API,最終編出側的可執行程序,因此,必須根據自己的應用學習相關的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 下一頁

    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 隆回县| 武穴市| 于田县| 巩义市| 盐山县| 余江县| 板桥市| 额尔古纳市| 都江堰市| 安西县| 东宁县| 平原县| 齐河县| 鄂尔多斯市| 佛冈县| 资溪县| 陈巴尔虎旗| 玛曲县| 丹棱县| 易门县| 金川县| 朝阳区| 涿州市| 利川市| 乌鲁木齐县| 连江县| 娄底市| 襄汾县| 嘉义市| 潜山县| 健康| 井冈山市| 达尔| 玉树县| 神农架林区| 多伦县| 英山县| 保靖县| 景洪市| 郑州市| 宁国市|