uCOS II中訊號量的使用
對於訊號量,uCOS II中共提供了六個函式:OSSemCreate 、OSSemDel、OSSemPend、OSSemPost、OSSemAccept、OSSemQuery。其中我們常用的只有三個即 OSSemCreate 、OSSemPend、OSSemPost 。
訊號量的結構為:
typedef struct {
INT8U OSEventType;
INT8U OSEventGrp;
INT16U OSEventCnt;
void *OSEventPtr;
INT8U OSEventTbl[OS_EVENT_TBL_SIZE];
} OS_EVENT;
OSSemCreate的函式原型為:OS_EVENT *OSSemCreate(INT16U cnt),cnt 表示在實際使用中有多少個相同的資源,cnt的值就是OSEventCnt的值。
OSSemPend的函式原型為:void OSSemPend(OS_EVENT *pevent,INT16U timeout,INT8U err),pevent:就是要請求的訊號量地址;timeout:請求的超時時間,如果為0表示無限時等待;err:用來返回是否出錯。每執行一次 OSSemPend,OSEventCnt就會減1。如果OSEventCnt值為0,執行OSSemPend時,當時任務將因為無法得到相應的資源而被 掛起。
OSSemPost的函式原型為:INT8U OSSemPost(OS_EVENT *pevent),同樣pevent 就是要傳送的訊號量地址;每執行一次OSSemPost,OSEventCnt就會加1。