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