消息量函數分析OS_EVENT *OSSemCreate (INT16U cnt)

OS_EVENT  *OSSemCreate (INT16U cnt)                                ;該函數返回的數據類型爲指針,指針指向的數據類型爲OS_EVENT(事件的數據類型爲結構體)。也就是函數返回一個地址,地址裏存的是新創建的結構體類型所佔據的內存的首地址。 

 OS_EVENT  *pevent;
 pevent = OSEventFreeList;                                                                                                                                                       if (OSEventFreeList != (OS_EVENT *)0) {                /* See if pool of free ECB pool was empty   */
        OSEventFreeList = (OS_EVENT *)OSEventFreeList->OSEventPtr;
    }                           

;首先創建一個指向OS_EVENT結構體類型的指針pevent;系統初始化時會創建一個空事件控制塊鏈表,而創建的空事件控制塊的數目由常數OSEventMax來決定。OSEventFreeList就指向這個空事件控制塊鏈表的第一個,所以上面的程序裏把OSEventFreeList賦給了pevent,也就是讓pevent指向第一個空事件控制塊,然後又讓OSEventFreeList指向了空事件控制鏈表中的第二個。也就是從空事件鏈表中摘出了第一個給事件使用。

 if (pevent != (OS_EVENT *)0) {                         /* Get an event control block               */
        pevent->OSEventType    = OS_EVENT_TYPE_SEM;
        pevent->OSEventCnt     = cnt;                      /* Set semaphore value                      */
        pevent->OSEventPtr     = (void *)0;                /* Unlink from ECB free list                */
#if OS_EVENT_NAME_SIZE > 1
        pevent->OSEventName[0] = '?';                      /* Unknown name                             */
        pevent->OSEventName[1] = OS_ASCII_NUL;
#endif
;以上就是對新創建的空任務控制塊的各個量進行初始化。

OS_EventWaitListInit(pevent);           ;通過調用OSEventWaitListInit()對事件控制塊中的等待任務列表進行初始化。該函數初始化一個空的等待任務列表,其中沒有任何任務。該函數的調用參數只有一個,就是指向需要初始化的事件控制塊的指針pevent。         

return (pevent);                                      ;返回創建的結構體類型數據的首地址的指針
                                                                                                                        



 

發佈了50 篇原創文章 · 獲贊 10 · 訪問量 30萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章