新聞中心

EEPW首頁 > 汽車電子 > 設(shè)計(jì)應(yīng)用 > 基于交流采樣的實(shí)時微內(nèi)核的設(shè)計(jì)

基于交流采樣的實(shí)時微內(nèi)核的設(shè)計(jì)

作者:■ 西安交通大學(xué)工業(yè)自動化系 余群兵 陳剛 魏巍 潘超軍 時間:2005-04-27 來源:eaw 收藏

摘    要:本文從的等間隔要求出發(fā),提出了基于的實(shí)時的設(shè)計(jì)方法,詳細(xì)介紹了實(shí)時設(shè)計(jì)中保證等間隔采樣的具體措施,并給出了該內(nèi)核的具體應(yīng)用實(shí)例。
關(guān)鍵詞:;;

引言
在微機(jī)型電力設(shè)備中,系統(tǒng)一般通過交流采樣獲取信號,然后采用傅氏濾波或快速傅立葉變換(FFT)等有等間隔采樣要求的濾波算法提取信號特征量。在采樣率為幾十Ksps及以下時,定時觸發(fā)A/D實(shí)現(xiàn)等間隔采樣可通過簡單硬件電路或微控制器內(nèi)部定時器來實(shí)現(xiàn)。在傳統(tǒng)的前后臺軟件設(shè)計(jì)方法中,一般是在定時器周期性中斷服務(wù)程序中執(zhí)行交流采樣任務(wù),其它功能絕大部分在后臺的無限循環(huán)內(nèi)完成。隨著微控制器集成度的增加和應(yīng)用要求的復(fù)雜化,前后臺系統(tǒng)在大量的片內(nèi)外設(shè)的使用和管理、任務(wù)實(shí)時性保證、程序可靠性和可移植性等方面顯得力不從心。RTOS可以有效的解決上述諸多問題,它體現(xiàn)了一種新的程序設(shè)計(jì)思想和開放的框架,降低了程序的復(fù)雜度。
目前許多廠商提供的RTOS對中小應(yīng)用系統(tǒng)成本影響較大,單片機(jī)、及有限的硬件資源也難于支撐整個系統(tǒng)的正常運(yùn)行,且保證精確、頻繁的等間隔交流采樣也較困難。基于以上考慮,為了在保證等間隔采樣的同時確保系統(tǒng)中計(jì)算、測頻、保護(hù)、控制輸出、數(shù)據(jù)存儲、通訊、按鍵、液晶顯示、實(shí)時時鐘等諸多任務(wù)的實(shí)時性和降低軟件設(shè)計(jì)的難度,本文提出了以采樣間隔為內(nèi)核粒度的微內(nèi)核軟件設(shè)計(jì)方法,并在TMS320LF2407A上實(shí)現(xiàn)了內(nèi)核的代碼級設(shè)計(jì),代碼約1K字,關(guān)鍵部分用匯編語言實(shí)現(xiàn)。

基本硬件配置
實(shí)時微內(nèi)核采用了RTOS的任務(wù)調(diào)度方法,把CPU時間分成若干時間片,并根據(jù)某種調(diào)度算法把時間片分配給各個任務(wù)。微機(jī)型電力設(shè)備大都具備繁重的測量和運(yùn)算任務(wù),且響應(yīng)時間非常重要,是典型的實(shí)時工業(yè)控制系統(tǒng),因此采用搶先式微內(nèi)核結(jié)構(gòu)。
在搶先式內(nèi)核的多任務(wù)處理中,用中斷來實(shí)現(xiàn)任務(wù)環(huán)境(context)切換是一種較理想的機(jī)制。圖1所示的是一個基于搶先式多任務(wù)內(nèi)核的基本硬件配置。
定時器周期性地產(chǎn)生中斷,強(qiáng)制CPU把控制權(quán)交給內(nèi)核,周期中斷服務(wù)程序調(diào)用任務(wù)調(diào)度函數(shù),并切換至處在就緒態(tài)的最高優(yōu)先級任務(wù)。定時器周期性中斷產(chǎn)生時鐘節(jié)拍(Clock Tick) 或內(nèi)核粒度,時鐘節(jié)拍是任務(wù)定時、任務(wù)延時和任務(wù)超時判斷的時鐘源,也是多任務(wù)調(diào)度實(shí)現(xiàn)和系統(tǒng)正常運(yùn)行的基礎(chǔ)。
為了嚴(yán)格滿足交流采樣等間隔的要求,可利用片內(nèi)外設(shè)的特點(diǎn)對基本硬件配置做圖2所示的改進(jìn)。詳細(xì)過程為:定時器GP Timer1周期性連續(xù)增計(jì)數(shù),周期性的觸發(fā)片內(nèi)A/D轉(zhuǎn)換,并在轉(zhuǎn)換結(jié)束產(chǎn)生中斷。由于A/D轉(zhuǎn)換結(jié)束中斷對等間隔要求不高,而等間隔采樣通過上述方式已嚴(yán)格保證,因此滿足微機(jī)型電力設(shè)備測量和運(yùn)算的基本要求。

內(nèi)核設(shè)計(jì)與實(shí)現(xiàn)
每個任務(wù)都是一個無限循環(huán),它們具有各自獨(dú)立的堆??臻g和不同的靜態(tài)優(yōu)先級。在實(shí)時微內(nèi)核根據(jù)任務(wù)的狀態(tài)進(jìn)行任務(wù)調(diào)度時,任務(wù)狀態(tài)也相應(yīng)改變。因此,可用OSTSW和OSTID兩個unsigned int變量來標(biāo)識任務(wù)狀態(tài),并采用位影像法表示,每一位對應(yīng)一個任務(wù)的狀態(tài):掛起、就緒或運(yùn)行。任務(wù)狀態(tài)字OSTSW可理解為任務(wù)就緒表,標(biāo)識任務(wù)的就緒與否,其中高位表示高優(yōu)先級任務(wù),運(yùn)行任務(wù)號OSTID則標(biāo)識當(dāng)前運(yùn)行的任務(wù)。為了提高系統(tǒng)運(yùn)行的穩(wěn)定性和可移植性,任務(wù)堆棧及任務(wù)狀態(tài)字等內(nèi)核相關(guān)的數(shù)據(jù)區(qū)都放在DSP內(nèi)部RAM中??紤]到DSP片內(nèi)的RAM容量和實(shí)際應(yīng)用要求,系統(tǒng)最多可容納8個任務(wù)。
任務(wù)調(diào)度
內(nèi)核進(jìn)行任務(wù)調(diào)度時總是把CPU時間分配給就緒態(tài)任務(wù)中優(yōu)先級最高的任務(wù),調(diào)度過程如下:先將被掛起任務(wù)的微處理器寄存器壓棧,然后找出處在就緒態(tài)的最高優(yōu)先級任務(wù),并對任務(wù)狀態(tài)作相應(yīng)改變,最后把它的寄存器值從棧中恢復(fù)到寄存器中并返回,實(shí)現(xiàn)任務(wù)的切換。任務(wù)調(diào)度分中斷級調(diào)度和任務(wù)級調(diào)度兩種,前者在周期性中斷結(jié)束時調(diào)用,后者則在每個任務(wù)執(zhí)行完成時調(diào)用。事實(shí)上,在中斷級任務(wù)調(diào)度中,任務(wù)調(diào)度所做的僅僅是改變了恢復(fù)時的堆棧指針,而任務(wù)級調(diào)度則人為模仿了一次中斷,因此兩者調(diào)度部分基本相同,代碼也是共用的。
由于等間隔采樣是系統(tǒng)通過中斷方式實(shí)現(xiàn)的,因此中斷級任務(wù)調(diào)度僅增加了找出就緒態(tài)中最高優(yōu)先級任務(wù)的執(zhí)行代碼。下面給出內(nèi)核關(guān)鍵部分即任務(wù)調(diào)度的匯編實(shí)現(xiàn)。
OSCtxSw: CALL I$$SAVE,*
;任務(wù)環(huán)境保存
OSCtxSw_0: LDP #0
  CLRC SXM
  LACC _OSTSW,15
;找出優(yōu)先級最高的就緒態(tài)任務(wù)
  MAR  *,AR2 
  LAR AR2,#0
  RPT #7
  NORM *+  ;用NORM指令逐位查找
  LAR AR0,_OSTID
  CMPR  0
  BCND NSwR,TC  
  SAR  AR2,_OSTID
;設(shè)置優(yōu)先級最高的就緒態(tài)
;任務(wù)的任務(wù)號為當(dāng)前任務(wù)號
  LAR  AR2,
#_OSStkPtr
  MAR *0+
  SAR  AR1,*  ;保存被切換任務(wù)的棧頂指針
  MAR *0-
  LAR  AR0,_OSTID
  MAR    *0+
  LAR    AR1,*  ;裝載待運(yùn)行任務(wù)的棧頂指針
NSwR: B I$$REST,*,AR1 ;任務(wù)環(huán)境恢復(fù)
任務(wù)定時和延時
當(dāng)任務(wù)延時精確度要求較高或延時要求比較固定時,可采用任務(wù)定時的方法,由內(nèi)核為任務(wù)直接提供延時服務(wù);而當(dāng)任務(wù)延時要求低或者延時要求比較靈活時,可由任務(wù)提出延時申請,再由內(nèi)核處理延時操作。區(qū)分任務(wù)定時和延時將進(jìn)一步提高內(nèi)核的效率和實(shí)時性。
任務(wù)通訊
有多種方法可以保護(hù)任務(wù)之間共享數(shù)據(jù)和提供任務(wù)之間的通訊,但根據(jù)實(shí)際需要,僅設(shè)若干標(biāo)志位作為任務(wù)信號,實(shí)現(xiàn)任務(wù)間的同步與互斥、標(biāo)志事件發(fā)生與否等等。為了簡化設(shè)計(jì),讓系統(tǒng)易于把握,盡量將關(guān)系密切的任務(wù)合并,從而盡可能減少任務(wù)間的通訊。

交流采樣與內(nèi)核粒度
由于微機(jī)型電力設(shè)備中交流采樣是設(shè)備功能實(shí)現(xiàn)的基礎(chǔ),因此實(shí)時微內(nèi)核的設(shè)計(jì)要以確保等間隔采樣為前提。通過圖2所示的方法,采樣等間隔得到有效保證。其中,A/D轉(zhuǎn)換結(jié)束中斷取代定時器周期性中斷,提供給實(shí)時微內(nèi)核作為周期性中斷實(shí)現(xiàn)時鐘節(jié)拍。當(dāng)某次時鐘節(jié)拍被延遲,并不會影響到下一個時鐘節(jié)拍的到來,因而整體上仍滿足系統(tǒng)要求。周期性A/D轉(zhuǎn)換結(jié)束中斷處理程序內(nèi),系統(tǒng)要完成A/D轉(zhuǎn)換結(jié)果處理以及多任務(wù)調(diào)度等系統(tǒng)調(diào)用。
在這里,內(nèi)核粒度與交流采樣的時間間隔對應(yīng),而周波(工頻周期為20ms)采樣點(diǎn)數(shù)一般為幾十至幾百個點(diǎn),故內(nèi)核粒度為幾十ms至幾百ms不等。但內(nèi)核粒度越小,加在系統(tǒng)上的開銷就越大,對存儲空間也有更高的要求。mC/OS-II 內(nèi)核粒度要求在10ms~200ms之間。但在某些要求較高的場合,大多數(shù)任務(wù)需要在周波內(nèi)精確控制,且延時精度要求到ms級甚至更高,mC/OS-II難以滿足要求。而使用采樣間隔作為內(nèi)核粒度,并對內(nèi)核進(jìn)行簡化設(shè)計(jì),可滿足大多數(shù)交流采樣系統(tǒng)的應(yīng)用要求。

微內(nèi)核的設(shè)計(jì)實(shí)例
圖3為中壓微機(jī)型繼電保護(hù)裝置的結(jié)構(gòu)框圖。為了突出微內(nèi)核結(jié)構(gòu)使編程模塊化、簡單化的優(yōu)點(diǎn),作為系統(tǒng)基礎(chǔ)部分的交流采樣在實(shí)例中不再列出,僅以總線式按鍵和液晶實(shí)現(xiàn)人機(jī)交互的一個簡單例子來說明。
液晶屏上一般都要求顯示實(shí)時時鐘,為了秒位走時均勻,需要每隔1s重新繪制屏幕。當(dāng)有按鍵操作時,則要求立即更新屏幕,否則產(chǎn)生延遲,反應(yīng)顯得遲緩,影響交互效果。系統(tǒng)每隔20ms檢測是否有鍵按下,檢測到按鍵時讓按鍵響應(yīng)任務(wù)就緒。按鍵響應(yīng)任務(wù)處理完按鍵事件后,向內(nèi)核提出恢復(fù)顯示任務(wù)請求,然后掛起。當(dāng)沒有更高優(yōu)先級就緒態(tài)任務(wù)時,執(zhí)行顯示任務(wù)。在沒有按鍵的情況下,顯示任務(wù)執(zhí)行完當(dāng)前操作后向內(nèi)核提出延時服務(wù)申請,1s延時結(jié)束后任務(wù)重新運(yùn)行,自動刷新屏幕。實(shí)現(xiàn)的示意性代碼如下:
void Task_Display(void)
file://顯示任務(wù),6號任務(wù)
{ while (1)   
 { if(EnableShow)
ShowWindow(); file://顯示單窗口
  OSTimeDly(1600);     file://延時1s
 }
}
void Task_KeyEvent(void)    file://按鍵響應(yīng)任務(wù),5號任務(wù)
{ while(1)
 { KeyHandle();        file://按鍵處理
  OSTimeDly
Resume(6); file://顯示更新,撤銷顯示任務(wù)的延時
  OSTaskSuspend(5);    file://鍵盤響應(yīng)任務(wù)掛起
 }
}
void OSTime20msHook(void)    file://20ms定時的Hook
{   if(KeyPressed&&EnableHandle)  file://如果有鍵按下并允許處理
 OSTSW|=OSTSM5;    file://讓按鍵響應(yīng)任務(wù)就緒
}

結(jié)語
本文提出了基于交流采樣的實(shí)時微內(nèi)核的設(shè)計(jì)方法,并在基于DSP的中壓繼電保護(hù)、絕緣在線檢測等多個系統(tǒng)中得到實(shí)際應(yīng)用。內(nèi)核設(shè)計(jì)充分考慮了微機(jī)型電力設(shè)備信號測量和實(shí)時性要求以及資源有限的特點(diǎn),吸收了諸多商用RTOS的優(yōu)點(diǎn),因而能夠滿足大部分交流采樣系統(tǒng)的要求。同時,DSP在電力設(shè)備中的廣泛使用使得上述設(shè)計(jì)方法具有一定的通用性,可以作為基于DSP的微機(jī)型電力設(shè)備的嵌入式軟件開發(fā)平臺。■

參考文獻(xiàn)
1孫玉芳.嵌入式計(jì)算設(shè)計(jì)原理.北京:機(jī)械工業(yè)出版社,2002.2
2袁勤勇.嵌入式系統(tǒng)構(gòu)件.北京:機(jī)械工業(yè)出版社,2002.2
3 朱一凡.面向關(guān)鍵任務(wù)實(shí)時嵌入式操作系統(tǒng)設(shè)計(jì)技術(shù)研究.儀器儀表標(biāo)準(zhǔn)化與計(jì)量, 2002.6



評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉