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