新聞中心

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

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

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

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

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

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

內(nèi)核設(shè)計(jì)與實(shí)現(xiàn)
每個(gè)任務(wù)都是一個(gè)無(wú)限循環(huán),它們具有各自獨(dú)立的堆棧空間和不同的靜態(tài)優(yōu)先級(jí)。在實(shí)時(shí)微內(nèi)核根據(jù)任務(wù)的狀態(tài)進(jìn)行任務(wù)調(diào)度時(shí),任務(wù)狀態(tài)也相應(yīng)改變。因此,可用OSTSW和OSTID兩個(gè)unsigned int變量來(lái)標(biāo)識(shí)任務(wù)狀態(tài),并采用位影像法表示,每一位對(duì)應(yīng)一個(gè)任務(wù)的狀態(tài):掛起、就緒或運(yùn)行。任務(wù)狀態(tài)字OSTSW可理解為任務(wù)就緒表,標(biāo)識(shí)任務(wù)的就緒與否,其中高位表示高優(yōu)先級(jí)任務(wù),運(yùn)行任務(wù)號(hào)OSTID則標(biāo)識(shí)當(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個(gè)任務(wù)。
任務(wù)調(diào)度
內(nèi)核進(jìn)行任務(wù)調(diào)度時(shí)總是把CPU時(shí)間分配給就緒態(tài)任務(wù)中優(yōu)先級(jí)最高的任務(wù),調(diào)度過(guò)程如下:先將被掛起任務(wù)的微處理器寄存器壓棧,然后找出處在就緒態(tài)的最高優(yōu)先級(jí)任務(wù),并對(duì)任務(wù)狀態(tài)作相應(yīng)改變,最后把它的寄存器值從棧中恢復(fù)到寄存器中并返回,實(shí)現(xiàn)任務(wù)的切換。任務(wù)調(diào)度分中斷級(jí)調(diào)度和任務(wù)級(jí)調(diào)度兩種,前者在周期性中斷結(jié)束時(shí)調(diào)用,后者則在每個(gè)任務(wù)執(zhí)行完成時(shí)調(diào)用。事實(shí)上,在中斷級(jí)任務(wù)調(diào)度中,任務(wù)調(diào)度所做的僅僅是改變了恢復(fù)時(shí)的堆棧指針,而任務(wù)級(jí)調(diào)度則人為模仿了一次中斷,因此兩者調(diào)度部分基本相同,代碼也是共用的。
由于等間隔采樣是系統(tǒng)通過(guò)中斷方式實(shí)現(xiàn)的,因此中斷級(jí)任務(wù)調(diào)度僅增加了找出就緒態(tài)中最高優(yōu)先級(jí)任務(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)先級(jí)最高的就緒態(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)先級(jí)最高的就緒態(tài)
;任務(wù)的任務(wù)號(hào)為當(dāng)前任務(wù)號(hào)
  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ù)定時(shí)和延時(shí)
當(dāng)任務(wù)延時(shí)精確度要求較高或延時(shí)要求比較固定時(shí),可采用任務(wù)定時(shí)的方法,由內(nèi)核為任務(wù)直接提供延時(shí)服務(wù);而當(dāng)任務(wù)延時(shí)要求低或者延時(shí)要求比較靈活時(shí),可由任務(wù)提出延時(shí)申請(qǐng),再由內(nèi)核處理延時(shí)操作。區(qū)分任務(wù)定時(shí)和延時(shí)將進(jìn)一步提高內(nèi)核的效率和實(shí)時(shí)性。
任務(wù)通訊
有多種方法可以保護(hù)任務(wù)之間共享數(shù)據(jù)和提供任務(wù)之間的通訊,但根據(jù)實(shí)際需要,僅設(shè)若干標(biāo)志位作為任務(wù)信號(hào),實(shí)現(xiàn)任務(wù)間的同步與互斥、標(biāo)志事件發(fā)生與否等等。為了簡(jiǎn)化設(shè)計(jì),讓系統(tǒng)易于把握,盡量將關(guān)系密切的任務(wù)合并,從而盡可能減少任務(wù)間的通訊。

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

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

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

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



評(píng)論


相關(guān)推薦

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

關(guān)閉