基于交流采樣的實(shí)時(shí)微內核的設計
摘 要:本文從交流采樣的等間隔要求出發(fā),提出了基于交流采樣的實(shí)時(shí)微內核的設計方法,詳細介紹了實(shí)時(shí)微內核設計中保證等間隔采樣的具體措施,并給出了該內核的具體應用實(shí)例。
關(guān)鍵詞:交流采樣;DSP;實(shí)時(shí)多任務(wù);微內核
引言
在微機型電力設備中,系統一般通過(guò)交流采樣獲取信號,然后采用傅氏濾波或快速傅立葉變換(FFT)等有等間隔采樣要求的濾波算法提取信號特征量。在采樣率為幾十Ksps及以下時(shí),定時(shí)觸發(fā)A/D實(shí)現等間隔采樣可通過(guò)簡(jiǎn)單硬件電路或微控制器內部定時(shí)器來(lái)實(shí)現。在傳統的前后臺軟件設計方法中,一般是在定時(shí)器周期性中斷服務(wù)程序中執行交流采樣任務(wù),其它功能絕大部分在后臺的無(wú)限循環(huán)內完成。隨著(zhù)微控制器集成度的增加和應用要求的復雜化,前后臺系統在大量的片內外設的使用和管理、任務(wù)實(shí)時(shí)性保證、程序可靠性和可移植性等方面顯得力不從心。RTOS可以有效的解決上述諸多問(wèn)題,它體現了一種新的程序設計思想和開(kāi)放的框架,降低了程序的復雜度。
目前許多廠(chǎng)商提供的RTOS對中小應用系統成本影響較大,單片機、DSP及有限的硬件資源也難于支撐整個(gè)系統的正常運行,且保證精確、頻繁的等間隔交流采樣也較困難?;谝陨峡紤],為了在保證等間隔采樣的同時(shí)確保系統中計算、測頻、保護、控制輸出、數據存儲、通訊、按鍵、液晶顯示、實(shí)時(shí)時(shí)鐘等諸多任務(wù)的實(shí)時(shí)性和降低軟件設計的難度,本文提出了以采樣間隔為內核粒度的實(shí)時(shí)多任務(wù)微內核軟件設計方法,并在TMS320LF2407A上實(shí)現了內核的代碼級設計,代碼約1K字,關(guān)鍵部分用匯編語(yǔ)言實(shí)現。
基本硬件配置
實(shí)時(shí)微內核采用了RTOS的任務(wù)調度方法,把CPU時(shí)間分成若干時(shí)間片,并根據某種調度算法把時(shí)間片分配給各個(gè)任務(wù)。微機型電力設備大都具備繁重的測量和運算任務(wù),且響應時(shí)間非常重要,是典型的實(shí)時(shí)工業(yè)控制系統,因此采用搶先式微內核結構。
在搶先式內核的多任務(wù)處理中,用中斷來(lái)實(shí)現任務(wù)環(huán)境(context)切換是一種較理想的機制。圖1所示的是一個(gè)基于搶先式多任務(wù)內核的基本硬件配置。
定時(shí)器周期性地產(chǎn)生中斷,強制CPU把控制權交給內核,周期中斷服務(wù)程序調用任務(wù)調度函數,并切換至處在就緒態(tài)的最高優(yōu)先級任務(wù)。定時(shí)器周期性中斷產(chǎn)生時(shí)鐘節拍(Clock Tick) 或內核粒度,時(shí)鐘節拍是任務(wù)定時(shí)、任務(wù)延時(shí)和任務(wù)超時(shí)判斷的時(shí)鐘源,也是多任務(wù)調度實(shí)現和系統正常運行的基礎。
為了嚴格滿(mǎn)足交流采樣等間隔的要求,可利用DSP片內外設的特點(diǎn)對基本硬件配置做圖2所示的改進(jìn)。詳細過(guò)程為:定時(shí)器GP Timer1周期性連續增計數,周期性的觸發(fā)片內A/D轉換,并在轉換結束產(chǎn)生中斷。由于A(yíng)/D轉換結束中斷對等間隔要求不高,而等間隔采樣通過(guò)上述方式已嚴格保證,因此滿(mǎn)足微機型電力設備測量和運算的基本要求。
內核設計與實(shí)現
每個(gè)任務(wù)都是一個(gè)無(wú)限循環(huán),它們具有各自獨立的堆??臻g和不同的靜態(tài)優(yōu)先級。在實(shí)時(shí)微內核根據任務(wù)的狀態(tài)進(jìn)行任務(wù)調度時(shí),任務(wù)狀態(tài)也相應改變。因此,可用OSTSW和OSTID兩個(gè)unsigned int變量來(lái)標識任務(wù)狀態(tài),并采用位影像法表示,每一位對應一個(gè)任務(wù)的狀態(tài):掛起、就緒或運行。任務(wù)狀態(tài)字OSTSW可理解為任務(wù)就緒表,標識任務(wù)的就緒與否,其中高位表示高優(yōu)先級任務(wù),運行任務(wù)號OSTID則標識當前運行的任務(wù)。為了提高系統運行的穩定性和可移植性,任務(wù)堆棧及任務(wù)狀態(tài)字等內核相關(guān)的數據區都放在DSP內部RAM中??紤]到DSP片內的RAM容量和實(shí)際應用要求,系統最多可容納8個(gè)任務(wù)。
任務(wù)調度
內核進(jìn)行任務(wù)調度時(shí)總是把CPU時(shí)間分配給就緒態(tài)任務(wù)中優(yōu)先級最高的任務(wù),調度過(guò)程如下:先將被掛起任務(wù)的微處理器寄存器壓棧,然后找出處在就緒態(tài)的最高優(yōu)先級任務(wù),并對任務(wù)狀態(tài)作相應改變,最后把它的寄存器值從棧中恢復到寄存器中并返回,實(shí)現任務(wù)的切換。任務(wù)調度分中斷級調度和任務(wù)級調度兩種,前者在周期性中斷結束時(shí)調用,后者則在每個(gè)任務(wù)執行完成時(shí)調用。事實(shí)上,在中斷級任務(wù)調度中,任務(wù)調度所做的僅僅是改變了恢復時(shí)的堆棧指針,而任務(wù)級調度則人為模仿了一次中斷,因此兩者調度部分基本相同,代碼也是共用的。
由于等間隔采樣是系統通過(guò)中斷方式實(shí)現的,因此中斷級任務(wù)調度僅增加了找出就緒態(tài)中最高優(yōu)先級任務(wù)的執行代碼。下面給出內核關(guān)鍵部分即任務(wù)調度的匯編實(shí)現。
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
;設置優(yōu)先級最高的就緒態(tài)
;任務(wù)的任務(wù)號為當前任務(wù)號
LAR AR2,
#_OSStkPtr
MAR *0+
SAR AR1,* ;保存被切換任務(wù)的棧頂指針
MAR *0-
LAR AR0,_OSTID
MAR *0+
LAR AR1,* ;裝載待運行任務(wù)的棧頂指針
NSwR: B I$$REST,*,AR1 ;任務(wù)環(huán)境恢復
任務(wù)定時(shí)和延時(shí)
當任務(wù)延時(shí)精確度要求較高或延時(shí)要求比較固定時(shí),可采用任務(wù)定時(shí)的方法,由內核為任務(wù)直接提供延時(shí)服務(wù);而當任務(wù)延時(shí)要求低或者延時(shí)要求比較靈活時(shí),可由任務(wù)提出延時(shí)申請,再由內核處理延時(shí)操作。區分任務(wù)定時(shí)和延時(shí)將進(jìn)一步提高內核的效率和實(shí)時(shí)性。
任務(wù)通訊
有多種方法可以保護任務(wù)之間共享數據和提供任務(wù)之間的通訊,但根據實(shí)際需要,僅設若干標志位作為任務(wù)信號,實(shí)現任務(wù)間的同步與互斥、標志事件發(fā)生與否等等。為了簡(jiǎn)化設計,讓系統易于把握,盡量將關(guān)系密切的任務(wù)合并,從而盡可能減少任務(wù)間的通訊。
交流采樣與內核粒度
由于微機型電力設備中交流采樣是設備功能實(shí)現的基礎,因此實(shí)時(shí)微內核的設計要以確保等間隔采樣為前提。通過(guò)圖2所示的方法,采樣等間隔得到有效保證。其中,A/D轉換結束中斷取代定時(shí)器周期性中斷,提供給實(shí)時(shí)微內核作為周期性中斷實(shí)現時(shí)鐘節拍。當某次時(shí)鐘節拍被延遲,并不會(huì )影響到下一個(gè)時(shí)鐘節拍的到來(lái),因而整體上仍滿(mǎn)足系統要求。周期性A/D轉換結束中斷處理程序內,系統要完成A/D轉換結果處理以及多任務(wù)調度等系統調用。
在這里,內核粒度與交流采樣的時(shí)間間隔對應,而周波(工頻周期為20ms)采樣點(diǎn)數一般為幾十至幾百個(gè)點(diǎn),故內核粒度為幾十ms至幾百ms不等。但內核粒度越小,加在系統上的開(kāi)銷(xiāo)就越大,對存儲空間也有更高的要求。mC/OS-II 內核粒度要求在10ms~200ms之間。但在某些要求較高的場(chǎng)合,大多數任務(wù)需要在周波內精確控制,且延時(shí)精度要求到ms級甚至更高,mC/OS-II難以滿(mǎn)足要求。而使用采樣間隔作為內核粒度,并對內核進(jìn)行簡(jiǎn)化設計,可滿(mǎn)足大多數交流采樣系統的應用要求。
微內核的設計實(shí)例
圖3為中壓微機型繼電保護裝置的結構框圖。為了突出微內核結構使編程模塊化、簡(jiǎn)單化的優(yōu)點(diǎn),作為系統基礎部分的交流采樣在實(shí)例中不再列出,僅以總線(xiàn)式按鍵和液晶實(shí)現人機交互的一個(gè)簡(jiǎn)單例子來(lái)說(shuō)明。
液晶屏上一般都要求顯示實(shí)時(shí)時(shí)鐘,為了秒位走時(shí)均勻,需要每隔1s重新繪制屏幕。當有按鍵操作時(shí),則要求立即更新屏幕,否則產(chǎn)生延遲,反應顯得遲緩,影響交互效果。系統每隔20ms檢測是否有鍵按下,檢測到按鍵時(shí)讓按鍵響應任務(wù)就緒。按鍵響應任務(wù)處理完按鍵事件后,向內核提出恢復顯示任務(wù)請求,然后掛起。當沒(méi)有更高優(yōu)先級就緒態(tài)任務(wù)時(shí),執行顯示任務(wù)。在沒(méi)有按鍵的情況下,顯示任務(wù)執行完當前操作后向內核提出延時(shí)服務(wù)申請,1s延時(shí)結束后任務(wù)重新運行,自動(dòng)刷新屏幕。實(shí)現的示意性代碼如下:
void Task_Display(void)
file://顯示任務(wù),6號任務(wù)
{ while (1)
{ if(EnableShow)
ShowWindow(); file://顯示單窗口
OSTimeDly(1600); file://延時(shí)1s
}
}
void Task_KeyEvent(void) file://按鍵響應任務(wù),5號任務(wù)
{ while(1)
{ KeyHandle(); file://按鍵處理
OSTimeDly
Resume(6); file://顯示更新,撤銷(xiāo)顯示任務(wù)的延時(shí)
OSTaskSuspend(5); file://鍵盤(pán)響應任務(wù)掛起
}
}
void OSTime20msHook(void) file://20ms定時(shí)的Hook
{ if(KeyPressed&&EnableHandle) file://如果有鍵按下并允許處理
OSTSW|=OSTSM5; file://讓按鍵響應任務(wù)就緒
}
結語(yǔ)
本文提出了基于交流采樣的實(shí)時(shí)微內核的設計方法,并在基于DSP的中壓繼電保護、絕緣在線(xiàn)檢測等多個(gè)系統中得到實(shí)際應用。內核設計充分考慮了微機型電力設備信號測量和實(shí)時(shí)性要求以及資源有限的特點(diǎn),吸收了諸多商用RTOS的優(yōu)點(diǎn),因而能夠滿(mǎn)足大部分交流采樣系統的要求。同時(shí),DSP在電力設備中的廣泛使用使得上述設計方法具有一定的通用性,可以作為基于DSP的微機型電力設備的嵌入式軟件開(kāi)發(fā)平臺?!?/P>
參考文獻
1孫玉芳.嵌入式計算設計原理.北京:機械工業(yè)出版社,2002.2
2袁勤勇.嵌入式系統構件.北京:機械工業(yè)出版社,2002.2
3 朱一凡.面向關(guān)鍵任務(wù)實(shí)時(shí)嵌入式操作系統設計技術(shù)研究.儀器儀表標準化與計量, 2002.6
評論