500兆/秒高速A/D系統(tǒng)的實現(xiàn)
4 Windows95下軟件設(shè)計的實時性考慮
本系統(tǒng)的軟件運行于Window 95平臺之上的。設(shè)計的指標要求每秒能計時200次的操作,每次采集512點,既要求系統(tǒng)在5毫秒內(nèi)將A/D部分采到的512Bytes傳到計算機并存儲在硬盤上。這個要求對于PCI接口來說是非常低的,實測結(jié)果顯示系統(tǒng)的平均反應(yīng)時間遠小于這個時間。但是結(jié)果顯示系統(tǒng)的平均反應(yīng)時間遠小于這個時間。但是我們發(fā)現(xiàn)系統(tǒng)每處理10 000次響應(yīng)總會有一到兩次的反應(yīng)時間特別慢,超過5毫秒有時甚至達到40毫秒。而我們的系統(tǒng)要處理的是一個連續(xù)有序的事件,要求對每一個事件都必須做反應(yīng),否則后面的事件就會被誤處理。經(jīng)過分析表明,這種現(xiàn)象完全是由于Windows95操作系統(tǒng)本身的原因造成的。Windows95是一種多任務(wù)的平臺,它的核心運行在優(yōu)先級較高的Ring0上,普通的應(yīng)用程序則運行在優(yōu)先級低的Ring3上,應(yīng)用程序靠內(nèi)核的調(diào)度分時運行。Windows95是專門為PC機設(shè)計的,主要的用途是處理人們的娛樂以及辦公自動化等事務(wù),考慮的是使用起來如何方便,并沒有對工業(yè)控制方面的實時性加以考慮,所以外層的應(yīng)用程序有可能會隨時被內(nèi)核打斷,根本沒有什么時間的保障。要想準確無誤地處理對時間要求比較荷刻的事件,必須把處理程序放在運行于內(nèi)核級的中斷服務(wù)程序中去執(zhí)行,這樣除非有更高級的中斷否則程序就不會被打斷。在編寫中斷服務(wù)程序處理函數(shù)時我們采用了Windriver提供的Kernal PlugIn功能,將自己編寫的中斷服務(wù)程序掛接在系統(tǒng)內(nèi)核上。用此種方法可以實現(xiàn)每秒10 000次的斷處理而不丟失。我們在編寫中斷服務(wù)程序時借用了硬件設(shè)計中FIFO的思想,先在內(nèi)存中開辟一塊共域作緩沖區(qū)分別設(shè)置讀指針和寫指針,硬件觸發(fā)中斷后服務(wù)程序先從A/D讀取數(shù)據(jù)進行處理,然后發(fā)了指令控制A/D等待下一次事件,接著向上層應(yīng)用軟件發(fā)出消息請求上層應(yīng)用程序從緩沖區(qū)讀取數(shù)據(jù)存盤和顯示。中斷服務(wù)程序發(fā)出的消息有可能不會馬上被上層應(yīng)用程序響應(yīng),但只要緩沖區(qū)足夠大,每一次事件產(chǎn)生的數(shù)據(jù)就不會丟失。整個程序的流程圖如圖8所示。
本數(shù)據(jù)采集系統(tǒng)成成功地在上海某科研單位得到應(yīng)用。雖然設(shè)計初衷是為了滿足某用戶的需求,但它容易擴展成通用的A/D采樣系統(tǒng)應(yīng)用于相關(guān)的各個領(lǐng)域。
評論