一、相關理論
1、ucosiii只支援同時等待多個訊號量和訊息佇列,不支援同時等待多個事件標誌組和互斥訊號量。
2、當等待到任意乙個的時候可以該任務就會進入就緒狀態。
二、相關api函式
1、os_pend_data陣列
os_pend_data pend_muli[3]
; pend_muli[0]
.pendobjptr=
(os_pend_obj*
)&my_sem;
pend_muli[1]
.pendobjptr=
(os_pend_obj*
)&my_sem2;
pend_muli[2]
.pendobjptr=
(os_pend_obj*
)&msg_que;
指向被等待的物件
2、ospendmulti () 等待多個核心物件
os_obj_qty task2_num=0;
task2_num=ospendmulti (
(os_pend_data*
)&pend_muli,
(os_obj_qty)3,
(os_tick)0,
(os_opt) os_opt_pend_blocking,
(os_err*
)&err)
;os_obj_qty ospendmulti (os_pend_data *p_pend_data_tbl,
//指向被等待的物件
os_obj_qty tbl_size,
//物件數量
os_tick timeout,
//等待超時時間
os_opt opt,
//是否使用阻塞模式
os_err *p_err)
三、程式設計
1、設計乙個程式包含三個任務。
2、任務一用於按鍵檢測 其中按鍵1、2用於釋放訊號量1、2。按鍵3用於釋放訊息佇列。
3、任務用以等待多個核心物件,當等待到後串列埠列印出請求到的核心物件數量。
四、程式原始碼
#include
"led.h"
#include
"delay.h"
#include
"sys.h"
#include
"bsp_key.h"
#include
"usart.h"
#include
"includes.h"
//任務優先順序
#define start_task_prio 3
//任務堆疊大小
#define start_stk_size 512
//任務控制塊
os_tcb starttasktcb;
//任務堆疊
cpu_stk start_task_stk[start_stk_size]
;//任務函式
void
start_task
(void
*p_arg)
;//任務優先順序
#define task1_task_prio 4
//任務堆疊大小
#define task1_stk_size 128
//任務控制塊
os_tcb task1tasktcb;
//任務堆疊
cpu_stk task1_task_stk[task1_stk_size]
;//任務函式
void
task1_task
(void
*p_arg)
;//任務優先順序
#define task2_task_prio 5
//任務堆疊大小
#define task2_stk_size 128
//任務控制塊
os_tcb task2tasktcb;
//任務堆疊
cpu_stk task2_task_stk[task2_stk_size]
;//任務函式
void
task2_task
(void
*p_arg)
;os_sem my_sem;
//定義乙個訊號量
os_sem my_sem2;
os_q msg_que;
//定義乙個訊息佇列
intmain
(void
)//開始任務函式
void
start_task
(void
*p_arg)
void
task1_task
(void
*p_arg)
else
while
(pain(0
)==1)
;}if(
pcin(13
)==1)
ostimedlyhmsm(0
,0,0
,10,os_opt_time_hmsm_strict,
&err)
;//延時10ms}}
void
task2_task
(void
*p_arg)
}
UCOSIII中同時等待多個核心物件
同時等待多個核心物件實驗 在前面的幾篇部落格中我介紹了任務如何等待單個物件,比如訊號量 互斥訊號量 訊息佇列和時間標誌組。本篇文章我們就繼續學習ucosiii中的是如何同時等待多個核心物件的,在ucosiii中只支援同時等待多個訊號量和訊息佇列,不支援同時等待多個事件標誌組和互斥訊號量。首先我會介紹...
UCOSIII等待多個核心物件
ucosiii中存在很多進行任務同步 交流的方法,例如使用訊號量 互斥訊號量 訊息佇列 事件標誌組,一般都是單獨使用它們進行任務同步,ucosiii同時等待多個核心物件就是實現多對一的任務同步方法。我的理解 現在需要進行任務同步,任務a 任務b可以發布不同的核心物件訊號量sema semb,假設任務...
等待編譯核心
現在還在編譯核心,看來我得利用編譯核心時間上上網了,乙個核心編譯的時間也未免太長了,可能是我的電腦比較一般的緣故吧,但願這次不要出什麼問題,我發現要是加入乙個工程進入還是很容易編譯出錯的。昨天的心情不是很好,寫 心情是很重要的,程式設計序算是一種高度集中的腦力勞動,沒有平和的心態根本不行,於是昨天到...