新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 基于VxWorks的多路高速串口的通信方法設計

        基于VxWorks的多路高速串口的通信方法設計

        作者: 時間:2010-09-18 來源:網絡 收藏

        串口通信具有傳輸距離遠、傳輸穩定、簡單實用等特點,已被廣泛應用于工業控制、數據采集、網絡通信等領域。在這些應用領域中,串口通信用于實時地從各個串口接收數據,而向各個串口發送的主要是控制信息,一般不要求嚴格的實時性。因此提高串口設備接收的實時性至關重要。

        設備接收到數據時,系統可通過兩種途徑獲取數據包到達的信息。一種是方式,利用硬件機制實現設備和系統的應答對話,即當外部設備需要CPU處理數據時,設備就發一個信號給系統,系統在收到中斷請求時要保存中斷現場,調用相應的中斷服務程序響應設備的中斷請求,退出中斷處理程序后要恢復現場。上下文的切換要占據系統開銷,在數據量過載時會使得中斷頻率過高,CPU忙于處理硬件中斷,上層應用程序對于數據包的處理無法執行,而中斷程序還不斷往隊列中放數據,系統將自陷在中斷響應這一環節,產生所謂的“活鎖”。另一種是方式,系統每隔一定時間便檢查一次物理設備,若設備“報告”有數據到達,則調用相應的處理程序。但固定的周期增加了數據等待處理時間,降低了系統實時性。而且當數據量比較小時,頻繁查詢沒有數據達到的設備也是對CPU資源的浪費。

        可見中斷和方式都不能滿足不同負載情況下系統的實時性要求。本文借鑒Linux系統中NAPI[1]方法,結合中斷與輪詢的優點,提出一種輪詢與中斷結合的調度方式。這種調度機制在多串口系統中,當負載在不同的串口通道不均衡時,可以提高CPU的利用效率,并能滿足業務的時延要求。另外,根據到達數據量分析得出了輪詢、中斷切換門限和輪詢周期。

        1 算法描述

        在同一系統中處理相同業務量時,中斷和輪詢處理的時間相同。因為過程相同,都是把數據從外設緩沖搬移到CPU內存中,所不同的是中斷進行上下文切換要占據系統開銷,而輪詢只是查詢一下寄存器狀態。相比之下,輪詢占用CPU的時間很短,一般中斷為幾個μs,輪詢為幾百ns,根據不同系統而有差別。相反,在數據量比較小的情況下輪詢中存在空轉情況,無疑增加了系統開銷。

        目前,處理中斷和輪詢互換的方法有定時中斷法(Clocked Interrupts),即設置一個定時器,定時器到時,如果有中斷,則響應中斷,調用中斷服務程序處理數據。這種方法在數據量大時類似于輪詢,在負載小時中斷由異步事件觸發降低了開銷。但是這種機制需要一個精確的、頻率很高的系統時鐘,并且這種方法受固定定時周期的限制,不是在任何情況下都有效。

        在并行系統中還應用了一種叫輪詢定時(Polling Watchdog)的機制,這種方法主要是為了解決接收處理中的等待時延問題。基本思想就是在輪詢接收開始時設置一個看門狗定時器,以滿足業務的最小時延要求,而且中斷要在接收超時才產生。此方法的不足之處是在負載小時解決不了輪詢空轉問題。

        混合中斷、輪詢方式(HIP)主要應用在網絡接口系統中。工作方式為基于觀測接收的負載,改變切換門限,自動在中斷和輪詢兩種方式中切換。中斷方式沒有考慮到超時中斷,當數據到達間隔很大時,會降低實時性。在比較中斷和輪詢開銷時,定義VI+V(B)為中斷開銷,其中VI為中斷的固有開銷,V(B)為系統接收B字節數據的開銷,VP+V(B)為輪詢開銷,VP為輪詢的固有開銷。但在一次輪詢和中斷接收中,中斷和輪詢所接收的數據可能不相等,中斷開銷和輪詢開銷便失去了比較意義。

        以上幾種方法均有不足,但在多路串口系統中,還各有不同的特點,即在每個獨立的通道可能存在不同的負載情況。如果對全部的串口通道統一應用中斷方式或查詢方式,則顯然不能適應各自串口通道的數據量,不能滿足系統實時性和高效率的綜合要求。根據這一特點,提出了在多路串口系統中,輪詢和中斷相結合的接收策略,在中斷方式下還靈活應用了批中斷技術。

        算法描述:
        com0=polling...comN=polling
        For comID←0 up to comMAX
        If TI>γ or PU=PUMAX Then
        comID=interrupt
        DelList(comID)

        N路串口的初始狀態為輪詢,檢查輪詢隊列,如果數據到達間隔時間TI大于門限γ或者輪詢空轉次數PU等于空轉門限PUMAX,則該端口改為中斷狀態,在輪詢隊列中刪除該端口。根據不同的系統,間隔時間門限γ和空轉門限PUMAX的取值不同。

        If TIγ Then
        comID=polling
        AddList(comID)

        在中斷狀態下,如果數據到達間隔時間TI小于門限γ,則該端口改為輪詢狀態,在輪詢隊列中增加該端口。

        2 門限設計

        如果事件隨機發生而且發生頻率很低,以致大多數輪詢都認為事件沒有發生,則中斷就會是首選的事件通知機制;如果事件定期發生且可以預測,而大多數輪詢都發現事件已發生,則首選機制是輪詢。在這兩者之間存在這樣一種情況,即輪詢行為和反應型行為的效果都相同,在它們之間如何選擇都無關緊要。這種情況即為所尋找的輪詢和中斷的切換門限。

        2.1 門限度量標準的選擇

        數據多少的衡量都是以單位時間內的吞吐量計算,即數據速率。如果以吞吐率的多少作為切換門限的標準,則在分組定長情況下,這種計算方法可以近似體現出負載情況,但當分組不定長時就不能體現實際負載了,如圖1所示的四種情況。

        圖1(a)和圖1(b)的分組長度不同,但之間的到達間隔都很小。計算得出圖1(b)單位時間的吞吐率明顯要比圖1(a)小,但如果圖1(b)采用中斷方式,就要頻繁地響應中斷,效率將大大降低。圖1(d)的分組很長,一次接收中接收到的數據非常多,但之間的到達間隔很長,如果計算吞吐率選擇的單位時間正好為數據接收時間,在這一段時間內吞吐率很大,則誤認為數據量很大,選擇輪詢方式接收。相比之下,圖1(c)和圖1(d)選用中斷方式更為理想。

        根據以上分析可以發現,用數據到達的時間間隔可以近似地表示數據量的大小。如果數據到達間隔很小,且頻繁到達,則認為負載很大,選擇輪詢方式;如果數據到達間隔很大,則認為負載很小,選擇中斷方式。在輪詢方式中,如果根據已知的到達時間,推算出下一數據的到達時間,根據計算出的結果來設定輪詢周期,則輪詢效率更加提升。

        2.2 門限的計算

        上述計算到達間隔判斷切換時機的方式,不能體現數據到達間隔的變化規律。可選用平均到達時間的均方根和均值的比值作為判斷切換的標準,這個比值系數代表了平均到達時間的變化程度。當比值小時表明預測的值與平均值偏差很小,數據到達的間隔時間是有規律的,可以預測。這種情況顯然要應用輪詢方式,把輪詢周期設為平均到達間隔時間。

        平均到達間隔時間的計算方法如下式:

        式中:D為最后一個數據到達的間隔時間;α為平均到達間隔時間的加權系數,α控制著D相對于以往的到達時間間隔歷史所占的比重。用這種方法,平均到達間隔時間就可以積累到達間隔時間了。

        平均到達時間的方差用下式估計:

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

        式中:γ為預測門限,為系統可容忍的最大輪詢周期,在本系統中為滿足上層的應用,為20 ms。表明數據到達間隔規律;表明平均到達間隔小于系統所能忍受的最小間隔。數據到達不頻繁,認為滿足以上兩個條件時切換到輪詢模式;當滿足的條件相反時,切換到中斷方式。


        3 實例分析

        在可接收10路空中信號的多串口系統中對該算法進行實現,系統結構如圖2。該系統可將數據信息(主要為語音數據)接收后轉換為以太網數據包,通過10MHz以太網口送出。同時,它從以太網口接收來自控制臺的各類指令,完成相應的處理任務。


        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 大足县| 礼泉县| 长春市| 巴塘县| 湘潭县| 顺昌县| 专栏| 巴南区| 阿坝| 梁平县| 施秉县| 屏边| 女性| 洛扎县| 通渭县| 柳河县| 太仆寺旗| 杭锦旗| 原平市| 巧家县| 武汉市| 托克托县| 定安县| 芜湖市| 姜堰市| 五峰| 邵阳县| 奇台县| 潮州市| 沈阳市| 县级市| 枣强县| 揭东县| 阳原县| 东台市| 新兴县| 湘乡市| 江安县| 巧家县| 兴仁县| 望谟县|