




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
ARMCortex-M3嵌入式控制技術(shù)
——基于STM32F103RCT6
嵌入式實時操作系統(tǒng)μC/OS-II第十三章
消息郵箱與消息隊列
消息郵箱和消息隊列是μC/OS-II系統(tǒng)中非常重要的兩個組件。信號量主要用于任務(wù)間的同步,而消息郵箱和消息隊列不僅可以實現(xiàn)任務(wù)間的同步,而且可用于任務(wù)間相互通信。本章將詳細介紹消息郵箱和消息隊列的概念和用法。
本章的學(xué)習(xí)目標(biāo):
了解消息郵箱的工作原理;
熟悉消息郵箱與隊列的系統(tǒng)函數(shù);
掌握消息郵箱與隊列的應(yīng)用方法。
1μC/OS-II消息郵箱2μC/OS-II多任務(wù)工程實例3
統(tǒng)計任務(wù)實例4系統(tǒng)定時器13.1μC/OS-II消息郵箱消息郵箱不僅能實現(xiàn)任務(wù)間的同步,而且還可用于任務(wù)間相互通信。在μC/OS-II中,與消息郵箱管理相關(guān)的函數(shù)有8個,位于μC/OS-II內(nèi)核文件os_mbox.c中,如表所示。函數(shù)原型功能OS_EVENT*OSMboxCreate(void*msg);創(chuàng)建并初始化一個消息郵箱。如果參數(shù)不為空,則新建的郵箱將包含消息void*OSMboxPend(OS_EVENT*pevent,INT16Utimeout,INT8U*perr);向郵箱請求消息,如果郵箱中有消息,則消息傳遞到任務(wù)中,郵箱清空;如果郵箱中沒有消息,當(dāng)前任務(wù)掛起等待,直到郵箱中有消息或等待超時。如果有多個任務(wù)等待同一個消息,則該消息到來時,μC/OS-II使優(yōu)先級最高的任務(wù)獲得消息并運行(中斷服務(wù)程序不能調(diào)用該函數(shù))INT8UOSMboxPost(OS_EVENT*pevent,void*pmsg);向郵箱傳入消息(可理解為向郵箱釋放消息),如果有任務(wù)在等待該消息,則高優(yōu)先級的任務(wù)將會:(1)如果此任務(wù)優(yōu)先級低于調(diào)用該函數(shù)的任務(wù),則在調(diào)用該函數(shù)的任務(wù)執(zhí)行完后,立即得到消息并執(zhí)行;(2)如果此任務(wù)優(yōu)先級高于調(diào)用該函數(shù)的任務(wù),則此任務(wù)立即執(zhí)行,調(diào)用該函數(shù)的任務(wù)被掛起等待。pmsg不允許傳遞空指針I(yè)NT8UOSMboxPostOpt(OS_EVENT*pevent,void*pmsg,INT8Uopt);向郵箱中釋放消息。opt可取:(1)OS_POST_OPT_BROADCAST,消息將廣播給所有請求該消息郵箱的任務(wù);(2)OS_POST_OPT_NONE,此時與OSMboxPost含義相同;(3)OS_POST_OPT_NO_SCHED,釋放消息后不進行任務(wù)調(diào)度,可用于一次性地釋放多個消息后,再進行任務(wù)調(diào)度OS_EVENT*OSMboxDel(OS_EVENT*pevent,INT8Uopt,INT8U*perr);刪除一個消息郵箱。通常,在刪除郵箱前,應(yīng)刪除那些請求該郵箱的任務(wù)(中斷服務(wù)程序不能調(diào)用該函數(shù))INT8UOSMboxQuery(OS_EVENT*pevent,OS_MBOX_DATA*p_mbox_data);查詢郵箱當(dāng)前的消息及等待該消息的事件列表INT8UOSMboxPendAbort(OS_EVENT*pevent,INT8Uopt,INT8U*perr);中止任務(wù)對消息郵箱的請求,使等待該消息的任務(wù)繼續(xù)執(zhí)行(中斷服務(wù)程序不能調(diào)用該函數(shù))void*OSMboxAccept(OS_EVENT*pevent);向指定的郵箱請求消息,如果沒有消息,則調(diào)用該函數(shù)的任務(wù)不掛起等待;如果有消息,則消息傳遞到任務(wù)中,然后清空郵箱。可被任務(wù)或中斷服務(wù)程序調(diào)用,多用于中斷服務(wù)程序中消息郵箱的工作情況消息郵箱的用法如下:(1)定義事件,如“OS_EVENT*mbox01;”。(2)定義全局一維數(shù)組保存消息,如“INT8Umsgbx[80];”。(3)創(chuàng)建消息郵箱,如“mbox01=OSMboxCreate(NULL);”,NULL參數(shù)表示創(chuàng)建的郵箱中沒有消息。(4)在某一個任務(wù)A中釋放消息,如:“OSMboxPost(mbox01,(void*)msgbx);”,如果發(fā)送的消息為“Msg:A-X”,則需要事先將該消息存在msgbx中,可以使用語句“strcpy((char*)msgbx,“Msg:A-X”);”。(5)在另一個任務(wù)X中請求消息,如“pmsg=OSMboxPend(mbox01,0,&err);”,這里的pmsg為“void*”類型的任務(wù)局部變量,這樣,消息“Msg:A-X”就從任務(wù)A傳遞到任務(wù)X中了。13.2μC/OS-II消息隊列消息隊列可以視為消息郵箱的數(shù)組形式,消息郵箱一次只能傳遞一則消息,而消息隊列可以一次傳遞多則消息。因此,消息郵箱是消息隊列的一種特例。消息隊列的工作情況如圖所示。任務(wù)和中斷服務(wù)程序可以向消息隊列中釋放消息,只有任務(wù)才能從消息隊列中請求消息,任務(wù)可以始終請求消息,也可周期性地請求消息。消息隊列具有一定的長度,其長度為可包含的消息個數(shù),如果向隊列中釋放消息的速度大于從隊列中請求消息的速度,那么消息隊列將溢出。在μC/OS-II中,消息隊列相關(guān)的管理函數(shù)約有10個,列于表中,這些函數(shù)位于μC/OS-II內(nèi)核文件os_q.c中函數(shù)原型功能OS_EVENT*OSQCreate(void**start,INT16Usize);創(chuàng)建一個消息隊列,允許任務(wù)或中斷服務(wù)程序發(fā)送一些指針類型的變量(消息)給一個或多個任務(wù),消息內(nèi)容由應(yīng)用程序指定void*OSQPend(OS_EVENT*pevent,INT16Utimeout,INT8U*perr);向消息隊列請求消息。如果隊列中有消息,則該消息傳遞給任務(wù),并從隊列中清除該消息;如果隊列中沒有消息,則調(diào)用該函數(shù)的任務(wù)被掛起等待,直到有消息或等待超時。當(dāng)有多個任務(wù)請求到同一消息隊列時,μC/OS-II進行任務(wù)調(diào)度,使優(yōu)先級最高的任務(wù)得到消息(中斷服務(wù)程序不能調(diào)用該函數(shù))INT8UOSQPost(OS_EVENT*pevent,void*pmsg);向消息隊列送入消息(即向隊列釋放消息),消息隊列為先進先出(FIFO)方式。如果隊列已滿,則消息不會進入隊列,OSQPost立即返回;否則,消息進入隊列,如果有任務(wù)在請求該消息隊列,則μC/OS-II進行任務(wù)調(diào)度,當(dāng)前任務(wù)和所有請求該消息隊列的任務(wù)中最高優(yōu)先級的任務(wù)得到執(zhí)行權(quán)INT8UOSQPostFront(OS_EVENT*pevent,void*pmsg);向消息隊列送入消息(即向隊列釋放消息),消息插入到隊列前端,消息隊列為后進先出(LIFO)方式。如果隊列已滿,則消息不會插入隊列,OSQPostFront立即返回;否則,消息插入隊列,如果有任務(wù)在請求該消息隊列,則μC/OS-II進行任務(wù)調(diào)度,當(dāng)前任務(wù)和所有請求該消息隊列的任務(wù)中最高優(yōu)先級的任務(wù)得到執(zhí)行權(quán)INT8UOSQPostOpt(OS_EVENT*pevent,void*pmsg,INT8Uopt);向隊列中釋放消息。opt可取以下值:(1)OS_POST_OPT_NONE,與OSQPost相同;(2)OS_POST_OPT_FRONT,與OSQPostFront相同;(3)OS_POST_OPT_BROADCAST,每個消息均廣播給所有請求隊列的任務(wù);(4)OS_POST_OPT_NO_SCHED,釋放消息后不進行任務(wù)調(diào)度,借助該參數(shù)可以一次性向隊列中釋放多個消息,在釋放完最后一個消息時,不使用該參數(shù),進行任務(wù)調(diào)度。OS_EVENT*OSQDel(OS_EVENT*pevent,INT8Uopt,INT8U*perr);刪除一個消息隊列。通常,刪除消息隊列前,應(yīng)刪除所有請求該消息隊列的任務(wù)(中斷服務(wù)程序不能調(diào)用該函數(shù))void*OSQAccept(OS_EVENT*pevent,INT8U*perr);向消息隊列請求消息。與OSQPend不同的是,如果隊列中沒有消息,調(diào)用該函數(shù)的任務(wù)并不掛起等待,主要用于中斷服務(wù)程序中。如果隊列中有消息,該消息傳遞到任務(wù)中,在OSQAccept返回前,該消息從隊列中移除INT8UOSQPendAbort(OS_EVENT*pevent,INT8Uopt,INT8U*perr);放棄請求消息隊列,繼續(xù)執(zhí)行當(dāng)前任務(wù)(中斷服務(wù)程序不能調(diào)用該函數(shù))INT8UOSQQuery(OS_EVENT*pevent,OS_Q_DATA*p_q_data);查詢消息隊列信息。INT8UOSQFlush(OS_EVENT*pevent);清空消息隊列消息隊列的使用方法如下:(1)定義事件,如“OS_EVENT*q01;”。(2)定義一維指針數(shù)組,如“void*ptq[10];”;定義全局二維數(shù)組存放隊列中的消息,如“INT8Umsgq[10][80];”。(3)創(chuàng)建消息隊列,如“q01=OSQCreate(&ptq[0],10);”,這里創(chuàng)建了一個長度為10的消息隊列。(4)在某一任務(wù)A中,向隊列中釋放消息,如“OSQPost(q01,(void*)&msgq[0][0]);”。(5)在另一任務(wù)X中,向隊列請求消息,如“pmsg=OSQPend(q01,0,&err);”,這里pmsg為“void*”類型的局部變量,指向請求到的消息。13.3消息郵箱與消息隊列實例在工程PRJ31的基礎(chǔ)上,新建工程“PRJ32”,保存在“D:\STM32F103RCT6PRJ\PRJ32”目錄下,此時的工程PRJ32與工程PRJ31完全相同。擬使工程PRJ32實現(xiàn)的功能與PRJ31也完全相同,但是,在實現(xiàn)手段上采取了如表所示的變化。序號功能工程
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 青海省海東市2025屆初三下學(xué)期階段性檢測試題(三)生物試題試卷含解析
- 同濟大學(xué)《裝飾繪畫與材料技法》2023-2024學(xué)年第一學(xué)期期末試卷
- 沙洲職業(yè)工學(xué)院《思想道德修養(yǎng)與法律基礎(chǔ)影技》2023-2024學(xué)年第二學(xué)期期末試卷
- 嘉興南洋職業(yè)技術(shù)學(xué)院《藥用拉丁語》2023-2024學(xué)年第一學(xué)期期末試卷
- 山東省泰安市肥城市2025屆高三下學(xué)期入學(xué)測試(四)生物試題試卷含解析
- 現(xiàn)代農(nóng)業(yè)發(fā)展與2025年相關(guān)考試試卷及答案
- 2025年新聞傳播學(xué)入學(xué)考試試卷及答案
- 江蘇省如東縣2025年初三下學(xué)期六校(4月)聯(lián)考生物試題試卷含解析
- 江蘇省南京市南京外國語校2024-2025學(xué)年初三中考猜題卷(一)數(shù)學(xué)試題含解析
- 外貿(mào)自學(xué)課件模板
- 交通樞紐的安全管理事故預(yù)防與應(yīng)急處理策略
- 護理管理學(xué)中的化學(xué)性傷害
- 《浙江省中藥飲片炮制規(guī)范》 2015年版
- 輔導(dǎo)員考試基礎(chǔ)知識考題盤點
- 閥門技術(shù)協(xié)議合同
- 2025江蘇省安全員B證考試題庫
- 客戶旅程全維度管理研究-全面剖析
- 第19課《紫藤蘿瀑布》課件-2024-2025學(xué)年統(tǒng)編版語文七年級下冊
- 主題班會AI時代中學(xué)生的機遇與成長
- 供電公司故障搶修服務(wù)規(guī)范
- 初中體育課堂安全教育
評論
0/150
提交評論