国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

uC/OS-III任務(wù)間通信的研究

2012-04-29 00:44:03屈環(huán)宇,陳麗萍,王寄新
電腦知識(shí)與技術(shù) 2012年2期
關(guān)鍵詞:嵌入式系統(tǒng)

屈環(huán)宇,陳麗萍,王寄新

摘要:uC/OS-III是Micrium公司于2011年8月1日發(fā)布的占先式硬實(shí)時(shí)系統(tǒng),uC/OS-III任務(wù)間的通信可以通過全局變量、信號(hào)量、任務(wù)內(nèi)建消息隊(duì)列、外部消息隊(duì)列、事件標(biāo)志組實(shí)現(xiàn)。

關(guān)鍵詞:uC/OS-III;uC/OS-III任務(wù)間通信;嵌入式系統(tǒng)

中圖分類號(hào):TP393文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1009-3044(2012)02-0306-03

Communication between uC/OS-III s tasks

QU Huan-yu,CHEN Li-ping,WANG Ji-xin

(School of Mathematics,Physics and Informaiton Engineering ,Jiaxing University,Jiaxing 314001, China)

Abstract: uC/OS-III is a preemptive real-time system published by Micrium at August 1,2011. uC/OS-IIIs inter-tasks communication through global variables,semaphores,task built-in message queues,external message queues,event flags group.

Key words: uC/OS-III;uC/OS-III inter-task communication;embedded system

這幾年年來,數(shù)字化技術(shù)飛速發(fā)展,嵌入式產(chǎn)品應(yīng)用在我們生活中的各個(gè)方面。而操作系統(tǒng)作為嵌入式產(chǎn)品的核心,起著越來越不可或缺的作用。嵌入式產(chǎn)品的實(shí)時(shí)性、容錯(cuò)能力等關(guān)鍵因素很大程度都決定于嵌入式操作系統(tǒng)的性能。本文主要研究了最近發(fā)布的硬實(shí)時(shí)系統(tǒng)uC/OS-III及其任務(wù)間的通信方式。

uC/OS-III任務(wù)間的通信方式相對(duì)于其它實(shí)時(shí)系統(tǒng)有較大的改變。尤其是任務(wù)內(nèi)建消息隊(duì)列后,中斷程序可以直接發(fā)送消息給任務(wù)而不通過消息隊(duì)列,這在一些采集信號(hào)頻繁的應(yīng)用中能大大提高其實(shí)時(shí)處理能力,從而提高整個(gè)系統(tǒng)的效率。

1內(nèi)核對(duì)象的結(jié)構(gòu)分析

1.1信號(hào)量

typedef struct os_sem OS_SEN;(1)

struct os_sem{

OS_OBJ_TYPEType;(2)

CPU_CHAR*NamePtr;(3)

OS_PEND_LISTPendList;(4)

OS_SEM_CTR Ctr;(5)

CPU_TSTS; };(6)

struct OS_PEND_LIST{

OS_PEND_DATA*HeadPtr;

OS_PEND_DATA*TailPtr;

OS_OBJ_QTY NbrEntries;};

在uC/OS-III中,所有的結(jié)構(gòu)體都會(huì)有特定的數(shù)據(jù)類型。

信號(hào)量結(jié)構(gòu)體中的第一個(gè)變量是"Type"域,表明該內(nèi)核對(duì)象是一個(gè)信號(hào)量,從而保證通過引用調(diào)用信號(hào)量的函數(shù)也能夠識(shí)別所傳入的參數(shù)是信號(hào)量的地址而非其他。

信號(hào)量被賦予一個(gè)用戶自定義的名字,便于調(diào)試。

若有多個(gè)任務(wù)等待該信號(hào)量,這些任務(wù)就會(huì)被放入掛起隊(duì)列中。OS_PEND_LIST是一個(gè)結(jié)構(gòu)體,它控制掛起隊(duì)列,其內(nèi)部的三個(gè)變量分別指向掛起隊(duì)列的頭部和尾部,以及掛起隊(duì)列的長(zhǎng)度。

信號(hào)量計(jì)數(shù)值,定義為該信號(hào)量可以被訪問的次數(shù)。

信號(hào)量中包含了一個(gè)時(shí)間戳變量,存儲(chǔ)了上一次信號(hào)量被提及時(shí)的時(shí)間戳。

用戶代碼不能直接訪問信號(hào)量結(jié)構(gòu)體,必須通過uC/OS-III所定義的API,否則會(huì)導(dǎo)致一些數(shù)據(jù)的丟失。

1.2消息及消息隊(duì)列

圖1消息隊(duì)列

結(jié)構(gòu)體OS_MSG構(gòu)成一個(gè)消息

.NextPtr指向下一個(gè)消息

.MsgSize存放消息所指向數(shù)據(jù)域的大小

.MsgTS存放消息最后一次被提交的時(shí)間戳

.MsgPtr指向消息所對(duì)應(yīng)的數(shù)據(jù)域

結(jié)構(gòu)體OS_MSG_Q用于控制隊(duì)列中的消息,它由5個(gè)域組成:

.InPtr隊(duì)列首指針

.OutPtr隊(duì)列尾指針

.NbrEntriesSize隊(duì)列的最大消息數(shù)

.NbrEntries隊(duì)列當(dāng)前時(shí)刻的消息數(shù)

.NbrEntriesMax迄今為止隊(duì)列中存放的最大消息數(shù)。

OS_MSG_Q通常包含在兩種結(jié)構(gòu)體中:OS_Q和OS_TCB。創(chuàng)建消息隊(duì)列時(shí)就會(huì)建立一個(gè)OS_MSG_Q。當(dāng)置位OS_CFG.H中的OS_CFG_TASK_Q_EN時(shí),每個(gè)任務(wù)都有其內(nèi)建的消息隊(duì)列。

圖2外部消息隊(duì)列及任務(wù)內(nèi)建消息隊(duì)列

置位OS_CFG.H中的OS_CFG_Q_EN開啟消息隊(duì)列服務(wù),如果多個(gè)任務(wù)等待同一個(gè)消息隊(duì)列中的消息,則可創(chuàng)建一個(gè)OS_Q,發(fā)送消息到該OS_Q中。uC/OS-III還可以廣播消息給所有在消息隊(duì)列中等待的任務(wù)。

消息隊(duì)列是FIFO模式,也可以設(shè)置為L(zhǎng)IFO模式,若任務(wù)或ISR(中斷服務(wù)程序)發(fā)送緊急消息給另一個(gè)任務(wù)時(shí),LIFO模式是非常高效的,在這種情況下,該緊急消息將繞過消息隊(duì)列中的其他消息。

當(dāng)一個(gè)消息被發(fā)送到消息隊(duì)列時(shí),等待該消息的高優(yōu)先級(jí)任務(wù)首先接收到這個(gè)消息。

圖3通過消息隊(duì)列任務(wù)間的通信

接收任務(wù)旁的沙漏表示該任務(wù)被限時(shí),如果任務(wù)沒有在規(guī)定的時(shí)間內(nèi)接收到消息,uC/OS-III會(huì)返回一個(gè)錯(cuò)誤代號(hào)(表示該任務(wù)等待超時(shí))。不是每個(gè)任務(wù)都需要設(shè)置等待期限,任務(wù)也可以設(shè)置為永遠(yuǎn)等待這兒消息。

考慮到很少會(huì)有多個(gè)任務(wù)同時(shí)在一個(gè)消息隊(duì)列中等待,uC/OS-III在任務(wù)重內(nèi)建了一個(gè)消息隊(duì)列,任務(wù)或ISR可以直接發(fā)送消息給任務(wù)而不必通過外部消息隊(duì)列。

兩個(gè)任務(wù)可以通過兩個(gè)消息隊(duì)列同步,這個(gè)任務(wù)間可以互相發(fā)送消息給對(duì)方。需注意的是:任務(wù)與ISR間不能雙向通信,因?yàn)镮SR不能在消息隊(duì)列中等待。這兩個(gè)消息隊(duì)列都被初始化為空。當(dāng)任務(wù)A到達(dá)約定點(diǎn)時(shí),它就會(huì)發(fā)送消息給頂部消息隊(duì)列并在底部消息隊(duì)列中等待。類似的,當(dāng)任務(wù)B到達(dá)某個(gè)時(shí)刻,它就會(huì)發(fā)送消息給底部消息隊(duì)列,并在頂部消息隊(duì)列中等待消息。這樣,兩個(gè)任務(wù)被互相控制而交替地前進(jìn),從而實(shí)現(xiàn)了同步。

1.3事件標(biāo)志組

typedef struct os_flag_grp OS_FLAG_GRP;(1)

struct os_flag_grp{

OS_OBJ_TYPEType;(2)

CPU_CHAR*NamePtr;(3)

OS_PEND_LISTPendList;(4)

OS_FLAGSFlags;(5)

CPU_TSTS;}(6)

(1)uC/OS-III中,所有內(nèi)核對(duì)象都會(huì)定義其特有的數(shù)據(jù)類型。

結(jié)構(gòu)體的第一個(gè)變量為"Type"域,用于辨認(rèn)該結(jié)構(gòu)體為事件標(biāo)志組。

事件標(biāo)志組可以被賦予名字,便于調(diào)試。

因?yàn)榭赡苡卸鄠€(gè)任務(wù)同時(shí)等待事件標(biāo)志組中的事件,所以事件標(biāo)志組中包含了用于控制掛起隊(duì)列的結(jié)構(gòu)體OS_PEND_LIST。

事件標(biāo)志組中的標(biāo)志位就存儲(chǔ)在這個(gè)變量中。

存儲(chǔ)了事件標(biāo)志組最后一次被修改的時(shí)間戳。

當(dāng)任務(wù)要與多個(gè)事件同步時(shí)可以使用事件標(biāo)志組。若其中的任意一個(gè)事件發(fā)生時(shí)任務(wù)被就緒,則稱為邏輯或。若所有的事件都發(fā)生后任務(wù)才會(huì)被就緒,則稱為邏輯與。

圖4通過事件標(biāo)志組任務(wù)間的通信

事件標(biāo)志組的位寬可以在OS_TYPE.H中配置,可以是8位,16位或32位,事件標(biāo)志組必須在創(chuàng)建后使用。任務(wù)或ISR可以提交標(biāo)志,然而,只有任務(wù)可以將在事件標(biāo)志組中等待的其它任務(wù)刪除,取消等待,只有任務(wù)才能讓任務(wù)在事件標(biāo)志組中等待。任務(wù)可以等待事件標(biāo)志組中的任意個(gè)位被設(shè)置。等待可以以時(shí)基為單位被設(shè)置期限。

2結(jié)束語(yǔ)

uC/OS-III任務(wù)間的通信可以通過全局變量、信號(hào)量、任務(wù)內(nèi)建消息隊(duì)列、外部消息隊(duì)列、事件標(biāo)志組實(shí)現(xiàn)。全局變量用于共享一些對(duì)數(shù)據(jù)安全性不高的通用數(shù)據(jù),信號(hào)量用于任務(wù)間共享一些被限制的資源,任務(wù)內(nèi)建消息隊(duì)列一般用于接收少量消息(如中斷程序發(fā)送過來的消息)、外部消息隊(duì)列主要面向于多個(gè)任務(wù)共同等待的消息、事件標(biāo)志組則用于多個(gè)任務(wù)間的同步。

參考文獻(xiàn):

[1] Micrium Micrium-uCOS-III-UserManual [M] .R&D Books, 2011,

[2] MicriumμC/OS-III: The Real-Time Kernel for the NXP LPC1700 [M]. R&D Books, 2011.

[3] MicriumμC/OS-III: The Real-Time Kernel for the STMicroelectronics STM32F107 [M] .R&D Books, 2011.

[4]邵貝貝.嵌入式實(shí)時(shí)操作系統(tǒng)μCOS-Ⅱ[M].北京:北京航空航天大學(xué)出版社2003:56-89.

[5]王田苗.嵌入式系統(tǒng)設(shè)計(jì)與實(shí)例開發(fā)--基于ARM微處理器與uc/OS-II實(shí)時(shí)操作系統(tǒng)[M].北京:清華大學(xué)出版社,2003:103-135.

[6]任哲.嵌入式操作系統(tǒng)基礎(chǔ)uc/os-II和Linux [M].北京:北京航空航天大學(xué)出版社,2006:52.

猜你喜歡
嵌入式系統(tǒng)
Teaching Research on IoT and—Embedded System of Software Engineering
基于Xilinx口袋實(shí)驗(yàn)室的組合邏輯電路設(shè)計(jì)實(shí)驗(yàn)
面向應(yīng)用的智能專業(yè)嵌入式系統(tǒng)教學(xué)
基于物聯(lián)網(wǎng)的遠(yuǎn)程紅外控制器
嵌入式系統(tǒng)軟件開發(fā)技術(shù)探析
基于AVR單片機(jī)的SPI接口設(shè)計(jì)與實(shí)現(xiàn)
辦公自動(dòng)化系統(tǒng)的設(shè)計(jì)
嵌入式系統(tǒng)在醫(yī)療器械中的應(yīng)用分析
基于物聯(lián)網(wǎng)項(xiàng)目驅(qū)動(dòng)的嵌入式系統(tǒng)教學(xué)改革的研究與實(shí)踐
嵌入式系統(tǒng)課程“中斷、異常與事件”教學(xué)實(shí)踐及啟示
道孚县| 黎川县| 犍为县| 始兴县| 杭锦后旗| 天祝| 博白县| 凤山市| 华安县| 双峰县| 两当县| 普洱| 高清| 长治县| 抚顺县| 苗栗县| 运城市| 柏乡县| 迁安市| 延安市| 祁连县| 鄂州市| 平湖市| 临潭县| 湖北省| 巨鹿县| 华坪县| 龙里县| 兰西县| 肃南| 浦江县| 宜宾市| 文水县| 富顺县| 策勒县| 运城市| 周宁县| 辉县市| 天等县| 竹溪县| 顺平县|