.oseventtype
ecb型別 有以下幾種:
#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.oseventcnt
訊號量計數 表示最大空共享的數目
.*oseventptr 用於訊息和佇列
.oseventtbl 和 .oseventgrp
分別與管理任務的osrdytbl 和 osrdygrp 類似,oseventtbl用於放置該事件的所有等待任務。原理圖如下:
二、將任務置於等待事件的任務列表
三、從等待任務列表中刪除乙個任務
if ((pevent->oseventtbl[prio >> 3] &= ~osmaptbl[prio & 0x07]) == 0)
四、在等待任務列表中查詢最高優先順序的任務
y = osunmaptbl[pevent->oseventgrp];
x = osunmaptbl[pevent->oseventtbl[y]];
prio = (y << 3) + x;
五、空餘事件控制塊鍊錶
在呼叫osinit()時,所有事件控制塊被鏈結成乙個單向鍊錶——空閒事件控制塊鍊錶。每當建立乙個訊號量、郵箱或者訊息佇列時,就從該鍊錶中取出乙個空閒事件控制塊,並對它進行初始化。刪除時,可將事件控制塊放回到空餘事件控制塊鍊錶中。
六、初始化乙個事件控制塊,os_eventwaitlistinit()
就是將該ecb中的.oseventtbl 和 .oseventgrp 全部清0
七、使乙個任務進入就緒態,os_eventtaskrdy()
先從等待任務列表中刪除這個任務:
再將這個任務置於任務就緒表:
if (ptcb->ostcbstat == os_stat_rdy)
八、使乙個任務進入等待某事件發生狀態,os_eventtaskwait()
將任務移出就緒表
if ((osrdytbl[ostcbcur->ostcby] &= ~ostcbcur->ostcbbitx) == 0x00)
將任務進入該事件的等待列表
pevent->oseventtbl[ostcbcur->ostcby] |= ostcbcur->ostcbbitx;
pevent->oseventgrp
|= ostcbcur->ostcbbity;
有了這些基本知識,後面的事件處理就簡單多了
ucos任務控制塊詳解
ucos實現多工的基礎包括幾個方面 任務控制塊,任務堆疊,中斷,任務優先順序,一一說起 首先,任務控制塊的結構如下 系統在執行乙個任務的時候,按照任務的優先順序獲取任務控制塊,再在任務堆疊中獲得任務 指標 typedef struct os tcb os tcb 該結構體中有比較多的靠巨集定義開啟的...
ucos 任務控制塊及任務鍊錶
1 任務控制塊 首先看看ucos中任務控制塊的資料結構為 typedef struct os tcb os tcb 任務控制塊記錄了 任務的堆疊指標,任務當前的執行狀態,任務的優先順序等屬性。其中上面結構中任務狀態 int8u ostcbstat task status 的可取值範圍如下 2 任務控...
UC OS II基礎知識之事件控制塊及事件處理函式
1.等待任務列表 為了將描述事件的資料結構統一起來,uc os ii使用事件控制塊ecb的資料結構來描述如訊號量,訊號佇列和郵箱這些事件。事件控制塊的資料結構如下所示 typedef struct os event os event endif 應用程式中的任務通過指標pevent來訪問事件控制塊,...