ARM9高速實時多任務數(shù)據(jù)采集系統(tǒng)的算法優(yōu)化
摘要: 針對高速實時多任務數(shù)據(jù)采集系統(tǒng)的高速性、實時性、并發(fā)性、安全性要求,提出了基于ARM9和μC/OSII操作系統(tǒng)的多頻道數(shù)據(jù)采集系統(tǒng)的智能化設計方案。實現(xiàn)了任務優(yōu)先級動態(tài)調(diào)度、動態(tài)設置、系統(tǒng)工作參數(shù)動態(tài)設定。針對低速外圍設備進行了系統(tǒng)工作時間優(yōu)化,對軟件關鍵區(qū)進行了必要的保護,提高了系統(tǒng)安全性,改善了內(nèi)部任務同步性,保障了各個通道的實時并發(fā)性。對數(shù)據(jù)采集系統(tǒng)各個通道的極限工作頻率進行了實驗室測定,對相關設計電路進行了簡要說明。
關鍵詞: ARM9;μC/OSII;優(yōu)先級動態(tài)調(diào)度;關鍵區(qū)
Intelligent High?speed Real?time Multi?tasking Data Acquisition System Algorithm Based on ARM9
SunYongfang1,Qin Xu2,Wang Xiaosong3(1. Shaanxi Defense Industry Professional Technology Institute, Xi,an 710300, China; 2. Northwestern Polytechnical University; 3. Baoji Fenghuo Communication Group Co., Ltd.)
Abstract: This paper introduces an intelligent design for multi?channel real?time data acquisition system based on ARM9(S3C2440A) and μC/OS?II Operating system, meeting the requirements of high?speed, real?time and simultaneity. Task priority dynamic scheduling and system parameter dynamic settings are realized. System time optimization is made for low?speed peripheral devices and necessary protection for critical sections of the software is given. The limit frequency of data acquisition system in the laboratory is measured and a brief description of the design circuit is given.
Key words: ARM9;μC/OS?II;priority dynamic scheduling;critical sections
引言
隨著IT技術、電子技術、通信技術、以及自動控制技術的飛速發(fā)展,對工業(yè)現(xiàn)場數(shù)據(jù)的高速實時采集就成為電子產(chǎn)品和工業(yè)控制技術發(fā)展不可避免的一個環(huán)節(jié)。
本文針對高速實時多任務數(shù)據(jù)采集中的多任務實現(xiàn)算法以及實時性、實效性和高速性的要求,提出了基于ARM9和μC/OSII操作系統(tǒng)的智能化設計方案,實現(xiàn)了任務優(yōu)先級動態(tài)調(diào)度、系統(tǒng)工作參數(shù)動態(tài)設定、系統(tǒng)內(nèi)部軟件智能化設計,針對低速外圍設備進行了系統(tǒng)優(yōu)化,并提高了系統(tǒng)可靠性改善了內(nèi)部任務同步性。
1 整體電路設計
整個采集系統(tǒng)的硬件電路如圖1所示。首先利用多路調(diào)制電路對12路信號進行調(diào)制,這部分包含相應的信號轉換、抗干擾、以及初步的信號處理等,使得各路采集信號能夠達到ARM9內(nèi)核對信號采集的要求。經(jīng)多路選擇和ADC采樣后進入ARM9內(nèi)核。為了實現(xiàn)對整個系統(tǒng)工作狀態(tài)的實時監(jiān)視、實時控制和實時調(diào)節(jié),設置了上位機監(jiān)視器和現(xiàn)場顯示觸摸屏,將用戶所有要求顯示的信息在上位機顯示輸出或者在現(xiàn)場LCD同步顯示輸出。采樣按照采樣頻段分為高頻段(300~200 ksps)、中頻段(200~100 ksps)、和低頻段(小于100 ksps)3個頻段,每個頻段由4個外部采樣通道組成。ARM9內(nèi)核與上位機的通信利用UART和RS232轉換電路來實現(xiàn)。系統(tǒng)工作電源由統(tǒng)一的電源供給,在實現(xiàn)電壓轉換后對PC機和ARM9內(nèi)核以及相應的工作電路提供電源支持。
圖1 數(shù)據(jù)采集系統(tǒng)硬件電路
2 系統(tǒng)總體軟件設計思路
系統(tǒng)的軟件設計原理如圖2所示。12路采集信號經(jīng)調(diào)制電路多路選擇和ADC采樣后進入各個采集任務內(nèi)部通道。每一路采集通道都設計獨立的數(shù)據(jù)采集、數(shù)據(jù)存儲、數(shù)據(jù)處理以及數(shù)據(jù)提交任務。也就是說,每一路外部采集通道都對應一個獨立的內(nèi)部數(shù)據(jù)通道,而且本通道數(shù)據(jù)只在本通道內(nèi)進行存儲、處理和傳遞。各個內(nèi)部數(shù)據(jù)通道任務之間只有在系統(tǒng)調(diào)度時執(zhí)行時間上的先后關系、優(yōu)先級關系,沒有數(shù)據(jù)耦合關系。
圖2 系統(tǒng)軟件設計原理圖
命令掃描部分由獨立的上位機和下位機掃描任務完成對上位機監(jiān)視器和下位機觸摸屏的實時監(jiān)控,一旦檢測到用戶命令,立即將其發(fā)送給命令解析和處理任務,由該任務對用戶命令進行分析處理。命令處理完后將提取的結果發(fā)送給用戶要操作的采樣通道,使之按照用戶要求運行。
各個頻段的各個通道采集任務均設置兩個數(shù)據(jù)緩沖區(qū)。雙數(shù)據(jù)緩沖區(qū)為采樣任務順利存儲提供了雙重保證,使得采樣工作一旦結束就有可用緩沖區(qū),就可立即將數(shù)據(jù)存儲而后進行下一次采集。也使得后續(xù)的數(shù)據(jù)處理任務減少數(shù)據(jù)等待時間,能迅速得到當前采樣通道需要處理的數(shù)據(jù),并在最短的時間內(nèi)處理發(fā)送給下一級任務。
采樣、數(shù)據(jù)顯示、命令掃描都涉及外圍設備,是整個系統(tǒng)所有任務里面運行速度最慢的,針對采樣任務設置雙數(shù)據(jù)緩沖區(qū)可以很大幅度地改善由于采樣速度慢而造成的系統(tǒng)速率下降問題,顯示和命令掃描部分的優(yōu)化設計將在下文中詳細說明。
3 內(nèi)部軟件調(diào)度算法
系統(tǒng)內(nèi)部各個頻段命令如圖3所示。命令掃描函數(shù)捕捉到用戶命令后,對用戶命令進行驗證、分析、提取,而后將提取結果以廣播的方式發(fā)送至各個頻段的命令等待隊列。該隊列如得到新的命令,將用戶命令發(fā)送給本隊列下轄的各個采樣任務函數(shù),用戶命令將立即得到執(zhí)行,包括通道切換、變換采樣周期、改變當前任務優(yōu)先級、顯示特定通道數(shù)據(jù)等。如沒有得到新的命令,等待超時后采樣任務按照原有方式繼續(xù)工作。這也是一種智能化設計,以很簡單的方式實現(xiàn)了按照用戶命令隨時對任何通道的查看、監(jiān)督、操作、工作狀態(tài)切換、通道切換、由單通道到所有通道并行實時采集切換等所有功能的任意切換。
圖3 各個頻段內(nèi)部命令
3.1 任務優(yōu)先級設置及采樣任務優(yōu)先級動態(tài)調(diào)度
μC/OSII操作系統(tǒng)是基于優(yōu)先級的搶占式操作系統(tǒng),所有任務必須有各自獨立且唯一的優(yōu)先級[1]。命令掃描和數(shù)據(jù)顯示分別設置為最高優(yōu)先級和最低優(yōu)先級。掃描函數(shù)的最高優(yōu)先級可以確保隨時對用戶命令進行響應,而顯示任務由于其運行速速慢,將其設置為最低優(yōu)先級。只要系統(tǒng)設計合理,適當避免低優(yōu)先級任務的饑餓現(xiàn)象,即可實現(xiàn)將用戶有效信息顯示輸出。
內(nèi)部優(yōu)先級設置規(guī)則是,低頻段、中頻段、高頻段3個頻段的任務之間優(yōu)先級依次遞減。低頻段的采樣周期明顯比高頻段長,在低頻段數(shù)據(jù)采集的空閑時間里系統(tǒng)可以順利地將CPU使用權切換給其他任務,使其他任務得到CPU使用權并執(zhí)行。每個頻段內(nèi)部的各個任務的優(yōu)先級從采樣到數(shù)據(jù)存儲、數(shù)據(jù)處理、數(shù)據(jù)提交依次遞減。
為了使得整個系統(tǒng)實現(xiàn)優(yōu)先級動態(tài)調(diào)度也可以修改其他采樣參數(shù),在軟件設計時將所有頻段采樣任務的優(yōu)先級、采樣周期以全局變量的形式在進入操作系統(tǒng)之前進行設置,并將其定義為volatile格式分配獨立的變量存儲地址。而后設立獨立的掃描任務,來專門完成這些參數(shù)的判斷、修改、存儲和動態(tài)更新。這樣便使得系統(tǒng)除了可以按照根據(jù)采樣周期設計的初始化優(yōu)先級和初始化參數(shù)運行外,還可以依據(jù)用戶自身需要對各個頻段、各個通道的采樣任務優(yōu)先級以及采樣頻率進行設置和修改。修改完并確認后,修改任務會保存、更新當前系統(tǒng)工作參數(shù)并退出操作系統(tǒng),而后重新啟動并初始化,整個采集系統(tǒng)將按照全新的狀態(tài)開始工作。當然,在這里用戶優(yōu)先級和采樣周期設置是受限的,必須符合上文提及的優(yōu)先級規(guī)則及各個頻段對采樣周期的要求。
3.2 任務時限設置
為了對整個系統(tǒng)的時間調(diào)度進行優(yōu)化,首先說明幾個內(nèi)部工作時間。i386體系和Linux2.5內(nèi)核中操作系統(tǒng)節(jié)拍率都設置為1000 Hz[2]。在這里將μC/OSII操作系統(tǒng)調(diào)度時間OS_TICKS_PER_SEC也設置為1000,也就是說操作系統(tǒng)的任務調(diào)度以ms為單位。ARM9內(nèi)核CPU工作頻率設置為400 MHz,即CPU機械周期以ns為單位。外設包括上位機命令掃描和上位機、下位機顯示部分工作都以s為單位。μC/OSII系統(tǒng)中任務切換、調(diào)度及延時都以系統(tǒng)節(jié)拍率為單位,而內(nèi)部代碼的運行是以機械周期為單位。內(nèi)部任務時限可以以節(jié)拍律為單位,也可以以實時時間為基準,獲得一個絕對時間差。
單個采樣任務通道內(nèi)部只有采樣任務需要時限設置。為了達到智能化,用消息隊列的等待延時替代了采樣任務時限,而該延時便是本通道的采樣周期。其他的后續(xù)任務包括內(nèi)存開辟、數(shù)據(jù)處理、數(shù)據(jù)發(fā)送,都依次等待上一級任務消息,受上一級任務鉗制不設置任務時限。顯示任務時限按ms設置為絕對時間差。
3.3 針對外設的時間優(yōu)化
針對命令掃描和解析任務,將其設置為中斷方式,在檢測到有用戶命令輸入時發(fā)生中斷,在中斷里對用戶命令進行解析、分析、提取和處理。在中斷下半部分對命令進行廣播式發(fā)布,發(fā)布到各個采樣任務函數(shù)使其立即刷新執(zhí)行。因為用戶工作方式改變,命令刷新頻率并不高而且任務量不大,所以完全可以利用中斷的快速處理來實現(xiàn)這種功能。
圖4 顯示任務工作原理圖
在處理完命令掃描和采樣任務之后,影響整個系統(tǒng)性能的就剩下上位機和下位機顯示部分了。顯示任務工作原理如圖4所示,利用μC/OSII系統(tǒng)提供的消息隊列對顯示部分進行改善。分別建立兩個長度為16的消息隊列和內(nèi)存塊鏈表,數(shù)據(jù)提交任務從空閑內(nèi)存池中得到可用內(nèi)存塊之后將本任務要顯示的數(shù)據(jù)存入該內(nèi)存塊,此時該內(nèi)存就變成了帶有數(shù)據(jù)的待顯示數(shù)據(jù)塊。而后將該內(nèi)存塊的地址以消息的形式注冊在顯示消息隊列上。消息隊列的長度設置為16,雖然這里只有12個任務會發(fā)送消息給消息隊列,但在實時多任務程序中,各個任務的運行是隨機的,消息隊列在一段時間內(nèi)得到的消息個數(shù)是個不定值,所以留出4個空位作為裕度。而且設置初始值為16的計數(shù)信號量來保護消息隊列,數(shù)據(jù)提交任務在提交數(shù)據(jù)之前先檢測該信號量,如該信號量有效就可以發(fā)送信號,如信號量無效則需等待,直到有可用信號位時方可將信號發(fā)出。在外部硬件操作端,由外部發(fā)送任務將消息隊列中的消息按照固定速率發(fā)送到外部信號線上。
這樣設計,消息隊列就相當于一個緩沖區(qū),使得所有提交任務都可以向這個緩沖區(qū)發(fā)送待顯示數(shù)據(jù),有效地避免了多個任務爭用一個外圍設備而引起的死鎖、競爭冒險等問題。同時減少了任務數(shù)量,減少了任務切換的次數(shù),充分利用了系統(tǒng)時間,提高了系統(tǒng)性能。
3.4 關鍵區(qū)保護
多任務設計中每個任務在任何時刻都可能被其他任務打斷,必須充分考慮代碼的安全性、可重入性、可靠性、饑餓、互鎖、死鎖等情況。[3]
為了避免上述情況,任務間消息發(fā)送和傳遞時以及在數(shù)據(jù)采樣時對相應函數(shù)體進行關鍵區(qū)保護,在這些函數(shù)運行的時候禁止中斷和任務調(diào)度,以保證數(shù)據(jù)傳遞和數(shù)據(jù)采樣的絕對正確性和系統(tǒng)運行的絕對安全性。
4 極限頻率測定及總結
上位機超級終端接收到的極限頻率測試結果如圖5所示。
圖5 極限頻率測量結果
分別測試了高頻段、中頻段和低頻段的極限頻率,結果在CPU使用率80%~90%的情況下測定。該系統(tǒng)成功實現(xiàn)了智能化設計和優(yōu)先級動態(tài)調(diào)度、系統(tǒng)參數(shù)動態(tài)設置等功能,達到了設計指標。
參考文獻
[1] Labrosse Jean J.嵌入式實時操作系統(tǒng)μC/OSII [M].邵貝貝,等譯.北京航空航天大學出版社,2007.
[2] Love Robert.Linux內(nèi)核設計與實現(xiàn)[M].陳莉君,等譯.北京:機械工業(yè)出版社,2010.
[3] Labrosse Jean J.μC/OSIII—The RealTime Kernel,200909.