μC/OS-ii使用信號量、事件標誌組、郵箱和消息隊列這些中間環節來顯現任務之間的通信,這些中間環節統一被稱爲事件。
1.計數信號量
給共享資源設立一個標誌,表示共享資源的佔用情況,使用共享資源前,對這個標誌進行查詢,再決定自己的行爲,函數主體在os_sem.c中
相關函數:
1.1 函數OSSemCreat
table 1. 函數OSSemCreat
函數名 | OSSemCreat |
---|---|
函數原形 | OS_EVENT *OSSemCreat(INTU16 cnt); |
功能描述 | 創建信號量 |
輸入參數 | cnt:信號量的初始值,一般爲0,可以取0到65535之間的任何值 |
輸出參數 | 無 |
返回值 | 新建信號量的指針 |
先決條件 | 無 |
被調用函數 | 無 |
1.2 函數OSSemPost
table 2. 函數OSSemPost
函數名 | OSSemPost |
---|---|
函數原形 | INT8U OSSemPost(OS_EVENT *pevent)); |
功能描述 | 發送信號量,信號量的值加1 |
輸入參數 | pevent:所發送信號量的指針 |
輸出參數 | 無 |
返回值 | OS_NO_EVENT:發送成功; OS_ERR_EVENT_TYPE:pevent不是信號量類型; OS_SEM_OVF:信號量的值溢出; |
先決條件 | 無 |
被調用函數 | 無 |
1.3 函數OSSemPend
table 3. 函數OSSemPend
函數名 | OSSemPost |
---|---|
函數原形 | INT8U OSSemPost(OS_EVENT *pevent,INT16U timeout,INT8U *err); |
功能描述 | 等待(接收)信號量,信號量的值減1 |
輸入參數1 | pevent:所發送信號量的指針 |
輸入參數2 | timeout:等待信號量的最長時間,以時鐘節拍爲單位 |
輸入參數3 | err:函數執行效果的變量地址。 OS_NO_ERR :信號量不爲零。 OS_TIMEOUT :信號量沒有在指定數目的時鐘週期內被設置。 OS_ERR_PEND_ISR :從中斷調用該函數。雖然規定了不允許從中斷調用該函數,但μC/OS-Ⅱ仍然包含了檢測這種情況的功能。 OS_ERR_EVENT_TYPE :pevent 不是指向信號量的指針。 |
輸出參數 | 無 |
先決條件 | 無 |
被調用函數 | 無 |
2.事件標誌組
2.1 函數OSFlagCreat
table 4. 函數OSFlagCreat
函數名 | OSFlagCreat |
---|---|
函數原形 | OS_FLAG_GRP * OSFlagCreat(OS_FLAGS flags,INT8U *err); |
功能描述 | 創建事件標誌組 |
輸入參數1 | flags標誌組中各標誌的初始值: |
輸入參數2 | err:函數執行效果的變量地址 |
輸出參數 | 無 |
先決條件 | 無 |
被調用函數 | 無 |
2.2 函數OSFlagPost
2.3 函數OSFlagPend
3 消息郵箱
一個郵箱只能傳送一個消息的地址
3.1 函數OSMboxCreat
3.2 函數OSMboxPost
3.3 函數OSMboxPostOpt
3.4 函數OSMboxPend
4.消息隊列
消息隊列可以存放多個消息,用一個指針數組構建消息隊列,消息本身不參加排隊,而是用指向不同消息的指針進行排隊。