《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 業(yè)界動態(tài) > 基于VxWorks操作系統(tǒng)的多路高速串口的通信方法設(shè)計

基于VxWorks操作系統(tǒng)的多路高速串口的通信方法設(shè)計

2008-07-09
作者:李柏楠,王文峰,季中恒
關(guān)鍵詞: 輪詢 串口 吞吐率 中斷方式 多路

??? 摘 要: 在傳統(tǒng)的中斷和輪詢" title="輪詢">輪詢方式基礎(chǔ)上,提出一種中斷與輪詢相結(jié)合的接收機制,可以根據(jù)負載情況,在設(shè)定的門限控制下,對多路" title="多路">多路串口" title="串口">串口系統(tǒng)中不同的通道區(qū)分不同的接收方法。應(yīng)用該方法在VxWorks操作系統(tǒng)上實現(xiàn)了對多路高速串口的實時接收處理。
??? 關(guān)鍵詞: 高速多串口? 中斷? 輪詢

?

??? 串口通信具有傳輸距離遠、傳輸穩(wěn)定、簡單實用等特點,已被廣泛應(yīng)用于工業(yè)控制、數(shù)據(jù)采集、網(wǎng)絡(luò)通信等領(lǐng)域。在這些應(yīng)用領(lǐng)域中,串口通信用于實時地從各個串口接收數(shù)據(jù),而向各個串口發(fā)送的主要是控制信息,一般不要求嚴格的實時性。因此提高串口設(shè)備接收的實時性至關(guān)重要。
??? 設(shè)備接收到數(shù)據(jù)時,系統(tǒng)可通過兩種途徑獲取數(shù)據(jù)包到達的信息。一種是中斷方式" title="中斷方式">中斷方式,利用硬件中斷機制實現(xiàn)設(shè)備和系統(tǒng)的應(yīng)答對話,即當(dāng)外部設(shè)備需要CPU處理數(shù)據(jù)時,設(shè)備就發(fā)一個中斷信號給系統(tǒng),系統(tǒng)在收到中斷請求時要保存中斷現(xiàn)場,調(diào)用相應(yīng)的中斷服務(wù)程序響應(yīng)設(shè)備的中斷請求,退出中斷處理程序后要恢復(fù)現(xiàn)場。上下文的切換要占據(jù)系統(tǒng)開銷,在數(shù)據(jù)量過載時會使得中斷頻率過高,CPU忙于處理硬件中斷,上層應(yīng)用程序?qū)τ跀?shù)據(jù)包的處理無法執(zhí)行,而中斷程序還不斷往隊列中放數(shù)據(jù),系統(tǒng)將自陷在中斷響應(yīng)這一環(huán)節(jié),產(chǎn)生所謂的“活鎖”。另一種是輪詢方式,系統(tǒng)每隔一定時間便檢查一次物理設(shè)備,若設(shè)備“報告”有數(shù)據(jù)到達,則調(diào)用相應(yīng)的處理程序。但固定的輪詢周期增加了數(shù)據(jù)等待處理時間,降低了系統(tǒng)實時性。而且當(dāng)數(shù)據(jù)量比較小時,頻繁查詢沒有數(shù)據(jù)達到的設(shè)備也是對CPU資源的浪費。
??? 可見中斷和輪詢方式都不能滿足不同負載情況下系統(tǒng)的實時性要求。本文借鑒Linux系統(tǒng)中NAPI[1]方法,結(jié)合中斷與輪詢的優(yōu)點,提出一種輪詢與中斷結(jié)合的調(diào)度方式。這種調(diào)度機制在多串口系統(tǒng)中,當(dāng)負載在不同的串口通道不均衡時,可以提高CPU的利用效率,并能滿足業(yè)務(wù)的時延要求。另外,根據(jù)到達數(shù)據(jù)量分析得出了輪詢、中斷切換門限和輪詢周期。
1 算法描述
??? 在同一系統(tǒng)中處理相同業(yè)務(wù)量時,中斷和輪詢處理的時間相同。因為過程相同,都是把數(shù)據(jù)從外設(shè)緩沖搬移到CPU內(nèi)存中,所不同的是中斷進行上下文切換要占據(jù)系統(tǒng)開銷,而輪詢只是查詢一下寄存器狀態(tài)。相比之下,輪詢占用CPU的時間很短,一般中斷為幾個μs,輪詢?yōu)閹装賜s,根據(jù)不同系統(tǒng)而有差別。相反,在數(shù)據(jù)量比較小的情況下輪詢中存在空轉(zhuǎn)情況,無疑增加了系統(tǒng)開銷。
??? 目前,處理中斷和輪詢互換的方法有定時中斷法(Clocked Interrupts),即設(shè)置一個定時器,定時器到時,如果有中斷,則響應(yīng)中斷,調(diào)用中斷服務(wù)程序處理數(shù)據(jù)。這種方法在數(shù)據(jù)量大時類似于輪詢,在負載小時中斷由異步事件觸發(fā)降低了開銷。但是這種機制需要一個精確的、頻率很高的系統(tǒng)時鐘,并且這種方法受固定定時周期的限制,不是在任何情況下都有效。
??? 在并行系統(tǒng)中還應(yīng)用了一種叫輪詢定時(Polling Watchdog)的機制,這種方法主要是為了解決接收處理中的等待時延問題?;舅枷刖褪窃谳喸兘邮臻_始時設(shè)置一個看門狗定時器,以滿足業(yè)務(wù)的最小時延要求,而且中斷要在接收超時才產(chǎn)生。此方法的不足之處是在負載小時解決不了輪詢空轉(zhuǎn)問題。
??? 混合中斷、輪詢方式(HIP)主要應(yīng)用在網(wǎng)絡(luò)接口系統(tǒng)中。工作方式為基于觀測接收的負載,改變切換門限,自動在中斷和輪詢兩種方式中切換。中斷方式?jīng)]有考慮到超時中斷,當(dāng)數(shù)據(jù)到達間隔很大時,會降低實時性。在比較中斷和輪詢開銷時,定義VI+V(B)為中斷開銷,其中VI為中斷的固有開銷,V(B)為系統(tǒng)接收B字節(jié)數(shù)據(jù)的開銷,VP+V(B)為輪詢開銷,VP為輪詢的固有開銷。但在一次輪詢和中斷接收中,中斷和輪詢所接收的數(shù)據(jù)可能不相等,中斷開銷和輪詢開銷便失去了比較意義。
??? 以上幾種方法均有不足,但在多路串口系統(tǒng)中,還各有不同的特點,即在每個獨立的通道可能存在不同的負載情況。如果對全部的串口通道統(tǒng)一應(yīng)用中斷方式或查詢方式,則顯然不能適應(yīng)各自串口通道的數(shù)據(jù)量,不能滿足系統(tǒng)實時性和高效率的綜合要求。根據(jù)這一特點,提出了在多路串口系統(tǒng)中,輪詢和中斷相結(jié)合的接收策略,在中斷方式下還靈活應(yīng)用了批中斷技術(shù)。
??? 算法描述:
??? com0=polling...comN=polling
??? For comID←0 up to comMAX
??????? ?If TI>γ or PU=PUMAX Then
????????? ???comID=interrupt
????????? ???DelList(comID)
??? N路串口的初始狀態(tài)為輪詢,檢查輪詢隊列,如果數(shù)據(jù)到達間隔時間TI大于門限γ或者輪詢空轉(zhuǎn)次數(shù)PU等于空轉(zhuǎn)門限PUMAX,則該端口改為中斷狀態(tài),在輪詢隊列中刪除該端口。根據(jù)不同的系統(tǒng),間隔時間門限γ和空轉(zhuǎn)門限PUMAX的取值不同。
??? If TI<γ Then
?????? ??comID=polling
?????? ??AddList(comID)
??? 在中斷狀態(tài)下,如果數(shù)據(jù)到達間隔時間TI小于門限γ,則該端口改為輪詢狀態(tài),在輪詢隊列中增加該端口。
2 門限設(shè)計
??? 如果事件隨機發(fā)生而且發(fā)生頻率很低,以致大多數(shù)輪詢都認為事件沒有發(fā)生,則中斷就會是首選的事件通知機制;如果事件定期發(fā)生且可以預(yù)測,而大多數(shù)輪詢都發(fā)現(xiàn)事件已發(fā)生,則首選機制是輪詢。在這兩者之間存在這樣一種情況,即輪詢行為和反應(yīng)型行為的效果都相同,在它們之間如何選擇都無關(guān)緊要。這種情況即為所尋找的輪詢和中斷的切換門限。
2.1 門限度量標(biāo)準的選擇
??? 數(shù)據(jù)多少的衡量都是以單位時間內(nèi)的吞吐量計算,即數(shù)據(jù)速率。如果以吞吐率" title="吞吐率">吞吐率的多少作為切換門限的標(biāo)準,則在分組定長情況下,這種計算方法可以近似體現(xiàn)出負載情況,但當(dāng)分組不定長時就不能體現(xiàn)實際負載了,如圖1所示的四種情況。

?

?

??? 圖1(a)和圖1(b)的分組長度不同,但之間的到達間隔都很小。計算得出圖1(b)單位時間的吞吐率明顯要比圖1(a)小,但如果圖1(b)采用中斷方式,就要頻繁地響應(yīng)中斷,效率將大大降低。圖1(d)的分組很長,一次接收中接收到的數(shù)據(jù)非常多,但之間的到達間隔很長,如果計算吞吐率選擇的單位時間正好為數(shù)據(jù)接收時間,在這一段時間內(nèi)吞吐率很大,則誤認為數(shù)據(jù)量很大,選擇輪詢方式接收。相比之下,圖1(c)和圖1(d)選用中斷方式更為理想。
??? 根據(jù)以上分析可以發(fā)現(xiàn),用數(shù)據(jù)到達的時間間隔可以近似地表示數(shù)據(jù)量的大小。如果數(shù)據(jù)到達間隔很小,且頻繁到達,則認為負載很大,選擇輪詢方式;如果數(shù)據(jù)到達間隔很大,則認為負載很小,選擇中斷方式。在輪詢方式中,如果根據(jù)已知的到達時間,推算出下一數(shù)據(jù)的到達時間,根據(jù)計算出的結(jié)果來設(shè)定輪詢周期,則輪詢效率更加提升。
2.2 門限的計算
??? 上述計算到達間隔判斷切換時機的方式,不能體現(xiàn)數(shù)據(jù)到達間隔的變化規(guī)律。可選用平均到達時間的均方根和均值的比值作為判斷切換的標(biāo)準,這個比值系數(shù)代表了平均到達時間的變化程度。當(dāng)比值小時表明預(yù)測的值與平均值偏差很小,數(shù)據(jù)到達的間隔時間是有規(guī)律的,可以預(yù)測。這種情況顯然要應(yīng)用輪詢方式,把輪詢周期設(shè)為平均到達間隔時間。
??? 平均到達間隔時間的計算方法如下式:

???

式中:D為最后一個數(shù)據(jù)到達的間隔時間;α為平均到達間隔時間的加權(quán)系數(shù),α控制著D相對于以往的到達時間間隔歷史所占的比重。用這種方法,平均到達間隔時間就可以積累到達間隔時間了。
??? 平均到達時間的方差用下式估計:

???

式中:β為到達間隔時間的方差加權(quán)系數(shù),且控制估計器的記憶性。σ2開方就得到平均到達間隔時間的均方根σ了。
??? 下式表明了切換到輪詢時的門限:

???

式中:γ為預(yù)測門限,為系統(tǒng)可容忍的最大輪詢周期,在本系統(tǒng)中為滿足上層的應(yīng)用,為20 ms。表明數(shù)據(jù)到達間隔規(guī)律;表明平均到達間隔小于系統(tǒng)所能忍受的最小間隔。數(shù)據(jù)到達不頻繁,認為滿足以上兩個條件時切換到輪詢模式;當(dāng)滿足的條件相反時,切換到中斷方式。
3 實例分析
??? 在可接收10路空中信號的多串口系統(tǒng)中對該算法進行實現(xiàn),系統(tǒng)結(jié)構(gòu)如圖2。該系統(tǒng)可將數(shù)據(jù)信息(主要為語音數(shù)據(jù))接收后轉(zhuǎn)換為以太網(wǎng)數(shù)據(jù)包,通過10MHz以太網(wǎng)口送出。同時,它從以太網(wǎng)口接收來自控制臺的各類指令,完成相應(yīng)的處理任務(wù)。

?


??? 信號經(jīng)過1:10功分器,分給10個RF接收模塊,完成RF接收,輸出串行信號,每路串口為串行信號的最大速率115.2kbps,RF接收模塊每20ms發(fā)一個數(shù)據(jù)包,一個數(shù)據(jù)包最大為30bit。之后串行信號經(jīng)過3片OX16C954(每片有4路UART)轉(zhuǎn)換成并行總線信號,輸出給MPC860T(CPU)。每片OX16C954設(shè)置有128B的環(huán)形緩沖區(qū),所以經(jīng)過時間緩沖區(qū)就會被寫滿。為了保證不丟失數(shù)據(jù),應(yīng)該在8.8ms內(nèi)完成對10個終端接收模塊進行一次接收。OX16C954中斷門限設(shè)為64B,當(dāng)接收緩沖超過64B時,OX16C954產(chǎn)生接收中斷。在OX16C954還設(shè)置有超時中斷,當(dāng)從接收最后一個停止位中心開始計時,在四個符號周期內(nèi)沒有接收新的信息,即就產(chǎn)生超時中斷。批中斷的應(yīng)用如圖3。多個串口通過CPLD共享一個中斷源,在中斷頻繁,多個串口同時產(chǎn)生中斷的情況下,實現(xiàn)了批中斷,節(jié)約了中斷資源,提高了中斷效率。

?

?

??? 本系統(tǒng)的設(shè)計基于VxWorks操作系統(tǒng)。VxWorks操作系統(tǒng)提供對多種處理器的廣泛支持,具有完善的開發(fā)環(huán)境、開放的軟件接口、優(yōu)異的實時性能和全面可靠的網(wǎng)絡(luò)功能及良好的可裁剪性,適用于各種嵌入式環(huán)境的開發(fā)。
??? 程序?qū)崿F(xiàn)過程:系統(tǒng)加電待操作系統(tǒng)啟動之后,應(yīng)用程序首先根據(jù)主控和PC機的IP地址,得到它們的MAC地址,為以后進行UDP數(shù)據(jù)傳送做準備;初始化MPC860T的Port C口,把PC12、PC15初始化為數(shù)據(jù)輸出口,分別用于點亮運行時的狀態(tài)燈和設(shè)置/清除硬件看門狗;初始化OX16C954,打開10路串口,接收終端模塊的數(shù)據(jù);同時向終端模塊發(fā)送數(shù)據(jù),初始化UDP協(xié)議棧;最后,進入無限循環(huán)中,從各個串口收集數(shù)據(jù),解開數(shù)據(jù)包,以UDP的方式,把話音包發(fā)給PC機,把非話音包發(fā)給主控;同時,從網(wǎng)絡(luò)上接收來自主控的UDP數(shù)據(jù),根據(jù)端口號,把數(shù)據(jù)轉(zhuǎn)發(fā)給各個終端模塊。PC機不直接向DPM發(fā)送UDP數(shù)據(jù),只有主控向各個終端發(fā)送數(shù)據(jù),故由DPM至PC機的數(shù)據(jù)為單向。管理看門狗,每循環(huán)一次,開關(guān)一次看門狗,處理一次狀態(tài)燈。整個程序的流程如圖4所示。

?

?

??? 在10路都沒有數(shù)據(jù)的極限情況下測量輪詢開銷VP。在這種極限情況下,應(yīng)用全中斷的方式,10路串口沒有數(shù)據(jù)不會產(chǎn)生中斷,中斷開銷為0;應(yīng)用全輪詢的方式,CPU每次只查詢外部寄存器但不接收數(shù)據(jù),所以每次CPU都是空轉(zhuǎn),測量出來的為輪詢的固定開銷VP=163.84μs。在這種情況下,中斷顯然要優(yōu)于輪詢。
3.1 均衡負載
??? 在多路負載均衡的情況下,測量中斷吞吐率OI=B1為達到OX16C954中斷門限后,觸發(fā)的接收中斷所接收的數(shù)據(jù)量(B1≥64B);B2為產(chǎn)生超時中斷時所接收的數(shù)據(jù)量(B2≤64B)。輪詢吞吐率OP=B′為輪詢接收的數(shù)據(jù)量。如圖5所示,在VxWorks系統(tǒng)中1tick=1/8000(s)。因為設(shè)置了中斷門限,所以中斷在數(shù)據(jù)量低的時刻有一個躍變;輪詢的躍變由輪詢的周期設(shè)置,如果改變輪詢周期,躍變點將發(fā)生轉(zhuǎn)移。輪詢的吞吐率隨輸入數(shù)據(jù)量的增加而呈線性增長;在數(shù)據(jù)量低時中斷要優(yōu)于輪詢,隨著數(shù)據(jù)量的增長輪詢就要優(yōu)于中斷,在兩者相交的時刻,通過實驗可以找到γ和PUMAX的值。

?


3.2 非均衡負載情況
??? 非均衡負載情況,即m1路數(shù)據(jù)負載大、m2路數(shù)據(jù)負載小的情況(m1+m2=10)下,測量OI、OP和OC(中斷和輪詢相結(jié)合的吞吐率)。如圖6所示,在橫坐標(biāo)為1處,為m1=3,m2=7的情況,由于應(yīng)用了批中斷,中斷的效率要優(yōu)于輪詢,中斷和輪詢相結(jié)合的方法要略優(yōu)于中斷;在橫坐標(biāo)為2處,為m1=5,m2=5的情況,相結(jié)合的方法要略優(yōu)于中斷和輪詢;在橫坐標(biāo)3處為m1=7,m2=3的情況,相結(jié)合的方法近似輪詢,要優(yōu)于中斷。

?

?

??? 本文在綜合分析各種串口接收方式不足的基礎(chǔ)上,提出了中斷和輪詢相結(jié)合的方法。實驗結(jié)果表明,在滿足系統(tǒng)實時性要求的前提下,改進后的高速多串口系統(tǒng)吞吐率比應(yīng)用單一的中斷或輪詢方式在多路高速串口系統(tǒng)中、各串口負載不均衡的情況下,得到了明顯的提高。

參考文獻
[1] SALIM J H,NETWORKS Z,OLSSON R.Beyond softnet,Proceedings of the 5th Annual Linux Showcase & Conference,2001.
[2] DOVROLIS C,THAYER B,RAMANATHAN P.HIP:Hybrid?Interrupt-Polling for the Network Interface.WI:University of Wisconsin-Madison,2000.
[3] CHUNG J D,TRAW C B S,SMITH J M,Event-signaling?with-in higher performance network subsystems.in Proceedings,High Performance Communications Subsystems,1995,8.
[4] MAQUELIN O,GAO G R,HUM H H J,et al.Polling watchdog:Combining polling and interrupts for efficient message?handling.in Proceedings of the 23rd Annual International?Symposium on Computer Architecture,1996.
[5] Oxford Semiconductor.OX16C954 rev B Data Sheet R1.0.UK:Oxon,2001.

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。