溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C66xDSP芯片—semaphore 2 介紹

發(fā)布時間:2020-07-18 10:50:15 來源:網絡 閱讀:4056 作者:zjd1988 欄目:開發(fā)技術

Semaphore 2簡介

多核芯片(具體參考相應的數據表文檔)包含一個增強型信號量模型來管理C66xCorePacs的共享資源。Semaphore可以強制對一些芯片級的共享資源只可以執(zhí)行原子操作,進而保證對其的讀寫的順序。每個核在擁有資源時,Semaphore模塊會對每個核提供專門的中斷。

Semaphore不是和硬件資源綁定在一起,而是可以通過軟件來將Semaphore靈活的配置到不同的硬件資源。

Semaphore支持8masters,且包含32個可以使用的Semaphores。

Semaphore只能被pri ID0~7master訪問。這就意味著,只有CorePacs0~7和被CorePacs0~7EDMA transaction可以使用semaphore模型。

有三種訪問semaphore資源的方法:

直接訪問:每個核直接訪問semaphore,如果可用free,則分配指定的核。否則不分配。

間接訪問:每個核通過向其中執(zhí)行寫操作來間接訪問semaphore,一旦該semaphore free,會對相應核產生中斷,否則不產生中斷,而是將請求放入請求隊列。

混合訪問:是直接訪問和間接訪問的混合方式,工作方式:首先像直接訪問一樣,如果信號量free,直接或者使用權,否則要像間接訪問一樣,將請求放入隊列。簡言之,當信號量free時按直接訪問的方式,否則按間接訪問方式。

(以上摘自http://www.ti.com.cn/cn/lit/ds/symlink/tms320c6678.pdf中的semaphore部分內容,此文檔介紹不詳細。因此想要了解更多詳細內容請訪問http://www.ti.com.cn/cn/lit/ug/sprugs3a/sprugs3a.pdf。

Semaphore2 特性:

l提供對共享資源的的互斥訪問

l最多直接64個獨立的信號量

l信號量請求方式

——直接方式

——間接方式

——混合方式

l不分大小端

l信號量的原子操作

l鎖存模式(信號量被使用時)

l排隊等待信號量

l獲取信號量時產生中斷

l支持信號量狀態(tài)檢測

l錯誤檢測和錯誤中斷


理論學得再好,不會用都是白費。在安裝CCS5.4之后會提供關于semaphore的使用實例。位置是  CCS安裝路徑 \pdk6678\packages\ti\csl\examples \ sem2 \ sem2_test.c

在代碼中介紹了三種常用的semaphore的訪問方式:

1、direct access

2、indirect access

3、combined access


1、direct access

步驟:(1)保證你想使用的sem處于free狀態(tài),使用CSL_semIsFreesemNum

2)獲取信號量CSL_semAcquireDirectsemNum

確保該信號量的狀態(tài)為不被改變,直接訪問方式不更新 SEMFLAGS

3semGetFlagsmaster_id

(4) 確保當前正確獲得相應信號量的使用,CSL_semIsFreesemNum


。。。。


5)經過處理后,釋放信號量。CSL_semReleaseSemaphoresemNum

6)確保已經正確釋放,沒有產生錯誤。CSL_semIsFreesemNum;CSL_semGetErrorCode();


2、indirect access

1)確保信號量狀態(tài)是freeCSL_semIsFreesemNum

2)確保當前的標志寄存器對應比特位不是等待狀態(tài),CSL_semGetFlags(MASTER_ID),這是跟直接訪問不同的地方,直接訪問不用設置和清除標志寄存器。

CSL_semGetFlagsThis functionreturns the contents of the SEMFLAG register for a specific master. This isused in the indirect or combined access method to determine if a resource hasbeen acquired. The corresponding bit indicates that the specific resourcenumber which had been requested is now available.

3)采用間接訪問的方法獲取信號量資源,CSL_semAcquireIndirectsemNum


4)判斷當前是否獲得信號量,使用while來等待資源的獲取

   while (1)

   {

       semFlags = CSL_semGetFlags(MASTER_ID);//獲得相應信號量時,標志寄存器的相應比特位會被設置,此時只要檢測此比特是否被設置即可

       if (semFlags & (1 <<semNumber))

       {

           /* YES. Corresponding bit was set;this implies that the resource is available. */            

           break;

       }

   }

5)使用完信號量后要進行清除操作,流程如下

先將標志寄存器進行重置

CSL_semClearFlags(MASTER_ID, semFlags);


6)再次檢測標志位是否重置成功

if(CSL_semGetFlags(MASTER_ID)!= 0)


7)查看當前信號量是否是free

if (CSL_semIsFree(semNumber) == TRUE)

       return -1;


8)如果不是free狀態(tài),釋放信號量

CSL_semReleaseSemaphore(semNumber);


9)查看是否釋放成功

        if(CSL_semIsFree (semNumber) == FALSE)

       return -1;

10)確保上述操作沒有產生

            if (CSL_semGetErrorCode() != 0)

       return -1;


間接訪問比直接訪問的復雜的地方主要是在于,標志寄存器的賦值和清除,間接訪問原理,是將請求放入請求隊列以等待信號量free,當不是free則等待。一旦free,則將標志寄存器置為一,并產生中斷。當使用完畢后,要記得清除標志位,否則會發(fā)生錯誤。(如果標志寄存器沒有清除,則此時master請求其他信號量時,會將其他標志位賦值,此時就會有兩個標志位被設置,函數返回會出錯)。

一句話,大家寫程序按TI提供的例子的流程來寫。


3、混合訪問

1)確保當前信號量free

   /* Get the status of the semaphore:Semaphore should *not* be acquired. */

   if (CSL_semIsFree (semNumber) == FALSE)

       return -1;

2)確保當前標志寄存器

   /* Make sure there are no pending flags. */

   if (CSL_semGetFlags(MASTER_ID) != 0)

       return -1;

3)獲取信號量

   /* Acquire the semaphore. */

   if (CSL_semAcquireCombined(semNumber) == 0)

       return -1;

4)判斷獲取信號量操作是否成功

   /* Get the status of the semaphore:Semaphore should *not* be free */

   if (CSL_semIsFree (semNumber) == TRUE)

       return -1;

5)使用完成后,釋放信號量

   /* Now we release the semaphore. */

   CSL_semReleaseSemaphore (semNumber);

6)釋放操作是否成功

   /* Get the status of the semaphore:Semaphore should *not* be acquired. */

   if (CSL_semIsFree (semNumber) == FALSE)

       return -1;

7)確保上述操作未出錯

   /* Make sure the SEM Module has notreported any errors. */

   if (CSL_semGetErrorCode() != 0)

       return -1;


向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI