日韩一区二区三区精品,欧美疯狂xxxxbbbb牲交,热99re久久免费视精品频,人妻互换 综合,欧美激情肉欲高潮视频

1、UCOSIII任務(wù)間通信

       1.1、任務(wù)間通信

一個任務(wù)或者中斷服務(wù)程序有時候需要和另一個任務(wù)交流信息,這個就是消息傳遞的過程就叫做任務(wù)間通信;任務(wù)間的消息傳遞可以通過2種途徑:一是通過全局變量,二是通過發(fā)布消息。


       使用全局變量的時候每個任務(wù)或者中斷服務(wù)程序都必須保證其對全局變量的獨(dú)占訪問。消息也可以通過消息隊列作為中介發(fā)布給任務(wù)。


       1.2 什么是消息?

       消息包含一下幾個部分:指向數(shù)據(jù)的指針,數(shù)據(jù)的長度和記錄消息發(fā)布時刻的時間戳,指針指向的可以是一塊數(shù)據(jù)區(qū)域或者甚至是一個函數(shù)。  消息的內(nèi)容必須一直保持可見性,可見性是指代表消息的變量必須在接收消息的任務(wù)代碼范圍內(nèi)有效。這是因為發(fā)布的數(shù)據(jù)采用的是指針傳遞,也就是引用傳遞,并不是值傳遞。也就是說,發(fā)布的消息本身并不產(chǎn)生拷貝,我們可以使用動態(tài)內(nèi)存分配的方式來給消息分配一個內(nèi)存塊,或者,也可以傳遞一個指向全局變量、全局數(shù)據(jù)結(jié)構(gòu)、全局?jǐn)?shù)組或者函數(shù)的指針。


2、UCOSIII消息隊列

2.1消息隊列的操作:

中斷服務(wù)程序只能使用OSQPost()函數(shù),在UCOSIII中對于消息隊列的讀取是先進(jìn)先出FIFO,也可以后進(jìn)先出LIFO的方式,采用后進(jìn)先出的方式發(fā)布的消息會繞過其他所有位于消息隊列中的消息而最先傳遞給任務(wù)。


       小沙漏表示任務(wù)指定一個超時時間,如果任務(wù)在這段時間內(nèi)沒接收到消息就會喚醒任務(wù),并返回錯誤碼告訴UCOIII任務(wù)是被超時而喚醒的不是因為接收到了消息。超時時間設(shè)置為0那任務(wù)就會一直等待下去,知道接收到消息。


消息隊列中有一個列表,就是消息隊列記錄了所有正在等待獲得消息的任務(wù),當(dāng)一則消息發(fā)布到隊列中時,最高優(yōu)先級任務(wù)獲得該消息,發(fā)布方也可以向消息隊列中所有等待的任務(wù)廣播一則消息。


2.2 消息隊列是UCOSIII中的一個內(nèi)核對象,為結(jié)構(gòu)體OS_Q。

struct  os_q {

OS_OBJ_TYPE                Type;

CPU_CHAR                *NamePtr;

OS_PEND_LIST             PendList;                         

#if OS_CFG_DBG_EN > 0u

    OS_Q                *DbgPrevPtr;

    OS_Q                *DbgNextPtr;

    CPU_CHAR            *DbgNamePtr;

#endif

OS_MSG_Q               MsgQ     //消息列表

};

OS_MSG_Q也是一個結(jié)構(gòu)體,如下:


struct  os_msg_q {                                          

OS_MSG              *InPtr;  

OS_MSG              *OutPtr;

OS_MSG_QTY           NbrEntriesSize;

OS_MSG_QTY           NbrEntries;

OS_MSG_QTY           NbrEntriesMax;

};

消息發(fā)布以后會被存放在OS_MSG類型的數(shù)據(jù)結(jié)構(gòu)中,OS_MSG如下:


struct  os_msg {

OS_MSG              *NextPtr;                           

void                *MsgPtr;

OS_MSG_SIZE          MsgSize;

CPU_TS               MsgTS;

};

2.3 消息隊列API函數(shù)


2.3.1 創(chuàng)建消息隊列

void  OSQCreate (OS_Q        *p_q,           //指向一個消息隊列,采用OS_Q Msg_Que定//義一個消息隊列

                 CPU_CHAR    *p_name,  //消息隊列的名字

                 OS_MSG_QTY   max_qty, //消息隊列的長度,必須大于0

                 OS_ERR      *p_err)        //保存錯誤碼

2.3.2 等待消息隊列

void  *OSQPend (OS_Q         *p_q,//指向一個消息隊列

                OS_TICK       timeout,//等待消息的超時時間

                OS_OPT        opt,//選擇是否使用阻塞模式,有2個選項

                OS_MSG_SIZE  *p_msg_size,//指向一個變量用來表示接收到消息長度

                CPU_TS       *p_ts,//指向一個時間戳,表明什么時候接收到消息

                OS_ERR       *p_err)

2.3.3 向消息隊列發(fā)送消息

void  OSQPost (OS_Q         *p_q,//指向一個消息隊列

               void         *p_void,//指向?qū)嶋H發(fā)送的內(nèi)容

               OS_MSG_SIZE   msg_size,//設(shè)定消息的大小,字節(jié)數(shù)

               OS_OPT        opt,//選擇消息發(fā)送操作的類型,基本有四種也可結(jié)合

               OS_ERR       *p_err)

3、UCOSIII任務(wù)內(nèi)建消息隊列

同任務(wù)內(nèi)嵌信號量一樣,UCOSIII的每個任務(wù)中也有內(nèi)建消息隊列。而且多個任務(wù)等待同一個消息隊列的應(yīng)用很少見,UCOSIII中每個任務(wù)多有其內(nèi)建消息隊列的話用戶可以不用通過外部的消息隊列而直接向任務(wù)發(fā)布消息。


   如果需要使用任務(wù)內(nèi)建消息隊列功能的時候需要將宏OS_CFG_TASK_Q_EN置1來使能相關(guān)的代碼。


任務(wù)內(nèi)建消息隊列的函數(shù)在os_task.c中

3.1等待任務(wù)內(nèi)建消息

void  *OSTaskQPend (OS_TICK       timeout,//等待消息的超時時間

                    OS_OPT        opt,//是否使用阻塞模式

                    OS_MSG_SIZE  *p_msg_size,//存放消息大小的變量

                    CPU_TS       *p_ts,//時間戳

                    OS_ERR       *p_err)

3.2 發(fā)送任務(wù)內(nèi)建消息

void  OSTaskQPost (OS_TCB       *p_tcb,//指向接收消息任務(wù)的TCB

                   void         *p_void,//發(fā)送給一個任務(wù)的消息

                   OS_MSG_SIZE   msg_size,//消息的大小

                   OS_OPT        opt,//發(fā)送操作類型:LIFO和FIFO

                   OS_ERR       *p_err)

 


關(guān)鍵字:UCOSIII  任務(wù)間  通信 引用地址:UCOSIII任務(wù)間的通信

上一篇:UCOSIII事件標(biāo)志組和同時等待多個內(nèi)核對象
下一篇:UCOSIII中斷和時間管理

推薦閱讀

XP Power正式宣布價格優(yōu)惠的高功率密度DC-DC轉(zhuǎn)換器家族增加新成員,可適合鐵路牽引,鐵道車輛和其他嚴(yán)苛環(huán)境中應(yīng)用。這些產(chǎn)品提供超寬的50W 至 600W功率范圍,其中50W產(chǎn)品的牽引電池電壓為24, 36, 48, 72 & 110 VDC,100W產(chǎn)品為110 VDC,300W 和600W產(chǎn)品為72 & 110 VDC。所有模塊都采用工業(yè)標(biāo)準(zhǔn)的磚塊外殼,使低規(guī)格系統(tǒng)升級更容易。 這些產(chǎn)...
4月22日,中國人名大學(xué)舉行高瓴人工智能學(xué)院成立儀式。該學(xué)院高瓴資本創(chuàng)始人兼CEO、耶魯大學(xué)校董、人大校友張磊和高瓴公益基金會捐資3億元建成,是人大二級獨(dú)立學(xué)院。據(jù)悉,截至目前,已有35所高校設(shè)置了人工智能新專業(yè),新增101所高校設(shè)置機(jī)器人工程專業(yè),新增96所高校設(shè)置智能科學(xué)與技術(shù)專業(yè),50所高校把人工智能領(lǐng)域人才培養(yǎng)納入“雙一流”培養(yǎng)方案。人...
Intel在公眾號上發(fā)布2020年Q1業(yè)績財報。財報顯示,Intel 2020年第一季度營收198億美元,同比增長放23%。其中以數(shù)據(jù)為中心的業(yè)務(wù)收入101億美元,增長34%;以PC為中心的業(yè)務(wù)收入98億美元,增長14%。對于Intel這家公司,大多數(shù)人眼中是一家PC為中心的企業(yè),而在此前Intel便宣布業(yè)務(wù)結(jié)構(gòu)由“以PC為中心”轉(zhuǎn)變?yōu)?ldquo;以數(shù)據(jù)為中心”。目前數(shù)據(jù)中心業(yè)務(wù)擁有了數(shù)據(jù)...
電池在現(xiàn)代生活中發(fā)揮著重要的作用,可為筆記本電腦、電話、機(jī)器人吸塵器、助聽器、起搏器,甚至是電動汽車等供電。但同時,它還存在著安全風(fēng)險,并對環(huán)境造成影響。得克薩斯A&M大學(xué)(Texas A&M University)對一種特殊電池——無金屬水基電池的成分進(jìn)行了研究。該電池可降低標(biāo)準(zhǔn)電池的易燃性,并減少使用電池生產(chǎn)過程中的金屬種類。(圖片來源:期刊Cel...

史海拾趣

小廣播
設(shè)計資源 培訓(xùn) 開發(fā)板 精華推薦

最新單片機(jī)文章

 
EEWorld訂閱號

 
EEWorld服務(wù)號

 
汽車開發(fā)圈

 
機(jī)器人開發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號 京ICP備10001474號-1 電信業(yè)務(wù)審批[2006]字第258號函 京公網(wǎng)安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved