ucos II 任務間通訊原始碼分析

2021-08-28 10:41:41 字數 1167 閱讀 2302

ucos-ii 2.0版本的任務間通訊提供訊息郵箱和訊息佇列兩種機制,都基於核心的事件控制塊機制實現。

訊息郵箱

訊息郵箱主要函式分析:

訊息佇列

訊息佇列全域性變數

typedef struct os_q  os_q;

typedef struct os_q_data;

os_ext  os_q *osqfreelist; /* pointer to list of free queue control blocks    */

os_ext os_q osqtbl[os_max_qs]; /* table of queue control blocks */

訊息佇列的主要函式分析

pq = osqfreelist; 

...pevent->oseventptr = pq;

等待訊息佇列中的訊息 osqpend,函式處理如下:

備註:在**中要注意的是,與訊息郵箱相似xxpend函式的上下半段實際上不是一次排程到的,如下:

ostcbcur->ostcbstat |= os_stat_q;  

ostcbcur->ostcbdly = timeout;

os_eventtaskwait(pevent);

os_exit_critical();

os_sched();

//**下面的函式是重新排程後執行的,此時或者訊息佇列裡已經有訊息或者等待超時。

os_enter_critical();

msg = ostcbcur->ostcbmsg;

if (msg != (void *)0)

os_eventto(pevent);

os_exit_critical();

*err = os_timeout;

return ((void *)0);

linux socket通訊原始碼

初學socket通訊,參考的是linuxc程式設計大全的23章的23 5例子,但是發現這個例子原始碼裡有好幾處錯誤,因為初學,很多不懂,吃了虧,因此將修改後能正常執行的 記錄在這裡 參考 server.c include include include include include include...

ucos II 任務間同步原始碼分析(二)

事件標誌組也是任務同步的一種機制,它實現的同步機制是針對多個條件,因此類似event但引入了乙個flag變數,假設這個flag是個int8u,那麼其0x00010010每個bit位的1或者0表示乙個條件的滿足或不滿足。事件標誌組管理的全域性變數 下述變數在os flaginit中初始化 typede...

Handler通訊 原始碼分析

1.messagequeue 訊息佇列 執行緒中更新 ui 的時候經常是呼叫 sendmessage 和 sendmessagedelayed 這樣 我跟蹤 進入到 handler 的 sendmessage 方法 public final boolean sendmessage message m...