《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 可編程邏輯 > 業(yè)界動態(tài) > μC/OS-II內(nèi)核在FPGA上的硬件化設(shè)計(jì)與實(shí)現(xiàn)

μC/OS-II內(nèi)核在FPGA上的硬件化設(shè)計(jì)與實(shí)現(xiàn)

2009-06-19
作者:張 濤1,,廖力清1,王 頌2

  摘 要: 針對操作系統(tǒng)內(nèi)核占用系統(tǒng)資源的問題,,提出了一種新的實(shí)時(shí)操作系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)方法,。在仔細(xì)研究了μC/OS-II后,改進(jìn)了原μC/OS-II的TCB模塊,,配合多任務(wù)調(diào)度狀態(tài)機(jī)構(gòu)成的硬件調(diào)度系統(tǒng)替代了軟調(diào)度系統(tǒng),,提高了多任務(wù)調(diào)度性能并將改進(jìn)的系統(tǒng)內(nèi)核在FPGA上硬件化。通過修改51內(nèi)核,,設(shè)計(jì)了多任務(wù)映射的堆棧區(qū),,解決了51系列微控制器堆棧過小無法運(yùn)行多任務(wù)的問題。
  關(guān)鍵詞: μC/OS-II,;實(shí)時(shí)操作系統(tǒng),;FPGA

?

  隨著現(xiàn)代信息技術(shù)突飛猛進(jìn)的發(fā)展,軟件模塊化技術(shù)也有了廣泛提高,。為了更好地發(fā)揮微控制器的性能以及滿足更多的功能,,使軟硬件能夠更好地結(jié)合和展示,在微控制器中移植嵌入式操作系統(tǒng)已經(jīng)成為一種趨勢,。目前,,嵌入式系統(tǒng)的應(yīng)用范圍非常廣泛,不同領(lǐng)域有不同要求。通常有非實(shí)時(shí)系統(tǒng)和實(shí)時(shí)系統(tǒng),,而實(shí)時(shí)系統(tǒng)中又分硬實(shí)時(shí)和軟實(shí)時(shí)系統(tǒng),。在要求苛刻的系統(tǒng)中,一般需要硬實(shí)時(shí)操作系統(tǒng),。本文涉及飛行器剎車控制系統(tǒng),,必須使用硬實(shí)時(shí)操作系統(tǒng)。
1 項(xiàng)目產(chǎn)生背景
  某軍用機(jī)型的航空剎車控制系統(tǒng)原使用微控制器80C31,,外擴(kuò)ROM,、RAM及其他外設(shè)。軟件為前后臺系統(tǒng),,圖1為原系統(tǒng)連接示意圖,。

?


  當(dāng)新機(jī)型的剎車系統(tǒng)控制要求升級后,系統(tǒng)控制對象增多,,控制算法復(fù)雜度增大,,原有系統(tǒng)已完全不能勝任現(xiàn)在的要求。因此,,需要尋求新解決方案來滿足新系統(tǒng)要求,。
  為了保證能夠向下兼容原系統(tǒng),在原有系統(tǒng)基礎(chǔ)上能夠最大限度升級改進(jìn),,仍選用51內(nèi)核的微控制器,。經(jīng)過論證,決定選用FPGA構(gòu)造新系統(tǒng),,在FPGA系統(tǒng)中內(nèi)嵌8051 IP核,。這是在Oregano Systems公司提供的免費(fèi)8051 IP核的基礎(chǔ)上根據(jù)系統(tǒng)的需要而定制的。僅保留51的內(nèi)核部分,,并對內(nèi)核進(jìn)行一定的改造以適應(yīng)需要的操作系統(tǒng)的移植,。通過Verilog語言編寫多個(gè)可編程外設(shè)數(shù)字模塊掛接在系統(tǒng)總線上,功能遠(yuǎn)遠(yuǎn)超越一般的51方案,。將各種數(shù)字器件通過編程和IP核的方式集成在FPGA中,,這極大地提高了單芯片功能,減少了元器件數(shù)量,,從而簡化了整個(gè)系統(tǒng)設(shè)計(jì),,降低了系統(tǒng)故障率,縮短了循環(huán)開發(fā)周期,,大幅度減少了電路板面積和系統(tǒng)總成本,。
  新系統(tǒng)中的軟件部分舍棄了前后臺系統(tǒng),使用實(shí)時(shí)操作系統(tǒng),。這樣,,軟件系統(tǒng)可以很方便地分成多個(gè)在開發(fā)和運(yùn)行上獨(dú)立而又具有一定聯(lián)系的小任務(wù),,便于多人員參與開發(fā),。系統(tǒng)中的各種硬件被看成獨(dú)立的資源,,由各任務(wù)來調(diào)用。設(shè)計(jì)者希望創(chuàng)新性地將實(shí)時(shí)操作系統(tǒng)的內(nèi)核部分的功能硬件化至FPGA中,,從而進(jìn)一步加強(qiáng)系統(tǒng)的硬實(shí)時(shí)特性,。因?yàn)椴僮飨到y(tǒng)產(chǎn)生的負(fù)載都將由硬件來承擔(dān)。而此時(shí)操作系統(tǒng)對于軟件編程員來說幾乎是透明的,,如同使用一塊操作系統(tǒng)芯片,,只要將編寫的任務(wù)編譯好直接載入Flash,系統(tǒng)啟動后程序初始化操作系統(tǒng)的各控制寄存器填入各任務(wù)入口地址即可開始運(yùn)行,。系統(tǒng)采用免費(fèi)公開源代碼的μC/OS-II實(shí)時(shí)操作系統(tǒng),,并在其基礎(chǔ)上根據(jù)新系統(tǒng)的硬件條件進(jìn)行修改,量身定做一個(gè)合適的硬件實(shí)時(shí)操作系統(tǒng),。
  改進(jìn)后的新系統(tǒng)示意框圖如圖2所示,。


2 改進(jìn)的任務(wù)調(diào)度機(jī)制的設(shè)計(jì)
  作為實(shí)時(shí)系統(tǒng)最為關(guān)鍵的組成部分——實(shí)時(shí)操作系統(tǒng)內(nèi)核,其主要功能有:事件管理,、時(shí)間管理,、中斷服務(wù)、實(shí)時(shí)調(diào)度等[1],,如圖3所示?,F(xiàn)階段主要針對內(nèi)核的調(diào)度機(jī)和事件管理功能進(jìn)行硬件化改進(jìn),并對51 IP內(nèi)核結(jié)構(gòu)進(jìn)行相應(yīng)改進(jìn),。


2.1 任務(wù)控制塊(TCB)的改進(jìn)
  基于μC/OS-II的思想,,每個(gè)任務(wù)在建立后都有一個(gè)TCB來管理該任務(wù)。TCB是一個(gè)數(shù)據(jù)結(jié)構(gòu),,當(dāng)任務(wù)的CPU使用權(quán)被剝奪時(shí),,μC/OS-II用它來保存該任務(wù)的狀態(tài)。新系統(tǒng)中,,TCB修改后其數(shù)據(jù)結(jié)構(gòu)占用13 B,,其中參數(shù)如下所示:

typedef struct os_tcb
{
?  INT8U??OSTCBStkPtr;
  OS_EVENT?*OSTCBEVENTPtr,;
??? void???*OSTCBMsg,;
  void???*OSTCBTaskPtr;
  INT8U??OSTCBId,;
  INT8U??OSTCBPrio,;
  INT8U??OSTCBCntInitVlu;
  INT8U??OSTCBCnt
  INT16U??OSTCBDly,;
  INT8U??OSTCBStat,;
  BOOLEAN?OSTCBDelReq,;
};
  該數(shù)據(jù)結(jié)構(gòu)刪減了原有TCB的部分參數(shù),,保留原有TCB部分參數(shù)意義不變,,具體請見參考文獻(xiàn)[2]。被修改的TCB參數(shù)意義表述如下:
  OSTCBStkPtr為任務(wù)堆棧指針,,占1 B,,其保存的是51堆棧指針SP的值;
??? *OSTCBTaskPtr為任務(wù)函數(shù)入口地址指針,,其保存的是該任務(wù)的入口地址,;
  OSTCBId為任務(wù)ID號,參數(shù)取值為0~63,,任意任務(wù)的ID值不允許相同,,其為每個(gè)任務(wù)唯一識別碼;
  OSTCBPrio為任務(wù)優(yōu)先級,,參數(shù)取值為0~63,,0為最高優(yōu)先級,63為最低優(yōu)先級,,各個(gè)任務(wù)的優(yōu)先級允許相同,;
  OSTCBCntInitVlu為任務(wù)剩余時(shí)間片初始化值,取值從255~0,;
  OSTCBCnt為任務(wù)剩余時(shí)間片,,取值從255~0;
  OSTCBStat為任務(wù)當(dāng)前狀態(tài)及控制寄存器,。讀寄存器,,則會返回當(dāng)前任務(wù)的狀態(tài),例如運(yùn)行或者就緒態(tài),;寫寄存器,,則控制當(dāng)前任務(wù)自動進(jìn)入某狀態(tài),例如寫入掛起信號,,則調(diào)度系統(tǒng)狀態(tài)機(jī)自動將當(dāng)前任務(wù)掛起,。
  這些參數(shù)中,最重要的改動是OSTCBPrio和OSTCBCnt,,由此系統(tǒng)改進(jìn)成支持時(shí)間片輪番調(diào)度的可剝奪型內(nèi)核,。創(chuàng)建任務(wù)時(shí),任務(wù)的OSTCBId被賦唯一初值,,OSTCBPrio被賦予合適的優(yōu)先級,,其允許和其他任務(wù)同等優(yōu)先級,OSTCBCnt被賦予合適的任務(wù)執(zhí)行時(shí)間,。任務(wù)執(zhí)行過程中,,OSTCBId和OSTCBPrio不允許改變,,而在一個(gè)系統(tǒng)節(jié)拍過后,當(dāng)前任務(wù)的OSTCBCnt將減1,,在任務(wù)執(zhí)行過程中OSTCBCnt將隨系統(tǒng)節(jié)拍不斷減小,,直至為0。當(dāng)就緒態(tài)中同種優(yōu)先級的所有任務(wù)的OSTCBCnt全部減為0時(shí),,重新將各個(gè)任務(wù)的OSTCBCntInitVlu的值載入至OSTCBCnt,。
  任務(wù)的調(diào)度規(guī)則是:
  (1)OSTCBPrio越小,則越優(yōu)先執(zhí)行,;
  (2)OSTCBPrio相等,則OSTCBCnt越大的越優(yōu)先執(zhí)行,;
  (3)OSTCBPrio和OSTCBCnt都相等,,則OSTCBId越小越優(yōu)先執(zhí)行。
  任務(wù)調(diào)度執(zhí)行示意圖如圖4所示,。


  在原μC/OS-II系統(tǒng)中,,內(nèi)核通過一個(gè)“就緒表”完成對系統(tǒng)的就緒態(tài)最高優(yōu)先級任務(wù)的調(diào)度。系統(tǒng)內(nèi)核基本工作是任務(wù)調(diào)度,,系統(tǒng)運(yùn)行中,,將會有一定的資源消耗在調(diào)度上,大約占用CPU資源的2%~5%,。這對于51內(nèi)核來說,,可能占用的CPU資源更多。
  本系統(tǒng)改進(jìn)的目的,,是要盡量用硬件完成系統(tǒng)的調(diào)度,,釋放調(diào)度占用的CPU資源。因此改進(jìn)后的系統(tǒng)去掉了“就緒表”,,而使用一個(gè)有限狀態(tài)機(jī)完成對系統(tǒng)的調(diào)度,。
  在一個(gè)系統(tǒng)節(jié)拍中,狀態(tài)機(jī)將遍歷所有任務(wù)的OSTCBId,、OSTCBPrio,、OSTCBCnt和OSTCBStat參數(shù),找到STCBStat處于就緒態(tài)的任務(wù),,且按照上文中所述的調(diào)度規(guī)則進(jìn)行搜尋,。找到最合適規(guī)則的任務(wù)ID號即OSTCBId值,首先將其寫到任務(wù)調(diào)度緩沖區(qū)TaskIdBuf,,之后等待,,準(zhǔn)備在恰當(dāng)?shù)臅r(shí)機(jī)寫入調(diào)度寄存器TaskId,進(jìn)行任務(wù)切換,。
2.2 任務(wù)堆棧區(qū)(STK)的改進(jìn)
  51系列單片機(jī)的內(nèi)部直接尋址范圍00H~7FH,,CPU復(fù)位后,,堆棧指針SP復(fù)位為07H,堆棧向上增長,,顯然堆棧最大深度為120 B,,而且00H~1FH段為4組通用寄存器區(qū),20H~2FH為位尋址區(qū),,如果需要使用這些區(qū)域,,堆棧的深度則縮減為80 B,這對于多任務(wù)處理顯然是極其有限的,。
  μC/OS-II移植最關(guān)鍵的是堆棧設(shè)計(jì),,這里有兩個(gè)最重要的問題:模擬多任務(wù)堆棧結(jié)構(gòu)和51系列單片機(jī)堆棧較小缺陷的解決。
  解決問題的方法是修改8051的IP核源代碼,,將51核內(nèi)部直接尋址區(qū)修改成如圖5所示的尋址區(qū),。


  通過內(nèi)部地址映射管理器的映射,將FPGA的RAM中的80 B映射到直接尋址區(qū)的30H~7FH的任務(wù)堆棧區(qū)中,,這80 B的數(shù)據(jù)都作為同一個(gè)任務(wù)的堆棧,,這對于一般能在51系統(tǒng)上運(yùn)行的任務(wù)已足夠,能夠解決堆??臻g較小的問題,。本系統(tǒng)最多支持64個(gè)任務(wù),因此,,在RAM中有連續(xù)64個(gè)80 B的STK區(qū)塊可以映射到直接尋址區(qū)的STK區(qū)塊上,,同時(shí),映射管理器將RAM中連續(xù)的64個(gè)13 B的TCB區(qū)塊映射到FPGA控制寄存器區(qū)的TCB寄存器區(qū)塊上,。如此,,當(dāng)任務(wù)調(diào)度寄存器TaskId中填入的任務(wù)ID號改變時(shí),直接尋址區(qū)的STK的數(shù)據(jù)和FPGA控制寄存器區(qū)TCB的數(shù)據(jù)將隨之而改變,,映射所指向的區(qū)塊由調(diào)度寄存器TaskId來決定,。當(dāng)調(diào)度系統(tǒng)決定要開始一次新的任務(wù)調(diào)度時(shí),由如下步驟來完成:
  (1)給51內(nèi)核1個(gè)INT0外部0號中斷信號,,通知需要進(jìn)入系統(tǒng)調(diào)度狀態(tài),;
  (2)中斷服務(wù)程序?qū)?dāng)前任務(wù)使用寄存器入棧;
  (3)中斷服務(wù)程序?qū)?dāng)前任務(wù)SP的內(nèi)容保存到當(dāng)前任務(wù)TCB的OSTCBStkPtr,;
  (4)中斷服務(wù)程序發(fā)信號至FPGA的調(diào)度系統(tǒng)狀態(tài)機(jī),,狀態(tài)機(jī)自動將任務(wù)調(diào)度緩沖區(qū)TaskIdBuf的數(shù)據(jù)寫入調(diào)度寄存器TaskId,切換STK和TCB,;
  (5)中斷服務(wù)程序?qū)⑶袚Q后的任務(wù)TCB的OSTCBStkPtr寫入51內(nèi)核的SP,;
  (6)中斷服務(wù)程序?qū)⑶袚Q后的任務(wù)使用寄存器出棧;
  (7)退出中斷,,切換后的任務(wù)開始繼續(xù)運(yùn)行,。
  如此修改后,,任務(wù)切換中軟件需要完成的工作就極其簡單了,這極大降低了軟件系統(tǒng)對任務(wù)切換進(jìn)行控制所消耗的成本,,這些工作由硬件系統(tǒng)在任務(wù)運(yùn)行的同時(shí)并行完成,。這樣,即使將系統(tǒng)時(shí)鐘節(jié)拍頻率設(shè)定得比較高,,系統(tǒng)的額外負(fù)載也不會過重,。系統(tǒng)硬件對STK和TCB的物理映射,也同時(shí)保證了一個(gè)任務(wù)對其他任務(wù)的STK和TCB的不可見性,,保護(hù)了其他任務(wù)的STK和TCB數(shù)據(jù)不受該任務(wù)的影響,,從而一定程度上保證了任務(wù)運(yùn)行的安全。
  本文提出一個(gè)新的思想和嘗試方法進(jìn)行操作系統(tǒng)的設(shè)計(jì),。其創(chuàng)新點(diǎn)主要體現(xiàn)在:
  (1)將操作系統(tǒng)硬件化,。以往的操作系統(tǒng)屬于在應(yīng)用系統(tǒng)上運(yùn)行的軟件的一部分,需要占用應(yīng)用系統(tǒng)中CPU的部分資源,。而操作系統(tǒng)硬件化后,在任務(wù)運(yùn)行的同時(shí),,硬件操作系統(tǒng)并行地完成了任務(wù)調(diào)度的準(zhǔn)備工作,,只需要運(yùn)行中的任務(wù)完成保存現(xiàn)場數(shù)據(jù)至堆棧的工作,操作系統(tǒng)將立即切換任務(wù),。任務(wù)切換所需要的時(shí)間遠(yuǎn)遠(yuǎn)小于傳統(tǒng)軟件操作系統(tǒng),。
  (2)各任務(wù)在RAM區(qū)的STK映射到51內(nèi)核的直接尋址區(qū)的STK中,解決了51系列微控制器堆棧區(qū)過小的問題,,并使得各個(gè)任務(wù)的堆棧區(qū)都是獨(dú)立的,。而編寫任務(wù)程序時(shí),則是相對于同一個(gè)空間地址進(jìn)行操作,,且任務(wù)堆棧切換無需軟件控制,,避免了程序上出錯(cuò)造成的影響。同樣使用映射技術(shù)的還有TCB區(qū)和ECB區(qū),,此處不再贅述,。
  該改進(jìn)方案已基本在FPGA系統(tǒng)上實(shí)現(xiàn),目前仍處于性能測試階段,,不足之處有待改進(jìn),。


?

參考文獻(xiàn)
[1] 徐惠民.基于VxWorks的嵌入式系統(tǒng)及實(shí)驗(yàn)[M].北京:北京郵電大學(xué)出版社,2006.
[2] LABROSSE J J.The real-time kernel second edition[M].北京:北京航空航天大學(xué)出版社,,2003.
[3] 張培仁.基于C語言編程MCS-51單片機(jī)原理與應(yīng)用[M].北京:清華大學(xué)出版社,,2003.
[4] 朱明程,熊元姣.ACTEL數(shù)字系統(tǒng)現(xiàn)場集成技術(shù)[M].北京:清華大學(xué)出版社,,2004.
[5] 田志鑫,,張雷.在51單片機(jī)上移植μC/OS-II關(guān)鍵問題的解決[A].微計(jì)算機(jī)信息,,2007,23(12):56-58.
[6] 孫旭祥.淺析實(shí)時(shí)操作系統(tǒng)的任務(wù)調(diào)度[A].通信對抗,,2005(12):47-50.
[7] 溫圣軍,,王簡瑜.80C51原始IP核內(nèi)部RAM的擴(kuò)展方案[A].單片機(jī)與嵌入式應(yīng)用,2008(2):64-66.

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,,并不代表本網(wǎng)站贊同其觀點(diǎn)。轉(zhuǎn)載的所有的文章,、圖片,、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認(rèn)版權(quán)者,。如涉及作品內(nèi)容,、版權(quán)和其它問題,請及時(shí)通過電子郵件或電話通知我們,,以便迅速采取適當(dāng)措施,,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118,;郵箱:[email protected],。