天天看點

《CMEM與DSPLINK詳解(二)》:DSPLINK關鍵元件

dsplink關鍵元件有8個,下面分别進行介紹。

 proc 元件表述應用空間的 dsp 處理器, proc 是處理器的縮寫。該元件提供以下服務:

--

初始化 dsp,使之能從 gpp 端進行通路;

加載 dsp 的代碼至 dsp 處理器;

從 dsp 代碼制定的位址運作 dsp 程式;

讀寫 dsp 端的位址空間;

停止 dsp 端程式的運作;

其他一些平台專有的控制操作;

目前版本隻支援一個處理器,而

api 設計支援多個 dsp 處理器,是以為提供了一個 processorid 參數以支援以後的多處理器功能。

 chnl 是 channel 的縮寫,該元件表述應用空間的一個邏輯資料傳輸通道,負責 gpp 與 dsp

之間的資料傳輸。通道 channel 的概念如下述:

一種 gpp 與 dsp 端傳輸資料方式

一個基于 gpp 與 dsp 的實體連接配接上的邏輯實體映射

唯一的一個數字辨別一個專用連接配接到 dsp 的一組 channel 中的某個 channel

--無方向性,通道方向可以在運作時進行配置;

多通道複用在

dsp 端與 gpp 端的一條實體連接配接上,實體連接配接基于 link 和相關 link 驅動的特性。

被傳輸的資料中不包含目的和源位址的任何資訊,資料發送與接收端的資料通路需要應用前進行顯式的建立。該元件采用

issue-reclaim模式進行資料傳輸,基于 dsp/biostm的

sio 子產品模仿 issue-reclaim 行為模式。

 msgq 是 message queue 的縮寫,表述基于 message 的隊列,負責 gpp與

dsp 端的可變長度的短消息互動,基于 dsp/biostm的 msgq 子產品實作。

message

的發送接收都通過消息隊列實作,消息接收者從消息隊列接收資訊,而消息發送者将資料寫入到消息隊列中,一個消息隊列隻可以有一個接收者,但可以有多個發送者。一個任務可以讀寫多個消息隊列。

 此子產品提供了 api 用于配置共享記憶體區域,同時還提供兩個 cpu 間的緩存資料同步的 api

接口。此子產品提供如下功能:

--通過調用打開(open)和關閉(close)配置共享記憶體區域;

--在共享記憶體區域内配置設定或釋放緩存;

--配置設定的記憶體位址可以在不同的位址空間内轉換;

--在不同

cpu 核之間實作記憶體資料的同步。

 此元件允許應用程式為發生在遠端處理器上的事件通知(notification)注冊,并發送事件通知給遠端的處理器。允許應用程式為遠端處理器上的事件注冊一個帶事件回調函數;使能應用程式發送事件通知到遠端處理器;同時,應用程式也可以發送一個事件處理的選項值。

notify

元件為事件通知定義了優先級,優先級通過事件編号來實作,低編号的事件享有更高的優先級。如果事件通知不再需要使用,應用程式也可以實時登出其相應的回調函數。

 應用程式 mpcs 實作 gpp 和 dsp( multi-processor critical section)互斥通路共享的資料結構。應用程式有時候需要定義屬于自己的,并能夠被多個處理器通路的資料結構,用于多個處理器之間資訊的通信。但是,應用程式必須保證多個處理器,或者每個處理上的

各個任務之間互斥的通路這些資料結構,從來保證資料的連貫性。為了實作這個設想, mpcs被用來支援這個功能。

在擁有可以共同通路的記憶體區域的多處理器系統中,可以實作

gpp 和 dps 之間的mpcs。為了防止沒有共享存儲區域的情況出現,該子產品内部實作了 mpcs 元件要求的帶保護的同步。

mpcs

元件提供了 apis 接口來建立和删除 mpcs 的實體。每個 mpcs 實體通過一個系統唯一的字元串名字來辨別。每一個需要使用 mpcs 的用戶端都需要調用 api 打開函數來擷取句柄。當不再需要使用

mpcs 時,通過相應的 api 函數來關閉句柄。同時也提供了進入和離開 mpcs 對象句柄指定的臨界區域的 api 函數。

如果

mpcs 對象要求的存儲空間由使用者提供的話,它必須位于所有處理器都可以通路到的池(pool)中;如果在建立對象的時候不提供存儲空間,則指定池的 id 号将被 mpcs對象用來内部配置設定空間。

 此元件提供給予 gpp 和 dsp 之間傳輸機制的雙重循環連接配接清單。在 gpp 和 dsp 之間存在共享存儲空間的裝置上,該子產品實作共享存儲空間的連接配接清單。對于不存在共享存儲空間的裝置,該子產品内部保持遠端處理器上連接配接清單的一緻。

該元件提供了建立和删除

mplist 實體的 apis 函數。每個 mplist 實體通過一個系統寬唯一的字元串名字來辨別。每一個需要使用 mplist 的用戶端都需要調用 api 打開函數來擷取句柄。當不再需要使用

mplist 時,通過相應的 api 函數來關閉句柄。

mplist

元件提供的 api 函數,可以在清單中最後加入一個新的元素,或者删除清單前面的一個元素。也允許應用程式在某個已有的清單元素前插入一個緩沖,删除清單中任意一個指定的元素。并提供了檢查清單是否為空的

api 函數。另外,還有 api 函數,通過擷取清單首元素的指針和指定元素後的一個元素,橫斷清單。

 該元件提供基于資料流的循環緩沖區。該元件允許在共享存儲空間建立循環緩沖區。不同的處理都能夠讀取或者寫入循環緩沖區。

ringio 元件允許寫指針擷取資料緩沖區的空存儲空間,當該存儲空間被釋放之後,相應存儲空間可以再次寫入。

ringio

元件允許讀指針擷取緩沖區中讀取空間的有效資料。當被釋放之後,相應存儲空間的資料被标記為無效。每個 ringio 實體擁有一個讀指針和一個寫指針。 ringio 元件也有

api 函數,可以使能資料屬性的同步傳輸。如: eos(end of stream)、事件戳、流偏移位址等,也可伴随着循環緩沖區的偏移值。

繼續閱讀