基于ARM LPC2292 的CAN總線和以太網間的網關設計
3.2 系統(tǒng)構成
嵌入式網關的功能主要是進行以太網數據報文和CAN 數據幀之間的協(xié)議轉換,實現以太網和CAN 總線的互連;其次是根據應用環(huán)境,通過人機交互接口改變網關的IP 地址和CAN 總線的波特率。整個嵌入式系統(tǒng)的構成如圖3 所示。在進行任務設計之前的前期工作有:
?、?實時操作系統(tǒng)的移植。μC/OS-II 可以在絕大多數8 位、16 位、32 位、以至64 位微處理器、微控制器、數字信號處理器(DSP)上運行。μC/OS-II 在LPC2292 上的移植可參考文獻[1]。
?、?TCP/IP 協(xié)議和CAN 協(xié)議的嵌入。由于μC/OS-II 操作系統(tǒng)只包含了實時內核、任務管理、時間管理、任務間的通信同步(信號量、郵箱、消息隊列)和內存管理等功能,所以用戶必須根據自己的需要添加一些功能模塊。網關的設計將TCP/IP 和CAN 協(xié)議嵌入到操作系統(tǒng)中,并提供一些API 接口函數供用戶調用。
3.3 系統(tǒng)實現
采用RTOS 使整個設計簡單且易調試,各個任務相互獨立,而且各個任務具有不同的優(yōu)先級可以保證緊急任務及時響應,從而能有效地對任務進行調度。系統(tǒng)軟件設計由操作系統(tǒng)和一系列用戶應用程序構成。 主函數是程序首先執(zhí)行的一個函數。該函數永遠不返回,主要實現系統(tǒng)的硬件(包括中斷、鍵盤、顯示等)和操作系統(tǒng)(包括任務控制塊、事件控制塊)的初始化,而且在啟動多任務調度之前,必須至少創(chuàng)建一個任務。在本系統(tǒng)中創(chuàng)建了一個啟動任務,主要負責時鐘的初始化和啟動、中斷的啟動、CAN 控制器的初始化與啟動、端口與IP 地址的初始化和RTL8019 的初始化與啟動,并且對各個應用任務進行了劃分。在交出CPU 的使用權之后自做一些空閑處理。
3.3.1 任務的劃分
要完成多任務系統(tǒng)的各種功能必須對任務進行劃分。本程序根據各個任務的重要性和實時性,把整個模塊分成7 個具有不同優(yōu)先級的應用任務:系統(tǒng)監(jiān)控、CAN 數據發(fā)送、鍵盤掃描、以太網數據發(fā)送、協(xié)議轉換、LED顯示、系統(tǒng)配置等。表1 所示為任務劃分表。
表1 任物劃分表
除了7 個主要應用任務之外,還有兩個中斷服務子程序:一個時鐘節(jié)拍中斷,提供周期性信號源;另一個接收中斷,把接收到的數據寫入緩沖區(qū)。
3.1.2 任務的具體實現任務劃分后,各任務具有獨立的堆棧空間,彼此爭奪CPU 的使用權。一旦獲得CPU 的使用權,就會獨立運行而完成特定的功能。
CAN 總線通信模塊包括數據傳輸和總線管理兩個部分。數據傳輸實現的功能有CAN 初始化、CAN 報文發(fā)送和CAN 報文接收。CAN 初始化及報文的接收在啟動任務與中斷服務程序中實現,CAN 報文發(fā)送和總線管理作為一個單獨的任務獨立運行??偩€管理功能塊實現的主要是總線檢測,判斷一路總線是否良好。如果不是,就進入另一路總線檢測;如果冗余總線良好,就采用冗余總線通信。CAN 數據發(fā)送任務需要系統(tǒng)調度器通知是否有待發(fā)送數據進入發(fā)送隊列,任務的實現如圖4 所示。
圖4 數據發(fā)送任務實現圖
以太網通信模塊由以太網數據收發(fā)功能塊和數據協(xié)議管理功能塊構成。數據的收發(fā)功能塊主要實現RTL8019 的初始化、數據報文的發(fā)送與接收。同理,RTL8019 的初始化在系統(tǒng)的啟動任務中實現。數據的接收在RTL8019 的中斷服務程序中實現。數據協(xié)議管理主要實現對接收數據報文的解析,以及給待發(fā)送數據添加協(xié)議報頭。以太網數據發(fā)送與協(xié)議管理分別作為獨立任務運行。
以太網數據發(fā)送任務同樣需要系統(tǒng)調度器通知發(fā)送隊列中是否有待發(fā)送的數據。若沒有數據發(fā)送,則將 該任務掛起,系統(tǒng)運行其他任務。以太網數據發(fā)送任務通過對RTL8019 的操作完成,根據RTL8019 的狀態(tài),將發(fā)送隊列中數據通過DMA 傳送到8019 的發(fā)送緩沖區(qū)啟動發(fā)送,并根據發(fā)送結果,對發(fā)送隊列指針進行調整。
以太網協(xié)議管理即協(xié)議轉換任務在用戶數據與8019 驅動需要的數據報文之間進行協(xié)議轉換。TCP/IP 協(xié)議為應用層、傳輸層、網絡層和數據鏈路層等4 層模型,每層具有不同的功能,并對應相應的子協(xié)議,而且層與層之間在邏輯上是相互獨立的。在編程時,可以直接調用嵌入的TCP/IP 協(xié)議的API 函數對數據報文進行分層。該任務對從8019 傳過來的數據處理示意圖如圖5 所示。不同的子協(xié)議具有不同的功能號,任務根據功能號對協(xié)議進行區(qū)別。把用戶數據傳遞給8019 驅動的示意圖是圖5 的逆序表示。
圖5 協(xié)議轉換任務的數據處理的示意圖
3.3.3 任務間的同步與調度
通常多任務操作系統(tǒng)的任務不同于一般的函數,它是一個無限循環(huán),而且沒有返回值。如果沒有更高優(yōu)先級的任務進入就緒態(tài),當前任務是不會放棄對CPU 的使用權的。為了實現操作系統(tǒng)的正常運行和有關事件的同步,必須正確處理任務間的通信和事件標志的設置。整個系統(tǒng)的功能結構如圖6 所示。
圖6 系統(tǒng)運行示意圖
各個任務具有不同的優(yōu)先級,通過調用系統(tǒng)掛起函數或延時函數可以啟動具有更高優(yōu)先級的進入就緒態(tài)的任務。高優(yōu)先級的任務,例如1、2、3、4 號任務,往往由于申請某個資源而發(fā)生阻塞,進入掛起態(tài)。系統(tǒng)調度器啟動低優(yōu)先級的任務,通過對延時參數的設置,每隔一定時鐘節(jié)拍就啟動鍵盤掃描或LED 顯示任務。如果其中有任何一事件發(fā)生就啟動相關的任務,這個過程通過信號量的通信機制來實現。對每一個事件分配一個信號量,一旦事件發(fā)生就啟動信號量的等待任務列表中進入就緒態(tài)的任務,從而保證任務與事件的同步。
4 結束語
在嵌入式硬件平臺的基礎上,用μC/OS-II 實時操作系統(tǒng)開發(fā)應用程序有其獨到之處,用戶可以直接利用系統(tǒng)的接口函數編寫自己的應用程序,毋需另行開發(fā),大大方便了用戶編程,縮短了軟件的開發(fā)周期,提高了開發(fā)效率;基于ARM LPC2292 CAN 總線和以太網間的網關,在實驗調試過程中運行狀況良好,工作穩(wěn)定。
tcp/ip相關文章:tcp/ip是什么
評論