<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > ARM9高速實(shí)時(shí)多任務(wù)數據采集系統的算法優(yōu)化

ARM9高速實(shí)時(shí)多任務(wù)數據采集系統的算法優(yōu)化

作者: 時(shí)間:2012-03-08 來(lái)源:網(wǎng)絡(luò ) 收藏

摘要: 針對性、性、并發(fā)性、安全性要求,提出了基于和μC/OSII操作的多頻道的智能化設計方案。實(shí)現了優(yōu)先級動(dòng)態(tài)調度、動(dòng)態(tài)設置、系統工作參數動(dòng)態(tài)設定。針對低速外圍設備進(jìn)行了系統工作時(shí)間,對軟件關(guān)鍵區進(jìn)行了必要的保護,提高了系統安全性,改善了內部同步性,保障了各個(gè)通道的并發(fā)性。對系統各個(gè)通道的極限工作頻率進(jìn)行了實(shí)驗室測定,對相關(guān)設計電路進(jìn)行了簡(jiǎn)要說(shuō)明。

本文引用地址:http://dyxdggzs.com/article/149485.htm

關(guān)鍵詞: ;μC/OSII;優(yōu)先級動(dòng)態(tài)調度;關(guān)鍵區

Intelligent Highspeed Realtime Multitasking Data Acquisition System Algorithm Based on
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

引言

隨著(zhù)IT技術(shù)、電子技術(shù)、通信技術(shù)、以及自動(dòng)控制技術(shù)的飛速發(fā)展,對工業(yè)現場(chǎng)數據的實(shí)時(shí)采集就成為電子產(chǎn)品和工業(yè)控制技術(shù)發(fā)展不可避免的一個(gè)環(huán)節。

本文針對高速實(shí)時(shí)多任務(wù)數據采集中的多任務(wù)實(shí)現以及實(shí)時(shí)性、實(shí)效性和高速性的要求,提出了基于A(yíng)RM9和μC/OSII操作系統的智能化設計方案,實(shí)現了任務(wù)優(yōu)先級動(dòng)態(tài)調度、系統工作參數動(dòng)態(tài)設定、系統內部軟件智能化設計,針對低速外圍設備進(jìn)行了系統,并提高了系統可靠性改善了內部任務(wù)同步性。

1 整體電路設計

整個(gè)采集系統的硬件電路如圖1所示。首先利用多路調制電路對12路信號進(jìn)行調制,這部分包含相應的信號轉換、抗干擾、以及初步的信號處理等,使得各路采集信號能夠達到ARM9內核對信號采集的要求。經(jīng)多路選擇和ADC采樣后進(jìn)入ARM9內核。為了實(shí)現對整個(gè)系統工作狀態(tài)的實(shí)時(shí)監視、實(shí)時(shí)控制和實(shí)時(shí)調節,設置了上位機監視器和現場(chǎng)顯示觸摸屏,將用戶(hù)所有要求顯示的信息在上位機顯示輸出或者在現場(chǎng)LCD同步顯示輸出。采樣按照采樣頻段分為高頻段(300~200 ksps)、中頻段(200~100 ksps)、和低頻段(小于100 ksps)3個(gè)頻段,每個(gè)頻段由4個(gè)外部采樣通道組成。ARM9內核與上位機的通信利用UART和RS232轉換電路來(lái)實(shí)現。系統工作電源由統一的電源供給,在實(shí)現電壓轉換后對PC機和ARM9內核以及相應的工作電路提供電源支持。

圖1 數據采集系統硬件電路

2 系統總體軟件設計思路

系統的軟件設計原理如圖2所示。12路采集信號經(jīng)調制電路多路選擇和ADC采樣后進(jìn)入各個(gè)采集任務(wù)內部通道。每一路采集通道都設計獨立的數據采集、數據存儲、數據處理以及數據提交任務(wù)。也就是說(shuō),每一路外部采集通道都對應一個(gè)獨立的內部數據通道,而且本通道數據只在本通道內進(jìn)行存儲、處理和傳遞。各個(gè)內部數據通道任務(wù)之間只有在系統調度時(shí)執行時(shí)間上的先后關(guān)系、優(yōu)先級關(guān)系,沒(méi)有數據耦合關(guān)系。

圖2 系統軟件設計原理圖

命令掃描部分由獨立的上位機和下位機掃描任務(wù)完成對上位機監視器和下位機觸摸屏的實(shí)時(shí)監控,一旦檢測到用戶(hù)命令,立即將其發(fā)送給命令解析和處理任務(wù),由該任務(wù)對用戶(hù)命令進(jìn)行分析處理。命令處理完后將提取的結果發(fā)送給用戶(hù)要操作的采樣通道,使之按照用戶(hù)要求運行。

各個(gè)頻段的各個(gè)通道采集任務(wù)均設置兩個(gè)數據緩沖區。雙數據緩沖區為采樣任務(wù)順利存儲提供了雙重保證,使得采樣工作一旦結束就有可用緩沖區,就可立即將數據存儲而后進(jìn)行下一次采集。也使得后續的數據處理任務(wù)減少數據等待時(shí)間,能迅速得到當前采樣通道需要處理的數據,并在最短的時(shí)間內處理發(fā)送給下一級任務(wù)。

采樣、數據顯示、命令掃描都涉及外圍設備,是整個(gè)系統所有任務(wù)里面運行速度最慢的,針對采樣任務(wù)設置雙數據緩沖區可以很大幅度地改善由于采樣速度慢而造成的系統速率下降問(wèn)題,顯示和命令掃描部分的設計將在下文中詳細說(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í)間差。

3.3 針對外設的時(shí)間優(yōu)化

針對命令掃描和解析任務(wù),將其設置為中斷方式,在檢測到有用戶(hù)命令輸入時(shí)發(fā)生中斷,在中斷里對用戶(hù)命令進(jìn)行解析、分析、提取和處理。在中斷下半部分對命令進(jìn)行廣播式發(fā)布,發(fā)布到各個(gè)采樣任務(wù)函數使其立即刷新執行。因為用戶(hù)工作方式改變,命令刷新頻率并不高而且任務(wù)量不大,所以完全可以利用中斷的快速處理來(lái)實(shí)現這種功能。

圖4 顯示任務(wù)工作原理圖

在處理完命令掃描和采樣任務(wù)之后,影響整個(gè)系統性能的就剩下上位機和下位機顯示部分了。顯示任務(wù)工作原理如圖4所示,利用μC/OSII系統提供的消息隊列對顯示部分進(jìn)行改善。分別建立兩個(gè)長(cháng)度為16的消息隊列和內存塊鏈表,數據提交任務(wù)從空閑內存池中得到可用內存塊之后將本任務(wù)要顯示的數據存入該內存塊,此時(shí)該內存就變成了帶有數據的待顯示數據塊。而后將該內存塊的地址以消息的形式注冊在顯示消息隊列上。消息隊列的長(cháng)度設置為16,雖然這里只有12個(gè)任務(wù)會(huì )發(fā)送消息給消息隊列,但在實(shí)時(shí)多任務(wù)程序中,各個(gè)任務(wù)的運行是隨機的,消息隊列在一段時(shí)間內得到的消息個(gè)數是個(gè)不定值,所以留出4個(gè)空位作為裕度。而且設置初始值為16的計數信號量來(lái)保護消息隊列,數據提交任務(wù)在提交數據之前先檢測該信號量,如該信號量有效就可以發(fā)送信號,如信號量無(wú)效則需等待,直到有可用信號位時(shí)方可將信號發(fā)出。在外部硬件操作端,由外部發(fā)送任務(wù)將消息隊列中的消息按照固定速率發(fā)送到外部信號線(xiàn)上。

這樣設計,消息隊列就相當于一個(gè)緩沖區,使得所有提交任務(wù)都可以向這個(gè)緩沖區發(fā)送待顯示數據,有效地避免了多個(gè)任務(wù)爭用一個(gè)外圍設備而引起的死鎖、競爭冒險等問(wèn)題。同時(shí)減少了任務(wù)數量,減少了任務(wù)切換的次數,充分利用了系統時(shí)間,提高了系統性能。

3.4 關(guān)鍵區保護

多任務(wù)設計中每個(gè)任務(wù)在任何時(shí)刻都可能被其他任務(wù)打斷,必須充分考慮代碼的安全性、可重入性、可靠性、饑餓、互鎖、死鎖等情況。[3]

為了避免上述情況,任務(wù)間消息發(fā)送和傳遞時(shí)以及在數據采樣時(shí)對相應函數體進(jìn)行關(guān)鍵區保護,在這些函數運行的時(shí)候禁止中斷和任務(wù)調度,以保證數據傳遞和數據采樣的絕對正確性和系統運行的絕對安全性。

4 極限頻率測定及總結

上位機超級終端接收到的極限頻率測試結果如圖5所示。

圖5 極限頻率測量結果

分別測試了高頻段、中頻段和低頻段的極限頻率,結果在CPU使用率80%~90%的情況下測定。該系統成功實(shí)現了智能化設計和優(yōu)先級動(dòng)態(tài)調度、系統參數動(dòng)態(tài)設置等功能,達到了設計指標。

考文獻

[1] Labrosse Jean J.嵌入式實(shí)時(shí)操作系統μC/OSII [M].邵貝貝,等譯.北京航空航天大學(xué)出版社,2007.
[2] Love Robert.Linux內核設計與實(shí)現[M].陳莉君,等譯.北京:機械工業(yè)出版社,2010.
[3] Labrosse Jean J.μC/OSIII—The RealTime Kernel,200909.



評論


相關(guān)推薦

推薦視頻

更多>>

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>