• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      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ì)列的長度。

      信號(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è)置為LIFO模式,若任務(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é)束語

      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í)踐及啟示
      南平市| 磐安县| 满城县| 右玉县| 醴陵市| 历史| 平谷区| 桑植县| 绵竹市| 永靖县| 华阴市| 正安县| 敦化市| 安陆市| 辽阳县| 唐山市| 长治市| 佛坪县| 邓州市| 高陵县| 荣昌县| 纳雍县| 万源市| 乾安县| 高雄市| 林周县| 祁阳县| 东宁县| 班戈县| 苍山县| 丹寨县| 都昌县| 修文县| 阆中市| 古浪县| 松滋市| 冕宁县| 汉川市| 宜兴市| 来宾市| 岳池县|