UCOSIII 同時等待多個核心物件

2021-09-02 08:14:58 字數 2737 閱讀 6992

一、相關理論

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,假設任務...

等待編譯核心

現在還在編譯核心,看來我得利用編譯核心時間上上網了,乙個核心編譯的時間也未免太長了,可能是我的電腦比較一般的緣故吧,但願這次不要出什麼問題,我發現要是加入乙個工程進入還是很容易編譯出錯的。昨天的心情不是很好,寫 心情是很重要的,程式設計序算是一種高度集中的腦力勞動,沒有平和的心態根本不行,於是昨天到...