1. 程式人生 > >uCOS II中訊號量的使用

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。