基于A(yíng)RM9和μC/OSII的多頻道數據采集系統設計
各個(gè)頻段的各個(gè)通道采集任務(wù)均設置兩個(gè)數據緩沖區。雙數據緩沖區為采樣任務(wù)順利存儲提供了雙重保證,使得采樣工作一旦結束就有可用緩沖區,就可立即將數據存儲而后進(jìn)行下一次采集。也使得后續的數據處理任務(wù)減少數據等待時(shí)間,能迅速得到當前采樣通道需要處理的數據,并在最短的時(shí)間內處理發(fā)送給下一級任務(wù)。
采樣、數據顯示、命令掃描都涉及外圍設備,是整個(gè)系統所有任務(wù)里面運行速度最慢的,針對采樣任務(wù)設置雙數據緩沖區可以很大幅度地改善由于采樣速度慢而造成的系統速率下降問(wèn)題,顯示和命令掃描部分的優(yōu)化設計將在下文中詳細說(shuō)明。
3 內部軟件調度算法
系統內部各個(gè)頻段命令如圖3所示。命令掃描函數捕捉到用戶(hù)命令后,對用戶(hù)命令進(jìn)行驗證、分析、提取,而后將提取結果以廣播的方式發(fā)送至各個(gè)頻段的命令等待隊列。該隊列如得到新的命令,將用戶(hù)命令發(fā)送給本隊列下轄的各個(gè)采樣任務(wù)函數,用戶(hù)命令將立即得到執行,包括通道切換、變換采樣周期、改變當前任務(wù)優(yōu)先級、顯示特定通道數據等。如沒(méi)有得到新的命令,等待超時(shí)后采樣任務(wù)按照原有方式繼續工作。這也是一種智能化設計,以很簡(jiǎn)單的方式實(shí)現了按照用戶(hù)命令隨時(shí)對任何通道的查看、監督、操作、工作狀態(tài)切換、通道切換、由單通道到所有通道并行實(shí)時(shí)采集切換等所有功能的任意切換。
圖3 各個(gè)頻段內部命令
3.1 任務(wù)優(yōu)先級設置及采樣任務(wù)優(yōu)先級動(dòng)態(tài)調度
μC/OSII操作系統是基于優(yōu)先級的搶占式操作系統,所有任務(wù)必須有各自獨立且唯一的優(yōu)先級[1]。命令掃描和數據顯示分別設置為最高優(yōu)先級和最低優(yōu)先級。掃描函數的最高優(yōu)先級可以確保隨時(shí)對用戶(hù)命令進(jìn)行響應,而顯示任務(wù)由于其運行速速慢,將其設置為最低優(yōu)先級。只要系統設計合理,適當避免低優(yōu)先級任務(wù)的饑餓現象,即可實(shí)現將用戶(hù)有效信息顯示輸出。
內部?jì)?yōu)先級設置規則是,低頻段、中頻段、高頻段3個(gè)頻段的任務(wù)之間優(yōu)先級依次遞減。低頻段的采樣周期明顯比高頻段長(cháng),在低頻段數據采集的空閑時(shí)間里系統可以順利地將CPU使用權切換給其他任務(wù),使其他任務(wù)得到CPU使用權并執行。每個(gè)頻段內部的各個(gè)任務(wù)的優(yōu)先級從采樣到數據存儲、數據處理、數據提交依次遞減。
為了使得整個(gè)系統實(shí)現優(yōu)先級動(dòng)態(tài)調度也可以修改其他采樣參數,在軟件設計時(shí)將所有頻段采樣任務(wù)的優(yōu)先級、采樣周期以全局變量的形式在進(jìn)入操作系統之前進(jìn)行設置,并將其定義為volatile格式分配獨立的變量存儲地址。而后設立獨立的掃描任務(wù),來(lái)專(zhuān)門(mén)完成這些參數的判斷、修改、存儲和動(dòng)態(tài)更新。這樣便使得系統除了可以按照根據采樣周期設計的初始化優(yōu)先級和初始化參數運行外,還可以依據用戶(hù)自身需要對各個(gè)頻段、各個(gè)通道的采樣任務(wù)優(yōu)先級以及采樣頻率進(jìn)行設置和修改。修改完并確認后,修改任務(wù)會(huì )保存、更新當前系統工作參數并退出操作系統,而后重新啟動(dòng)并初始化,整個(gè)采集系統將按照全新的狀態(tài)開(kāi)始工作。當然,在這里用戶(hù)優(yōu)先級和采樣周期設置是受限的,必須符合上文提及的優(yōu)先級規則及各個(gè)頻段對采樣周期的要求。
3.2 任務(wù)時(shí)限設置
為了對整個(gè)系統的時(shí)間調度進(jìn)行優(yōu)化,首先說(shuō)明幾個(gè)內部工作時(shí)間。i386體系和Linux2.5內核中操作系統節拍率都設置為1000 Hz[2]。在這里將μC/OSII操作系統調度時(shí)間OS_TICKS_PER_SEC也設置為1000,也就是說(shuō)操作系統的任務(wù)調度以ms為單位。ARM9內核CPU工作頻率設置為400 MHz,即CPU機械周期以ns為單位。外設包括上位機命令掃描和上位機、下位機顯示部分工作都以s為單位。μC/OSII系統中任務(wù)切換、調度及延時(shí)都以系統節拍率為單位,而內部代碼的運行是以機械周期為單位。內部任務(wù)時(shí)限可以以節拍律為單位,也可以以實(shí)時(shí)時(shí)間為基準,獲得一個(gè)絕對時(shí)間差。
單個(gè)采樣任務(wù)通道內部只有采樣任務(wù)需要時(shí)限設置。為了達到智能化,用消息隊列的等待延時(shí)替代了采樣任務(wù)時(shí)限,而該延時(shí)便是本通道的采樣周期。其他的后續任務(wù)包括內存開(kāi)辟、數據處理、數據發(fā)送,都依次等待上一級任務(wù)消息,受上一級任務(wù)鉗制不設置任務(wù)時(shí)限。顯示任務(wù)時(shí)限按ms設置為絕對時(shí)間差。
評論