《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 設計應用 > 基于RF5框架的XDAIS標準算法封裝與調用
基于RF5框架的XDAIS標準算法封裝與調用
2015年微型機與應用第11期
周佳兵,潘澤躍,曹 飛
(中國科學技術大學 自動化系,安徽 合肥 230027)
摘要: 介紹了TI DSP算法標準XDAIS(TMS320 algorithm standard)和算法參考框架RF5(Reference Framework 5),分析了XDAIS算法接口的實現和RF5框架中數據元素的操作流程。通過建立標準算法庫,并在實例工程中基于RF5框架實現標準算法的封裝與調用,較大地提高了算法性能。
Abstract:
Key words :

  周佳兵,潘澤躍,曹 飛

  (中國科學技術大學 自動化系,安徽 合肥 230027)

  摘  要: 介紹了TI DSP算法標準XDAIS(TMS320 algorithm standard)和算法參考框架RF5(Reference Framework 5),分析了XDAIS算法接口的實現和RF5框架中數據元素的操作流程。通過建立標準算法庫,并在實例工程中基于RF5框架實現標準算法的封裝與調用,較大地提高了算法性能。

  關鍵詞: 算法參考框架;算法接口標準;算法封裝

0 引言

  TI公司提出了eXpressDsp軟件技術,在軟件開發層面上推出了BIOS+RF5+算法標準XDAIS架構。XDAIS規范了DSP算法軟件的開發,提供了類似面向對象編程中的類的封裝方式的算法接口,使得算法集成變得簡單統一。RF5作為DSP軟件開發的起步代碼參考框架,以DSP/BIOS為基礎,利用其中的數據處理元素和數據通信元素可以方便地完成復雜算法應用程序的設計與開發。但在實際工作中,XDAIS算法、RF5框架的使用卻顯得相對較少,導致實際開發的程序過于臃腫,代碼移植性較差,這主要因為XDAIS算法接口的調用、RF5框架的層次化封裝相對復雜。如何規范使用XDAIS與RF5,使得音視頻、網絡通信等包含大量算法、多線程通道的復雜應用程序的開發更為簡便已成為廣大DSP開發者的迫切需求。

1 RF5框架

001.jpg

  RF5主要實現了存儲管理、線程模型和通道封裝三個功能。RF5基本框架結構如圖1[1]所示。RF5框架通過驅動開發套件(DDK)[2]完成應用層與底層硬件的交互;以DSP/BOIOS為基礎,通過對XDAIS算法的封裝完成應用程序的開發。芯片支持庫(CSL)[3]作為驅動模塊與底層硬件的橋梁為各種外設提供標準庫函數調用。

  RF5框架包含4個基本數據處理元素:線程(TASK)、通道(CHANNEL)、核(CELL)、XDAIS算法。它們處于依次包含的關系。每一個線程可以包含多個通道,并順序執行所包含的通道,用以完成特定的操作;通道是核的集合,核在通道內也被順序執行;核內封裝了XDAIS算法,一個核便是包含一種XDAIS算法的容器,并提供了供外部調用的核對象接口(ICELL)以及核通信管理模塊ICC對象。

2 XDAIS算法庫封裝

  2.1 抽象算法接口與實例算法接口

  XDAIS是為了提高DSP軟件開發效率而提出的一套通用算法接口標準。XDAIS算法可以重復利用且以庫的形式在程序中被調用。為統一算法開發規范,該標準提供一系列規則[4],如XDAIS算法不允許直接訪問硬件外設,必須通過標準的資源管理接口(IALG)來實現。

  IALG抽象接口IALG_Fxns[5],也叫算法成員對象列表或V-表,主要實現存儲管理、創建和銷毀算法實例對象。其內部有3個重要結構字段:algAlloc()、algFree()和algInit()。algAlloc()和algFree()表示內存的分配和釋放,algInit()用來初始化算法參數并使內存指向算法的處理空間。三個字段都不能為NULL。

  在具體應用時,需要另外創建算法實例接口IXX_Fxns(XX表示要實現的具體算法名),該接口包含了算法的具體實現函數聲明。以JPEG解碼算法為例,定義的算法實例接口代碼如下:

  typedef struct IJPEGDEC_Fxns{

  IALG_Fxns ialg;

  XDAIS_Int32(*decode)(IJPEGDEC_Handle

  handle,XDAS_Int8**in,XDAS_Int8*out);

  }IJPEGDEC_Fxns;

  IJPEGDEC_Fxns是IALG_Fxns的擴展。IJPEGDEC_Fxns中聲明了具體解碼實現函數decode()。在應用程序中調用decode()函數,需要將整個XDAIS算法封裝成庫,在應用程序所在的工程中加載該庫,并調用該庫提供的接口decode()函數實現解碼運算。

  2.2 算法庫封裝實現

  XDAIS的特點是,主要內存的分配和銷毀不再由具體的算法負責,而是據據XDAIS算法內存使用規則及內存分配字段函數alg_alloc()予以分配。抽象算法接口函數調用流程如圖2所示。

002.jpg

  實際算法框架搭建步驟是:首先啟動XDAIS算法組件向導,定義算法接口標示,如JPEGDEC_TI_IJPEGDEC,JPEGDEC表示算法功能為JPEG解碼,TI表示算法持有人。在向導中定義輸入輸出參數結構體,聲明內存表結構、核心處理函數XX()等內容,生成算法接口文件。其次專門建立庫工程(.lib文件),包含上一步生成的工程目錄下的算法接口文件,并分配內存表,修改輸入輸出參數,并實現算法處理函數XX()。最后釋放內存并修改編譯選項,編譯完成后生成符合XDAIS的標準接口算法庫(.lib文件)。

3 RF5框架使用

  XDAIS算法封裝成庫之后,就需要考慮如何去調用它。開辟新的工程,在命令鏈接文件中實現算法庫的代碼如下:

  _JPEGDEC_IJPEGDEC=

  _JPEGDEC_TI_IJPEGDEC-l.\lib\jpeg_ti.lib

  通過第一句賦值,在新工程中引用_JPEGDEC_IJPEGDEC即可調用XDAIS實例算法接口,jpeg_ti.lib是成功封裝的XDAIS標準算法庫,第二句成功將jpeg算法庫鏈接到工程文件中去。

  根據RF5的數據元素特性,需要算法、核、通道、線程一步步地按層次封裝。首先第一步需要將XDAIS算法封裝在CELL中,只需要將算法庫的實例算法接口在應用程序所在工程中進行調用即可。在這之前,需要在頭文件中聲明CELL對象ICELL_Obj和CELL接口ICELL_Fxns等,ICELL_Obj封裝了實例算法接口、CELL接口ICELL_Fxns和ICC句柄,通過ICELL_Fxns定義的操作函數cellExcute()來管理并執行CELL中封裝的算法處理函數,通過ICC句柄實現CELL與通道對象間通信。

  以JPEG解碼算法為例,算法處理線程源文件中ICELL_Obj的定義如下:

  typedef struct ICELL_Obj{

  cell=&thrProcess.cellListDecode[];//創建cell對象

  cell->cellFxns=

  &JPEGDEC_CELLFXNS;//定義CELL接口

  cell->algFxns=

  (IALG_Fxns*)&JPEGDEC_IJPEGDEC;

  //實例算法接口封裝

  inputIcc=(ICC_Handle)ICC_linearCreate(NULL,0);

  //創建輸入ICC對象

  outputIcc=(ICC_Handle)ICC_linearCreate(NULL,0);

  //創建輸出ICC對象

  CHAN_regCell(cell,&inputIcc,1,&outputIcc,1);

  //將cell注冊到通道中

  }

  通過BIOS配置算法處理線程[6],在算法處理線程中定義CELL對象ICELL_Obj、ICC句柄ICC_Handle和算法處理參數,在main函數里初始化通道模塊,這是因為必須通過通道channel去操作。在線程初始化函數中進行通道內cell的注冊CHAN_regCell(),然后通過CHAN_open()函數打開通道,最后在線程處理函數中調用CHAN_execute()完成CELL接口調用,執行CELL接口調用函數cellExcute(),最終調用封裝在CELL內的算法處理函數XX()。如圖3所示。

003.jpg

4 封裝實例

  結合H.264編碼算法封裝實例,通過軟件開發平臺CCS3.3實際測試算法性能。創建了兩個例程,分別是采用XDAIS標準和RF5封裝的算法程序,和以源文件形式存在未經封裝的算法程序。在BIOS靜態面板中配置內存空間并配置輸入輸出線程,輸入線程采集圖像數據,而輸出線程在兩個實例中則作用不同。

  首先,未經封裝的編碼算法所涉及的幀間預測、運動估計、量化等一系列算法子函數均以源文件存在于工程中并在tskVideoOutput線程中調用,如圖4所示。

004.jpg

  將這些程序文件按照XDAIS算法標準封裝于庫H.264_enclib.lib中,然后按照RF5框架數據元素的封裝步驟,在tskProcess線程中調用此庫和算法處理函數接口,得到工程如圖5所示。

005.jpg

  其次通過在程序中添加UTL統計函數來分別分析和比較采用兩種方法的算法執行情況。圖6所示為未封裝情況,在tskOutput線程中設置STS時間統計模塊stsExeTimeEnc得到編碼算法程序執行的平均指令周期為11.599 ms。圖7為經RF5框架封裝后的算法執行情況,在tskVideoProcess線程中設置STS時間統計模塊stsExeTimeh264Enc得到平均指令周期為4.083 ms。

006.jpg

  從CPU占用情況來看,未經封裝的算法程序CPU占用率較高,平均占有率在50%左右,而經過RF5封裝調用的算法程序實際平均CPU占用率在31%左右,分別如圖8和圖9所示。

007.jpg

5 結束語

  以上分析了整個XDAIS算法封裝和調用的具體過程。通過eXpressDSP提供的XDAIS算法組件向導生成標準算法框架,然后編寫符合XDAIS標準的具體應用算法。通過此框架生成lib庫文件并提供接口給需要調用它的工程,在調用工程中通過線程、通道、核對象等接口一步步地對該算法予以封裝,最終建立起含有復雜算法的RF5框架工程。框架的建立和算法的封裝過程也證明了RF5強大的擴展性和適用性,設計人員不用考慮底層就能開發出多通道復雜算法的應用程序。通過對算法函數、核及通道對象的修改就可輕松移植適合特定工程的算法,在實際工程應用中具有很大的實用性。

  參考文獻

  [1] Texas Instruments Incorporated. Reference frameworks for eXpressDSP software: RF5, an extensive, high-density system[R]. Texas Instruments, 2003.

  [2] DSP/BIOS driver developer′s guide[R]. Texas Instruments,2005.

  [3] TMS320C6000 CSL API reference guide[R]. Texas Instruments, 2004.

  [4] Texas Instruments Incorporated.TMS320 DSP算法標準[M].徐盛,胡劍凌,譯.北京:清華大學出版社,2007.

  [5] TMS320 DSP algorithm standard  API reference[R]. Texas Instruments, 2005.

  [6] DSP/BIOS user′s guide[R]. Texas Instruments, 2002.


此內容為AET網站原創,未經授權禁止轉載。
主站蜘蛛池模板: 久久精品国产亚洲av电影 | 乱系列中文字幕在线视频| 精品无码久久久久久国产| 国产精品久久久久aaaa| 一二三四视频免费视频| 日本视频免费高清一本18| 亚洲欧美日韩国产精品一区二区| 综合人妻久久一区二区精品| 国产日韩欧美不卡在线二区| 99久久精品免费精品国产| 成人在线不卡视频| 久久精品国产亚洲7777| 欧美最猛黑人xxxx黑人猛交98| 免费视频中文字幕| 色费女人18毛片a级毛片视频| 国产第一福利136视频导航| assbbwbbwbbwbbwbw精品| 成人自拍视频网| 久久精品aⅴ无码中文字字幕重口 久久精品aⅴ无码中文字字幕重口 | 丰满少妇被猛烈进入无码| 欧美fxxx性| 亚洲综合在线一区二区三区| 精品欧美同性videosbest| 国产又猛又黄又爽| 亚洲综合色7777情网站777| 夜夜高潮天天爽欧美| 一级毛片成人午夜| 日本人强jizzjizz老| 乱色熟女综合一区二区三区 | 法国性XXXXX极品| 再深点灬舒服灬太大了np视频| 超清首页国产亚洲丝袜| 国产欧美色一区二区三区| 538精品在线观看| 夜夜橹橹网站夜夜橹橹| 一本大道香蕉在线影院| 手机看片一区二区| 久久久精品人妻无码专区不卡| 暴力调教一区二区三区| 亚洲国产成AV人天堂无码| 污污视频网站免费观看|