久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3487|回復: 0
收起左側

RF5架構簡介

[復制鏈接]
ID:114320 發表于 2016-5-10 03:18 | 顯示全部樓層 |閱讀模式
RF5架構簡介
RF5是德州儀器TI公司新近推出的DSP軟件開發的起步代碼參考框架,它以DSP/BIOS為基礎,利用其中的數據處理元素和數據通信元素方便快捷地完成DSP軟件的設計與開發。RF5RF的最新版本,其區別于RF1RF3的顯著特點是其支持動態對象創建和支持線程(任務)掛起功能,因此適合系統較復雜的應用場合。
RF5 主要實現三個功能,存儲管理,線程模型和通道封裝,對于不同的應用,我們只需在這三個元素上做修改,而對于整個應用程序,不用從頭設計,這樣大大簡化了開發者的開發難度,縮短了開發時間。
      RF5適用于包含大量的算法,且要求多線程,多通道的應用,如圖像處理,多媒體應用等,以Ti提供的實例mpeg2loopback為例,對RF5進行分析。
      RF5包含的元素有:
1 線程(Thread)
      RF5框架包含四個基本的數據處理元素,處在最頂層的是線程,線程總是順序的執行所包含的通道,線程在一個比較高級的級別上把數據組織在一起,他們可以與別的線程,設備驅動以及別的類似結構進行通訊,在mpeg2lookback實例中,創建了三個線程分別是tskVideoInput tskVideoOutputtskProcess。每個線程都在不斷的等待消息,處理數據,并將結果發送給其他的線程,同時有可能還要發送同步消息給其他線程以實現線程間的通訊,這里使用的機制是SCOM模塊。
      每個線程都是進行數據處理的一個單元,有的處理是簡單的,有的處理是相對復雜的過程,簡單的線程可以不包括任何的通道,而進行復雜數據處理的線程有可能包含多個的通道。
2 通道(Channel):
      RF5
提供了一種通道結構是為了更方便的封裝算法,這可以理解通道為并行里的串行,因為線程的執行就是由通道的串行執行來完成的,一個通道包含一組核(Icell)。其主要任務就是依次順序的執行所包含的核,主要執行的流程為:首先需要初始化通道模塊,然后建立通道對象,注冊該通道所包含的核對象,接著依次執行每個核,執行完成了后就銷毀對象,最后退出。每個通道可以包含多個核,每個核都要進行初始化后再調用CHAN_regCell注冊。
通道對象的結構如下:
typedef struct CHAN_Obj {
     ICELL_Obj *cellSet;          /* set of cells in the channel */
     Uns cellCnt;                 /* number of cells in the cellSet */
     CHAN_State state;            /* state of the channel */
     Bool (*chanControlCB)(CHAN_Handle chanHandle); /* optional control function */
} CHAN_Obj;
      
線程一般不定義通道對象,但是在CHAN_open()調用中初始化它們。CHAN_open()的最后一個參數是通道屬性(CHAN_Attrs)結構體的地址。如果最后一個參數是NULL,那么CHAN_open()使用默認的參數。如果要想使用不同的參數,就要聲明一個CHAN_Attrs的結構體,并需初始化為CHAN_ATTRS宏所定義的初值,然后根據需要可以修改其中相應的域的值。通常,其中的通道狀態參數CHAN_State state域默認為CHAN_ACTIVE,通道控制回調函數參數域Bool (*chanControlCB)(CHAN_Handle chanHandle)默認為NULL。如果通道控制回調函數不是空,那么在任何的cell調用執行之前都會先調用此回調函數。
     一個典型的設置:一個線程為每一個通道建立一個CHAN_Obj對象(或者一組類似的對象),并且為每一個cell建立一個ICELL_Obj對象(或者是與每個通道相對應的一組ICCE_Obj對象)。在線程初始化ICELL_Obj之后就會調用下面的函數:
備注其中的cell 指向cell 對象的指針, inputIcc/outputIcc是相應的cell ICC 對象,這個調用計算單元需要的空間,并分配給定的ICC對象給單元cell
   CHAN_regCell( cell, inputIcc, 1, outputIcc, 1 );
   當所有的cells都已經創建并初始化之后,線程調用CHAN_open()函數來為每一個指定的通道(chanNum)傳遞cell對象(cellList)。這個函數創建所有的XDAIS算法,并且如果單元細胞定義了cellOpen函數,則會調用每一個單元細胞的cellOpen函數,.
   CHAN_open( chanList[ chanNum ], cellList, numCells, NULL/* default attributes */ );
最后,在運行時,線程為每一個通道(chanNum)調用CHAN_execute函數開始執行:
   CHAN_execute( chanList[ chanNum ], NULL /* arg to cells */ );
3
核(Icell):
      核實際上就是ICELL接口對象,基于RF5的應用常常包含大量的算法和通道。為了便于算法集中到應用中,RF5提出了核的概念。一個核就是包含一種 XDAIS算法的容器,一個RF5通道對象可以包含多個核,也即是包含多個算法。通道通過核來調用算法,實際上,真正的數據處理是在XDAIS算法中進行的,核只是提供一個調用算法的接口,這大大簡化了工作量,便于移植。
      該接口包含一個重要的結構:ICELL_Fxns,該結構包含一組函數指針。通道通過調用這些函數來調用算法,其中包含一個關鍵的函數 cellExecute,這個函數的功能是調用XDAIS算法來執行,上面的通道執行函數CHAN_execute就包含了每個cellExecute的調用。
4 ICC模塊
      ICC模塊是用來管理在核之間以及核與其他線程之間的數據通訊,我們知道線程間的數據傳輸是通過SCOM模塊來實現的,每個ICC模塊管理一個或者多個 ICC對象,每個核都有一組輸入和輸出ICC對象。這些對象是通過CHAN_regCell()來注冊到相應的通道里。
5 同步通訊機制(SCOM)
      ThrProcess
中包含兩個SCOM對象,RF5使用SCOM對象來實現線程間的通訊。SCOM消息是用戶自定義的一個機構,一個線程通過調用 SCOM_putMsg()函數將SCOM消息放置到一個SCOM隊列中,發送給其他的線程,或者通過調用SCOM_getMsg()函數從隊列中獲取消息。一般情況下,發送消息指明接收線程所要讀取的數據緩沖區的地址(以指針形式),接收消息指明發送線程所要寫入的數據緩沖區的地址。在 mape2loopback實例中,thrProcess要從thraVideoInput接收消息,并發送消息給thrVideoOutput輸出圖像。RF5使用SCOM來實現線程間的通訊:thrProcess擁有一些緩沖區,需要thrVideoInput寫或thrVideoOutput讀,所以thrProcess通過SCOM告訴thrVideoIputthrVideoOutput線程數據緩沖區的地址,同時還要保證兩個線程不會同時訪問同一個緩沖區。thrProcess創建了兩種消息以分別和兩個線程進行通訊,scomMsgRxscomMsgTxscomMsgRx指定了被 thrVideoInput寫的緩沖區地址,scomMsgTx指定了被thrVideoOutput讀的緩沖區地址。
      在實際的操作中,可以將SCOM看作是一種同步標記,它用來區分模塊內存是否正在被其他線程所使用,這樣就可以防止內存訪問的沖突。整個系統中包含很多存儲區,這些存儲區很有可能在某一時刻正在被某一線程訪問,為了保證在任意時刻只有一個線程訪問某該存儲區,當前正在訪問這一內存塊的線程通過發送SCOM消息給與這一內存塊有關聯的線程,告訴它們,我正在訪問呢,你等會再來吧。當它訪問完后,放棄了這一內存塊的占有權,再通過SCOM消息告訴相關聯的線程,我用完了,你可以用了。于是相關聯的線程就可以訪問了。
6 ALGRF模塊算法的實例化Algorithm Instantiation
ALGRF Module
DSP/BIOSMEM內存管理器來創建和刪除XDAIS算法的模塊。參考框架服務簡化XDAIS部件的使用。所有符合XDAIS標準的算法都必須使用一個標準的接口——IALG接口。ALGRF使用算法的IALG來實現對XDAIS算法的實例化。任何符合XDAIS標準的算法都可以被 ALGRF所使用。
用戶代碼不必直接的調用ALGRF函數,這個工作由CHAN和其他的庫函數來完成。例外的是cell wrappers中的ALGRF_activate/deactivate序列化:如果cell中的XDAIS算法執行 IALG_active/deactivate函數,細胞需要調用兩個ALGRF函數來完成。
三個模塊來簡化IALG接口創建算法對象:RF5使用ALGRF模塊來創建,配置,刪除XDAIS算法實例;ALG模塊使用CCStudio作為通用目的使用;并且不用DSP/BIOS MEM模塊分配內存。ALGMIN是三個中的最小應用。
一般情況下,三個模塊是相互包含的,但是只有一個能在應用程序中使用。ALGRF適于RF5的需要和別的RF級別,而不適合緊湊和底端的如RF1級別的系統。
ALGRFALG相比,有以下的優勢:
1 更小的代碼腳本(代碼量):
作為一個通用的模塊,ALG支持malloc/free 運行庫和DSP/BIOS MEM_alloc/MEM_free動態內存分配方式,ALGRF只支持DSP/BIOS分配,這為設計者省了代碼空間,另外ALGRF保證沒有無用代碼的存在。只有被調用的函數才被連接到執行程序中。
2 暫存區支持:
  下面為APIALGRF中介紹的實例:
ALGRF_Handle ALGRF_createScratchSupport(IALG_Fxns *fxns, IALG_Handle parent,
IALG_Params *params, Void *scratchBuf, Uns scratchSize)
除了當IALG_SCRATCH內存區域(內部數據緩沖區)被請求,該函數能根據算法請求分配內存。作為替代,scratchBuf scratchSize這兩個參數表明這一緩沖區已經在應用中存在,而且可以被當前的算法重新使用。這就可以受約束的共享資源有限的內存區。
3 從DSP/BIOS堆標簽中做提取:
  ALGRF使用DSP/BIOS MEM模塊動態分配內存。一個堆標記或內存段名可以傳給
MEM_alloc()來表明分配到哪一個堆.如下:
     /* Configure the ALGRF module to use:
     * 1st argument - memory for internal heap
     * 2nd argument - memory for external heap
     */
  ALGRF_setup( INTERNALHEAP, EXTERNALHEAP );
  這讓我們可以指定算法的數據分配位置。例如,如果使用EXTERNALHEAP作為兩個參數,那么算法的數據就被定位在外部存儲器。

回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 俺去俺来也在线www色官网 | 午夜精品国产精品大乳美女 | 久久精品一区二区三区四区 | 久久精品视频国产 | 精品久久网站 | 国产亚洲视频在线观看 | 国产人成一区二区三区影院 | 欧美理论片在线观看 | 一区二区三区四区在线视频 | 日本高清在线观看 | 欧美中文字幕 | 九九久久精品视频 | 久草视频免费在线 | 国产欧美日韩一区 | 色综合视频在线观看 | 亚洲日本一区二区 | 超碰av在线播放 | 久久精品日韩 | 久久久久久久久久国产精品 | 亚洲精品一二区 | 五月天婷婷综合 | 日日夜夜精品免费 | 国产九九九 | 中文字幕在线观看日本 | 欧美成人xxx| 成人扒开伸进免费观看 | 亚洲天堂国产 | 麻豆一区二区三区 | 久久综合国产 | 天天干少妇 | 欧美日韩在线视频观看 | 中文字幕在线资源 | 欧美精品一级片 | 免费在线观看毛片 | 老司机免费福利视频 | 日韩精品免费在线观看 | 高清一级片 | 一区二区三区免费观看 | 中文字幕在线免费观看 | av免费观看网站 | 国产精品一区二区在线免费观看 |