一、事件控制塊(ECB)spa
任務管理須要任務控制塊(TCB),一樣,如果管理事件,也須要事件控制塊(ECB),其定義於ucos_ii.h中code
1 #if (OS_EVENT_EN) && (OS_MAX_EVENTS > 0) 2 typedef struct os_event { 3 INT8U OSEventType; /* Type of event control block (see OS_EVENT_TYPE_xxxx) */ 4 void *OSEventPtr; /* Pointer to message or queue structure */ 5 INT16U OSEventCnt; /* Semaphore Count (not used if other EVENT type) */ 6 #if OS_LOWEST_PRIO <= 63 7 INT8U OSEventGrp; /* Group corresponding to tasks waiting for event to occur */ 8 INT8U OSEventTbl[OS_EVENT_TBL_SIZE]; /* List of tasks waiting for event to occur */ 9 #else 10 INT16U OSEventGrp; /* Group corresponding to tasks waiting for event to occur */ 11 INT16U OSEventTbl[OS_EVENT_TBL_SIZE]; /* List of tasks waiting for event to occur */ 12 #endif 13 14 #if OS_EVENT_NAME_SIZE > 1 15 INT8U OSEventName[OS_EVENT_NAME_SIZE]; 16 #endif 17 } OS_EVENT; 18 #endif
用綠色突出兩個重點。blog
1.1 OSEventType 取值範圍隊列
1 /* 2 ********************************************************************************************************* 3 * OS_EVENT types 4 ********************************************************************************************************* 5 */ 6 #define OS_EVENT_TYPE_UNUSED 0u //未使用 7 #define OS_EVENT_TYPE_MBOX 1u //消息郵箱 8 #define OS_EVENT_TYPE_Q 2u //消息隊列 9 #define OS_EVENT_TYPE_SEM 3u //信號量 10 #define OS_EVENT_TYPE_MUTEX 4u //互斥信號量 11 #define OS_EVENT_TYPE_FLAG 5u //事件標誌組
用宏代替,頗有可讀性。事件
1.2 OS_EVENT_TBL_SIZE宏定義消息隊列
1 #define OS_EVENT_TBL_SIZE ((OS_LOWEST_PRIO) / 8 + 1) /* Size of event table */
事件等表明的大小與任務數是密切相關的。OS_EVENT_TBL_SIZE是最低優先級的任務優先級,也就是空閒任務的優先級(書上說和就緒表大小同樣,若是空閒任務優先級是63的話,但是我已經忘了什麼是就緒表了,Mark一下)。it
事件等待組和事件等待表的關係與任務管理中就緒組和就緒表的關係是同樣的,只不過事件等待組和事件等待表用於管理等待事件發生的的任務,並且這二者都在事件控制塊中,不像就緒表和就緒組就獨立的。io
二、ECB表event
於ucosii.h中定義table
1 #if (OS_EVENT_EN) && (OS_MAX_EVENTS > 0) 2 OS_EXT OS_EVENT *OSEventFreeList; /* Pointer to list of free EVENT control blocks */ 3 OS_EXT OS_EVENT OSEventTbl[OS_MAX_EVENTS];/* Table of EVENT control blocks */ 4 #endif
要注意的一點是,此表爲全局變量,儘可能表名與ECB中OSEventTbl同名(還有不少結構中也有與此同名的聲明,可是類型不一樣)。
三、事件控制塊和空閒鏈表
在事件管理中,將空閒的時間塊鏈接成爲一個單項的鏈表——事件控制塊空間鏈表。這個鏈表的形式和TCB空間鏈表的形式是徹底相同的。
介紹得很潦草,半年沒有學ucos了。
還好上次放下以前畫了一張map,否則都不知道怎麼開始。
lucky