General Operations
Xxx為可代換的字
OSXxxCreate - 從ECB FreeList要一個新ECB
OSXxxDel - 將ECB還回ECB FreeList
OSXxxPend - 沒有resource就等Event發生
OSXxxAccept - 取不到resource就繼續執行自己的,不等Event發生
OSXxxPost - 釋放resource
OSXxxQuery - 將傳入的ECB複製一份回傳
Semantics of ECB
ISR或Task可以去發一個Event的訊號。
只有Task可以去等待Event發生。
指定Timeout表示只等待一段時間,如果這段時間內Event沒發生,那Task會被叫醒。

The use of TCB
ECB提供的function只有關於怎麼去操作資料結構。
Caller 必須要自己處裡同步化的問題。
ECB data structure
/*
*********************************************************************************************************
* OS_EVENT types
*********************************************************************************************************
*/
#define OS_EVENT_TYPE_UNUSED 0
#define OS_EVENT_TYPE_MBOX 1
#define OS_EVENT_TYPE_Q 2
#define OS_EVENT_TYPE_SEM 3
#define OS_EVENT_TYPE_MUTEX 4
#define OS_EVENT_TYPE_FLAG 5
/*
*********************************************************************************************************
* EVENT CONTROL BLOCK
*********************************************************************************************************
*/
#if (OS_EVENT_EN > 0) && (OS_MAX_EVENTS > 0)
typedef struct {
INT8U OSEventType; /* ECB的型態,為OS_EVENT_TYPE_??? */
INT8U OSEventGrp; /*Tbl對應到的列*/
INT16U OSEventCnt; /* Semaphore Count (其他 EVENT type 用不到*/
void *OSEventPtr; /* 指到message 或 queue structure的指標*/
INT8U OSEventTbl[OS_EVENT_TBL_SIZE];
/*Waiting List 存放正在等待Event發生的Task */
} OS_EVENT;
#endif

ECB functions
OS_EventWaitListInit() - 初始化ECB
OS_EventTaskRdy() - 將從waiting queue移出,移入ready queue
OS_EventTaskWait() - 將task從ready queue移出,移入waiting queue
OS_EventTO() - 讓有設定TimeOut的task變ready
沒有留言:
張貼留言