<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 基于FPGA的UCOS-II任務(wù)管理硬件設計

基于FPGA的UCOS-II任務(wù)管理硬件設計

作者: 時(shí)間:2017-06-05 來(lái)源:網(wǎng)絡(luò ) 收藏

RTOS(Real Time Operating System)由于具有調度的實(shí)時(shí)性、響應時(shí)間的可確定性、系統高度的可靠性等特點(diǎn),被越來(lái)越多地應用在嵌入式系統中,如:航空航天、工業(yè)控制、汽車(chē)電子和核電站建設等眾多領(lǐng)域。

本文引用地址:http://dyxdggzs.com/article/201706/349238.htm

  傳統上,RTOS內核是加在應用程序中的軟件,它不僅增加了ROM(代碼空間)和RAM(數據空間)的開(kāi)銷(xiāo),而且增加了應用程序的額外負荷,即使在設計較好的應用系統中內核仍占用2%~5%的CPU負荷[1]。在實(shí)時(shí)性較強的場(chǎng)合,若無(wú)法得到及時(shí)的響應,將會(huì )引起嚴重后果。因此,降低RTOS內核的系統開(kāi)銷(xiāo)及提高其實(shí)時(shí)性非常重要。

  對于降低RTOS占用應用程序處理器開(kāi)銷(xiāo)的研究,大多數集中在改進(jìn)調度算法[2]和提高處理器的處理能力[3],但是依靠改進(jìn)調度算法已不能使其實(shí)時(shí)性有更大的提高,通過(guò)提高處理器速度也達不到理想的效果。隨著(zhù)EDA技術(shù)的發(fā)展及硬件芯片造價(jià)的降低,“”的趨勢正在成為一個(gè)研究的新熱點(diǎn)。采用硬件芯片實(shí)現RTOS的功能模塊極大地發(fā)揮了系統處理的并行特性,使硬件RTOS的處理速度達到了傳統軟件RTOS的6~50倍[4]。然而,RTOS的硬件化非常復雜、繁瑣,大多由軟件實(shí)現的數據結構不適合硬件的并行實(shí)現,需要重新修改、設計。

本文就具體的μC/OS-II的進(jìn)行了硬件設計,實(shí)現了模塊系統調用的硬件電路和基于組合電路的硬件任務(wù)調度器。

  1 硬件RTOS總體設計

  硬件RTOS由軟件和硬件兩部分組成,如圖1所示。軟件部分負責應用程序與硬件RTOS的交互,主要實(shí)現2點(diǎn)功能:向應用程序提供訪(fǎng)問(wèn)硬件函數的接口;向硬件邏輯提供返回處理結果的中斷處理函數和任務(wù)切換的中斷處理函數。硬件部分將以往由底層軟件函數完成的工作,采用硬件函數完成。

  硬件RTOS仍然是以系統調用的形式為應用程序服務(wù),所不同的是由調用硬件函數替代了以往的軟件函數。軟件函數和硬件函數的區別[5]在于:它們被處理時(shí)所在的器件不同,軟件函數編譯成一條條指令在處理器上執行,硬件函數把參數通過(guò)數據總線(xiàn)發(fā)送到了指定硬件單元電路的寄存器中,再由硬件邏輯電路進(jìn)行相應的處理。硬件電路與處理器可以并行工作,節省的處理器時(shí)間用于執行別的任務(wù),提高了系統的可調度性。

  圖1中,硬件部分由輸入輸出寄存器、中斷控制器、控制器和RTOS主要功能模塊等組成。


(1)輸入輸出寄存器。輸入寄存器接收由接口函數傳遞的功能代碼和參數,輸出寄存器將執行結果返回給接口函數。

  (2)中斷控制器。接收外部事件中斷,中斷控制器 使用FPGA的I/O(輸入/輸出)管腳,每個(gè)管腳對應一個(gè)外部中斷,一個(gè)或者多個(gè)外部中斷對應一個(gè)中斷處理任務(wù)[6]。當外部中斷到來(lái)時(shí),相應的事件標志位被置位,中斷任務(wù)被置為就緒態(tài)。

  (3)控制器。從事件控制塊和信號量控制塊獲知任務(wù)的狀態(tài),結合系統調用的功能代碼和參數信息,確定將要執行的操作并發(fā)出控制信號。每個(gè)硬件單元都通過(guò)CPU發(fā)出的控制信號進(jìn)行工作。

  RTOS主要功能模塊包括:事件標志組管理、信號量管理、及時(shí)鐘管理。

  (1)事件標志組管理。事件標志組是一個(gè)數據結構,采用FPGA的片內寄存器實(shí)現,每
個(gè)事件占1 bit。任務(wù)或中斷服務(wù)可以將某一位置位或復位。當任務(wù)所需要的事件發(fā)生時(shí),則將相應的事件位置位;當任務(wù)所等待的事件都發(fā)生時(shí),則應向控制器提出改變任務(wù)狀態(tài)的相應申請,同時(shí)將任務(wù)的ID號送給任務(wù)管理模塊。

  (2)信號量管理。信號量由2部分組成:16 bit的無(wú)符號整型的計數值(0~65535);等待該信號量的任務(wù)組成的等待任務(wù)表。采用可預置的雙向計數器(up/down)實(shí)現計數值部分,采用FPGA片內的寄存器實(shí)現該信號量的等待任務(wù)表。寄存器的位數對應系統中的任務(wù)數,每個(gè)任務(wù)占1 bit,且初始值為0(表示沒(méi)有任務(wù)等待該信號量)。等待該信號量的任務(wù)將寄存器的相應位置1,釋放該信號量的任務(wù)喚醒優(yōu)先級較高的等待任務(wù),將寄存器的相應位置0。每發(fā)生一次置位或復位操作,也必須向控制器提出改變任務(wù)狀態(tài)的相應申請,同時(shí)將相應任務(wù)的ID號送給任務(wù)管理模塊。

  (3)任務(wù)管理。負責各種任務(wù)狀態(tài)的切換和任務(wù)調度。任務(wù)管理模塊接收從輸入寄存器、事件標志組管理模塊或信號量管理模塊傳遞來(lái)的任務(wù)ID號,在控制器的相應控制信號作用下,執行任務(wù)狀態(tài)的切換。調度器以任務(wù)的狀態(tài)為敏感信號,當任務(wù)的狀態(tài)發(fā)生改變時(shí),觸發(fā)調度器執行一次任務(wù)調度,找出當前優(yōu)先級最高的就緒態(tài)任務(wù)。若其優(yōu)先級高于當前正在運行的任務(wù)的優(yōu)先級,則向CPU發(fā)出硬件中斷處理信號。

  (4)定時(shí)器管理。主要實(shí)現任務(wù)的延時(shí),當設置的延時(shí)時(shí)間到且任務(wù)沒(méi)有等待別的資源時(shí),將任務(wù)的狀態(tài)置為就緒。

  由圖1可知,硬件RTOS的工作過(guò)程如下:
(1)在應用程序中調用系統服務(wù)。
(2)系統調用的接口函數將功能代碼和參數傳給硬件部分的輸入寄存器。
(3)硬件部分執行系統調用。
(4)在硬件邏輯執行系統調用的過(guò)程中,可以接收外部事件的異步請求,因此,硬件部分執行系統調用過(guò)程中可能轉向以下不同的處理過(guò)程:
①若外部事件請求使中斷任務(wù)就緒,則向處理器發(fā)出要求任務(wù)切換的硬件中斷請求。
②若系統調用使高優(yōu)先級的任務(wù)就緒,則硬件部分向處理器發(fā)出要求任務(wù)切換的硬件中斷請求。
③硬件部分完成系統調用功能,則采用中斷形式通知處理器并回送處理結果。
(5)中斷處理函數完成任務(wù)切換。
(6)處理器執行新任務(wù)。

  2 μC/OS-II任務(wù)管理硬件設計

  任務(wù)管理是RTOS的核心,本文首先對μC/OS-II任務(wù)管理模塊進(jìn)行了硬件設計,其他的模塊可以依托任務(wù)管理展開(kāi)。μC/OS-II任務(wù)管理主要包括建立任務(wù)、刪除任務(wù)、掛起任務(wù)、恢復任務(wù)、查詢(xún)任務(wù)和任務(wù)調度等。其中建立任務(wù)、刪除任務(wù)、掛起任務(wù)、恢復任務(wù)和查詢(xún)任務(wù)是通過(guò)系統調用形式交給用戶(hù)調用的;而任務(wù)調度是交給系統函數調用的,用戶(hù)不能直接調用它。因此,本文將任務(wù)管理分成系統調用函數的硬件實(shí)現和任務(wù)調度器硬件實(shí)現2部分。

  2.1 任務(wù)管理系統調用函數的硬件設計

μC/OS-II的任務(wù)由3部分組成:即任務(wù)程序代碼、任務(wù)堆棧、任務(wù)控制塊TCB(Task Control Block)。TCB把任務(wù)代碼和任務(wù)堆棧進(jìn)行關(guān)聯(lián)而使三者成為一個(gè)整體。

任務(wù)管理系統調用的硬件實(shí)現電路如圖2所示。參數1是建立任務(wù)時(shí),寫(xiě)入TCB的任務(wù)代碼段地址、任務(wù)優(yōu)先級、任務(wù)的參數指針和分配給任務(wù)的堆棧棧頂指針等任務(wù)運行和管理的信息;參數2是分配給任務(wù)的ID號。每個(gè)任務(wù)依據任務(wù)的ID號對應一個(gè)TCB。


在圖2中,任務(wù)管理系統調用的硬件實(shí)現電路主要由分配器、選擇器和TCB寄存器組成。

  (1)分配器。建立任務(wù)和刪除任務(wù)時(shí),分配器根據任務(wù)的ID號選擇建立任務(wù)的信息送到對應的輸出通道上,分配器的輸出端與多路選擇器的一路輸入端直連,即參數1被送到了選擇器的輸入端,作為一路輸入。掛起任務(wù)和恢復任務(wù)時(shí),分配器根據任務(wù)的ID號,將任務(wù)的狀態(tài)送到對應TCB的狀態(tài)寄存器中。

(2)選擇器。選擇器的輸入端分別是建立任務(wù)時(shí)要送給 TCB的數據(參數1)和刪除任務(wù)時(shí)要送給TCB的數據(系統初始值),數據輸出端與一個(gè)TCB塊直連。建立信號有效時(shí),選擇參數1寫(xiě)入TCB,建立任務(wù)完成;否則,寫(xiě)入系統的初始值覆蓋TCB信息,即任務(wù)被刪除。掛起和恢復任務(wù)只需根據任務(wù)的ID號找到相應的TCB并修改其狀態(tài)寄存器的值。二值選擇器的輸入端是0和1,可以分別表示任務(wù)的等待和就緒狀態(tài)。

(3)TCB寄存器。在軟件實(shí)現的RTOS中,空閑TCB塊和已占用的TCB塊分別以空閑任務(wù)鏈表和任務(wù)鏈表的形式常駐內存。但是基于鏈表的軟件算法并不適合直接采用硬件高效實(shí)現,因為只有讀取鏈表的前一個(gè)表項的內容后,才能獲得后續表項的地址,限制了硬件并行的開(kāi)發(fā)。因此,本文將TCB的數據結構全部采用片內的寄存器資源實(shí)現,從而節省了鏈表的查找時(shí)間,提高了系統調用的執行效率。

  2.2 任務(wù)調度器的硬件設計

  μC/OS-II進(jìn)行任務(wù)調度的思想是,每時(shí)每刻總是讓優(yōu)先級最高的就緒任務(wù)處于運行狀態(tài)。為了實(shí)現高效的調度算法,采用組合電路實(shí)現硬件調度器,如圖3所示。以?xún)?yōu)先級為選擇條件,將TCB中的狀態(tài)寄存器直接與調度器相連接。這樣,只要任務(wù)的優(yōu)先級或任務(wù)的狀態(tài)有一個(gè)發(fā)生改變,就會(huì )立刻引發(fā)一次任務(wù)的的重新調度。


圖3中,數據分配器與TCB寄存器中的狀態(tài)寄存器RDY輸出端直連,使用優(yōu)先級PRI作為選擇條件,將RDY的就緒態(tài)(RDY=‘1’)分配到不同的輸出通道上。寄存器REG_X接收數據分配器輸出通道的輸出值并按位存儲。將所有的REG_X寄存器按位進(jìn)行或運算,結果送寄存器PRI_REG。如圖4所示,優(yōu)先級寄存器PRI_REG的位數對應系統中任務(wù)的個(gè)數,寄存器PRI_REG某位為1就表示相應優(yōu)先級的任務(wù)處于就緒態(tài),且低位的優(yōu)先級依次高于高位的優(yōu)先級。譯碼器從寄存器讀取PRI_REG的值進(jìn)行譯碼,送出處于就緒態(tài)且優(yōu)先級最高的任務(wù)。比較器PRI_COMP以任務(wù)的ID號為索引,任務(wù)的優(yōu)先級PRI為比較內容。將每個(gè)任務(wù)的優(yōu)先級與譯碼找到的就緒態(tài)的最高優(yōu)先級相比較,若相同,則輸出任務(wù)的ID號,否則輸出0。最后將所有比較器PRI_COMP的輸出做或運算,即得到處于就緒態(tài)的優(yōu)先級最高任務(wù)的ID號。


假設在某一時(shí)刻,系統中優(yōu)先級PRI為1、2、3、6和7的任務(wù)處于就緒態(tài),對應任務(wù)的ID號分別是010、100、001、110和111,則調度器中的數據處理流程如圖5所示。


2.3 仿真及實(shí)驗結果

整個(gè)設計采用VHDL硬件語(yǔ)言描述。為了驗證該硬件實(shí)現的正確性和高效性,使用 ISE 8.2軟件進(jìn)行時(shí)序仿真驗證。任務(wù)管理硬件實(shí)現的功能仿真如圖6所示。


(1)建立任務(wù)。依次建立3個(gè)任務(wù),優(yōu)先級與ID號相同分別為7、1和6。若系統中只有優(yōu)先級為7的任務(wù)處于就緒態(tài),則Next_task_id為7;當建立了優(yōu)先級為1的任務(wù)時(shí),高優(yōu)先級任務(wù)剝奪低優(yōu)先級任務(wù)的CPU使用權,Next_task_id為1,直到有更高優(yōu)先級的任務(wù)到來(lái),或任務(wù)自身刪除,優(yōu)先級為1的任務(wù)將一直執行。

(2)查詢(xún)任務(wù)。處理器通過(guò)查詢(xún)任務(wù)這個(gè)系統調用獲得任務(wù)自身或其他應用任務(wù)的信息,查詢(xún)即將TCB的內容輸出。

(3)掛起任務(wù)。掛起優(yōu)先級為1的任務(wù),則優(yōu)先級為6的任務(wù)開(kāi)始執行。掛起的任務(wù)處于等待狀態(tài),只有通過(guò)調用任務(wù)恢復函數才能恢復。

(4)建立任務(wù)。建立優(yōu)先級分別為5、2和4的3個(gè)任務(wù)。優(yōu)先級為5的任務(wù)剝奪優(yōu)先級為6的任務(wù)的CPU使用權,優(yōu)先級為2的任務(wù)又剝奪優(yōu)先級為5的任務(wù)的CPU使用權開(kāi)始執行,優(yōu)先級為4的任務(wù)等待。

(5)刪除任務(wù)。刪除了優(yōu)先級為2的任務(wù),此刻系統中優(yōu)先級為4的任務(wù)開(kāi)始執行。

(6)恢復任務(wù)?;謴蛢?yōu)先級為1的任務(wù),優(yōu)先級為1的任務(wù)剝奪優(yōu)先級為4的任務(wù)的CPU使用權又重新開(kāi)始執行。

從圖6可以看出,硬件實(shí)現可以高效完成操作系統任務(wù)管理的系統調用的功能。建立任務(wù)和刪除任務(wù)需要3個(gè)時(shí)鐘節拍,掛起任務(wù)、恢復任務(wù)和查詢(xún)任務(wù)的狀態(tài)需要1個(gè)時(shí)鐘節拍。任務(wù)調度是實(shí)時(shí)的,只要任務(wù)的狀態(tài)或優(yōu)先級有一個(gè)發(fā)生改變,就立刻重新調度。該設計所消耗的邏輯資源較少,降低了開(kāi)發(fā)成本,使其集成組件成為可能。

  本文針對傳統內核占用系統資源、影響系統實(shí)時(shí)性的問(wèn)題,提出了用單獨的硬件電路實(shí)現實(shí)時(shí)操作系統中的系統調用和任務(wù)調度器的方案。重點(diǎn)給出了采用FPGA實(shí)現μC/OS-Ⅱ任務(wù)管理模塊的過(guò)程。仿真結果表明,任務(wù)管理的硬件實(shí)現保持了系統調用的正確性,同時(shí)減少了系統調用的執行時(shí)間、降低了處理器系統開(kāi)銷(xiāo)。因此,硬件RTOS的實(shí)現,具有一定研究和使用價(jià)值。



評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>