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...