王博+李巖+王簡(jiǎn)+黃天昕
摘要:針對(duì)實(shí)時(shí)操作系統(tǒng)內(nèi)核μC/OS-Ⅱ任務(wù)之間信息傳遞的靈活性不足的問(wèn)題。通過(guò)硬件實(shí)現(xiàn)信號(hào)量的管理和消息郵箱的管理,從而增加任務(wù)間通訊與同步的高效性和靈活性。通過(guò)把基于消息郵箱的這一任務(wù)之間的通信機(jī)制硬件化實(shí)現(xiàn),使得任務(wù)之間的通訊與同步過(guò)程具有更高的靈活性和執(zhí)行效率.設(shè)計(jì)采用VHDL硬件描述語(yǔ)言進(jìn)行消息郵箱管理的功能描述,并且在Xilinx公司的ISE 8.2開(kāi)發(fā)軟件套裝上進(jìn)行功能仿真和驗(yàn)證,最后利用Xilinx公司的Virtex-Ⅱ Pro FPGA硬件平臺(tái)實(shí)現(xiàn)其核心管理功能.
關(guān)鍵詞:實(shí)時(shí)操作系統(tǒng);消息郵箱;現(xiàn)場(chǎng)可編程門(mén)陣列
DOI:10.15938/j.jhust.2016.01.008
中圖分類(lèi)號(hào):TP316.2 文獻(xiàn)標(biāo)志碼:A 文章編號(hào):1007-2683(2016)01-0036-04
0引言
μC/OS-Ⅱ是一種嵌入式實(shí)時(shí)操作系統(tǒng),具有比較高的實(shí)時(shí)陸、確定性和可靠性等諸多優(yōu)點(diǎn),所以被越來(lái)越多的用于各個(gè)領(lǐng)域,比如航空航天、工業(yè)控制、汽車(chē)電子和核電站建設(shè)等.對(duì)于一種實(shí)時(shí)操作系統(tǒng),逐步提高其實(shí)時(shí)性是主要的系統(tǒng)改進(jìn)方向.要更進(jìn)一步提高其實(shí)時(shí)性,如果只是依靠單純改進(jìn)內(nèi)部算法,已經(jīng)不能得到明顯的增強(qiáng)實(shí)時(shí)性的目的.通過(guò)硬件描述語(yǔ)言VHDL描述它的一些系統(tǒng)調(diào)用函數(shù),利用硬件邏輯來(lái)實(shí)現(xiàn)μC/OS-Ⅱ任務(wù)管理、信號(hào)量管理和中斷管理等功能,那么就會(huì)在很大程度上提高其可調(diào)度性、靈活性、可靠性和實(shí)時(shí)性.
文章先詳細(xì)剖析μC/OS-Ⅱ中通信機(jī)制消息郵箱的一些細(xì)節(jié),掌握它們的工作原理以及消息郵箱與任務(wù)、中斷服務(wù)子程序ISR(Inter Service Rou-tines)之間的關(guān)系,再采用VHDL語(yǔ)言對(duì)上述通信機(jī)制進(jìn)行描述并硬件化,然后在ISE8.2軟件上進(jìn)行仿真和驗(yàn)證,最后利用Xilinx公司的Virtex-Ⅱ Pro FP-GA(Field Programmable Gate Array)實(shí)現(xiàn),從而提高任務(wù)間通信與同步的靈活性和高效性.
1μC/OS-Ⅱ的消息郵箱
1.1消息郵箱、任務(wù)與ISR的關(guān)系
消息郵箱是μC/OS-Ⅱ的一種通信機(jī)制,與信號(hào)量工作原理類(lèi)似,也是利用系統(tǒng)調(diào)用函數(shù)實(shí)現(xiàn)任務(wù)間的通信和同步.
作為μC/OS-Ⅱ的一種通信機(jī)制,消息郵箱可以發(fā)送一個(gè)指針型的變量給一個(gè)任務(wù)Task或者中斷服務(wù)子程序ISR.而這個(gè)指針則是指向了一個(gè)特定數(shù)據(jù)結(jié)構(gòu),它包含了所謂的“消息”.簡(jiǎn)化的任務(wù)、中斷服務(wù)子程序和消息郵箱這三者之間的關(guān)系如圖1所示.
任務(wù)Task、中斷服務(wù)子程序ISR以及消息郵箱Mailbox之間的關(guān)系均可以通過(guò)消息郵箱管理的系統(tǒng)調(diào)用來(lái)實(shí)現(xiàn).而消息郵箱管理的系統(tǒng)調(diào)用函數(shù)功能有創(chuàng)建、刪除、等待、釋放和查詢(xún)等.
1.2消息郵箱管理的系統(tǒng)調(diào)用
μC/OS-Ⅱ消息郵箱管理主要包括建立郵箱、刪除郵箱、等待郵箱中的消息、向郵箱發(fā)送消息、無(wú)等待地從郵箱中得到消息、查詢(xún)郵箱狀態(tài)等功能.消息郵箱系統(tǒng)調(diào)用函數(shù)如表1所示.
建立一個(gè)郵箱通過(guò)系統(tǒng)調(diào)用函數(shù)OSMboxCreate( )來(lái)實(shí)現(xiàn),并且同時(shí)定義了指針的初始值.該初始值可以是NULL或者非NULL指針,前者是為了通知一個(gè)事件的發(fā)生,也就是發(fā)送一條消息,而后者則是用郵箱共享某些資源.
刪除一個(gè)郵箱首先得保證OS_MBOX_DEL_EN設(shè)置為1.而且在刪除之前,必須先刪除可能操作此郵箱的所有任務(wù).
等待郵箱中的消息調(diào)用OSMboxPend( ),如果郵箱中有消息,那么就說(shuō)明已經(jīng)有別的Task或ISR將信息發(fā)送到郵箱中,直接利用該郵箱;反之若郵箱為空,那么就進(jìn)入睡眠狀態(tài),等待別的Task或ISR通過(guò)郵箱發(fā)送消息.
向郵箱發(fā)送一則消息通過(guò)OSMboxPost( )函數(shù)先進(jìn)行檢查,看是否存在正在等待該郵箱消息的Task,若有則從等待列表中刪除最高優(yōu)先級(jí)的Task,并將其加入就緒列表,準(zhǔn)備運(yùn)行;否則就是郵箱里已有消息,那么就返回“郵箱已滿”的錯(cuò)誤代碼.
無(wú)等待地從郵箱中得消息調(diào)用OSMboxAccept( ),即使郵箱是NULL,也可以從郵箱中得到消息,而沒(méi)有必要使Task進(jìn)入到睡眠狀態(tài).
查詢(xún)郵箱的狀態(tài)的OSMboxQuery( )函數(shù)的作用是查詢(xún)一個(gè)郵箱的當(dāng)前狀態(tài)并顯示.
2消息郵箱的硬件設(shè)計(jì)
2.1硬件消息郵箱管理的工作原理
消息郵箱是μC/OS-Ⅱ的通信機(jī)制,為任務(wù)間的通信和同步做出了很大貢獻(xiàn).為了加快任務(wù)間通信和同步的速度,可以將消息郵箱的管理硬件化,即把郵箱的建立、刪除、申請(qǐng)、釋放和查詢(xún)等一系列可供系統(tǒng)調(diào)用的函數(shù)通過(guò)VHDL進(jìn)行編程,使得其在硬件上能夠?qū)崿F(xiàn).
消息郵箱管理硬件化包括CPU、消息郵箱管理和事件控制塊ECB(Event Control Block)管理這三部分.硬件消息郵箱管理的工作原理如圖2所示.
CB、DB、AB三條線分別是控制線、數(shù)據(jù)線和地址線,消息郵箱管理和ECB管理直接從數(shù)據(jù)總線上獲得數(shù)據(jù)信息并進(jìn)行相應(yīng)處理.同時(shí)為了在不增加總線負(fù)擔(dān)的情況下加快兩者之間的通信,那么就在消息郵箱管理與ECB的存儲(chǔ)模塊之間建立的一條數(shù)據(jù)通道即可.這些硬件邏輯基于FPGA實(shí)現(xiàn),與CPU并行工作,這樣就減少了CPU的工作量,從而提高了任務(wù)間的通信與同步,使得系統(tǒng)的響應(yīng)能力得到提高.
2.2消息郵箱系統(tǒng)調(diào)用的硬件實(shí)現(xiàn)
消息郵箱管理的系統(tǒng)調(diào)用函數(shù)主要的操作就是創(chuàng)建、刪除、申請(qǐng)和釋放郵箱.消息郵箱管理系統(tǒng)函數(shù)的實(shí)現(xiàn)主要由兩個(gè)關(guān)鍵器件組成,即具有預(yù)置功能的雙向計(jì)數(shù)器和比較器.
消息郵箱系統(tǒng)調(diào)用主要實(shí)現(xiàn)的是消息郵箱管理系統(tǒng)調(diào)用函數(shù)的創(chuàng)建郵箱Create_Mbox、刪除郵箱Del_Mbox、申請(qǐng)郵箱Pend_Mbox和釋放郵箱Post_Mbox這四種功能.消息郵箱系統(tǒng)調(diào)用的TRL圖如圖3所示.
雙向計(jì)數(shù)器具有預(yù)置功能,主要是用來(lái)完成加/減1的操作.當(dāng)系統(tǒng)建立郵箱時(shí),它的預(yù)置引腳SET為1;當(dāng)任務(wù)或中斷服務(wù)子程序申請(qǐng)郵箱時(shí),它的正向計(jì)數(shù)引腳UP為1,那么計(jì)數(shù)器進(jìn)行加l操作;當(dāng)任務(wù)或中斷服務(wù)子程序釋放郵箱時(shí),它的逆向計(jì)數(shù)引腳DOWN為1,計(jì)數(shù)器進(jìn)行減1操作.
比較器從雙向計(jì)數(shù)器的輸出端接收郵箱的msg值,并將msg值和0進(jìn)行比較.若申請(qǐng)郵箱信號(hào)Pend_Mbox有效時(shí),如果Msg<0,則發(fā)出信號(hào)Task_Wait,通知任務(wù)等待列表的讀寫(xiě)控制模塊,將該任務(wù)的優(yōu)先級(jí)寫(xiě)入其中,否則就申請(qǐng)成功,發(fā)出信號(hào)Task_Ready,那么該任務(wù)進(jìn)入就緒狀態(tài),并觸發(fā)任務(wù)調(diào)度;若釋放郵箱信號(hào)Post_Mbox有效時(shí),如果Msg<=0,說(shuō)明有任務(wù)正在等待此郵箱,就從任務(wù)等待列表中找出優(yōu)先級(jí)最高的任務(wù),同時(shí)發(fā)出信號(hào)Task_Ready,那么該任務(wù)進(jìn)入就緒狀態(tài),并觸發(fā)任務(wù)調(diào)度.
3實(shí)驗(yàn)結(jié)果分析
文章中消息郵箱管理中的系統(tǒng)函數(shù)是用VHDL硬件描述語(yǔ)言描述的.在ISE 8.2軟件環(huán)境下,對(duì)所有函數(shù)進(jìn)行仿真以便驗(yàn)證消息郵箱的硬件設(shè)計(jì)的正確性和高效性.
1)消息郵箱管理硬件實(shí)現(xiàn)中創(chuàng)建和刪除郵箱函數(shù)的功能仿真如圖4所示.
仿真圖表明,若OSIntesting=1時(shí),均不能創(chuàng)建和刪除郵箱,且若由于一些原因?qū)е耬rr=1,那么也不能夠進(jìn)行創(chuàng)建/刪除.還可知,在條件create_mbox=1和msg=1同時(shí)成立情況下,郵箱建立成功,則msg_out=1;若de=1,郵箱刪除成功,即dc_mbox=1.
2)消息郵箱管理的申請(qǐng)和釋放消息郵箱函數(shù)硬件實(shí)現(xiàn)功能仿真如圖5所示.
仿真圖表明,在msg=1的情況下,同時(shí)沒(méi)有等待此郵箱的任務(wù),即pend_type=0則可成功申請(qǐng)消息郵箱,但釋放郵箱則顯示出錯(cuò),即pend_err=1;在msg=0的情況下,可成功釋放郵箱,但申請(qǐng)郵箱時(shí)就使得任務(wù)進(jìn)入等待列表.
4結(jié)語(yǔ)
文章采用VHDL硬件描述語(yǔ)言設(shè)計(jì)和實(shí)現(xiàn)消息郵箱管理,提高了任務(wù)間通信與同步的高效性和靈活性.消息郵箱硬件設(shè)計(jì)基于FPGA實(shí)現(xiàn),基于ISE 8.2開(kāi)發(fā)軟件進(jìn)行仿真與驗(yàn)證,實(shí)驗(yàn)結(jié)果證明硬件消息郵箱管理的正確性和高效性.在未來(lái)工作中,對(duì)于硬件實(shí)現(xiàn)的任務(wù)間通信與同步的管理機(jī)制做更深入的改進(jìn),顯著的提高其并行性和可靠性.
(編輯:王萍)