王博+李巖+王簡+黃天昕



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