《電子技術應用》
您所在的位置:首頁 > 通信与网络 > 设计应用 > 基于ARM7的串口服务器的实现
基于ARM7的串口服务器的实现
Icbuy
Icbuy
摘要:  通过扩展多串口,可以在PC端远程监控、管理各种外设,或对外设进行系统升级。通常串口服务器采用ARM9微处理器和带TCP/IP协议栈的付费操作系统,而文中提出的串口服务器是通过移植LWIP协议栈到代码开源的μC/OS-Ⅱ中实现,这样不但降低成本,而且代码的编写更加透明、灵活。
Abstract:
Key words :
  通過擴展多串口,可以在PC端遠程監控、管理各種外設,或對外設進行系統升級。通常串口服務器采用ARM9微處理器和帶TCP/IP協議棧的付費操作系統,而文中提出的串口服務器是通過移植LWIP協議棧到代碼開源的μC/OS-Ⅱ中實現,這樣不但降低成本,而且代碼的編寫更加透明、靈活。

  1硬件系統的設計

  本串口服務器采用Philips的ARM7系列芯片LPC2210,網絡控制芯片采用RTL8019,串口采用TL16C554芯片擴展。為得到更廣泛的應用,串口端還擴展485接口,通過跳線選擇232/485方式。系統結構框圖,如圖1所示。

圖1 系統結構框圖

圖1系統結構框圖

  2軟件系統的實現

  串口服務器軟件系統包括兩部分:TCP/IP協議棧的移植和實時多任務應用程序。μC/OS-Ⅱ在LPC系列ARM中的移植采用周立功公司的方案。

  2.1TCP/IP協議棧的移植

  LWIP是瑞士人AdmaDumkels等開發的源代碼開放的精簡TCP/IP協議棧。目的是在于保證TCP協議完整的情況下減少系統資源的需求,適合于資源較少的嵌入式系統應用。移植LWIP協議棧主要有兩部分代碼:(1)編寫操作系統模擬層相關代碼;(2)LWIP接口初始設置及網卡驅動。

  2.1.1操作系統模擬層相關代碼

  操作系統模擬層存在的目的主要是在μC/OS-Ⅱ和LWIP之間提供一座橋梁,使LWIP能與μC/OS-Ⅱ能以相同的規范存在于一個系統中并能相互通信。LWIP有信號量和郵箱兩種進程通訊方式,而μC/OS-Ⅱ也提供這兩種進程通訊方式。

  信號量用來同步任務,操作函數有sys_new_sem(建立并返回一個新信號量),sys_sem_signal(指定要發送的信號量),sys_sem_free(指定要釋放的信號量),sys_arch_sem_wait(等待由參數sem指定的信號量并阻塞線程),在這些函數體中進行數據結構的初始化并加入μC/OS-Ⅱ中的相關函數便可完成。

  郵箱用來投遞消息,LWIP允許將郵箱實現為一個隊列,多條消息投遞到這個郵箱。

  μC/OS-Ⅱ提供了豐富的消息隊列函數,且μC/OS-Ⅱ和LWIP投遞到郵箱中的消息均用指針實現。該系統建立了多個郵箱,郵箱通過單向鏈表接在一起。接收消息的最大數量由消息數組決定,結構圖如圖2所示。

圖2 郵箱數據結構圖

圖2郵箱數據結構圖

  郵箱建好后用指針P_Mbox指向節點1,申請新郵箱將節點1和節點2斷開,P_Mbox指向節點1的pstNext,以此類推。回收時P_Mbox的移動方向與申請時相反,這樣不會浪費內存且比較穩定。由以上結構和μC/OS-Ⅱ提供的函數寫出郵箱相關函數。

  除此之外,還需要編寫任務創建函數sys_thread_new和sys_arch_timeouts函數,由于每個任務都有timeouts鏈表,sys_arch_timeouts函數返回的sys_timeouts結構保存了timeouts鏈表的首地址。

  2.1.2LWIP初始化設置及底層驅動

  LWIP的初始化設置包含在LWIP通信進程的入口函數中,其入口函數LwipEntry的基本結構如下:

  Void Lwip Entry(void 3 pvArg)

  {

  //初始化LW IP,涉及LWIP使用的內存區,PCB(TCP/UDP)以及OS模擬層各個方面

  __ilvInitLwip();

  //設置LW IP,包括添加配置網絡接口,建立接受任務等工作

  __ilvSetLwip();

  //在這里建立LWIP的應用,服務器支持TCP/UDP方式,兩種方式都建立

  }

  底層驅動在服務器每次收發數據中都要調用,這部分代碼需要有良好的健壯性和穩定性。整個實現順序,如圖3所示。

圖3 底層程序框架圖

圖3底層程序框架圖

  發送主線首先是以太網初始化函數(1)開始,調用鏈路層發送函數(2)并增加各層協議頭,再調用RTL8019發送函數(9)發送數據。

  接收主線除初始化以太網外,需調用鏈路層初始化函數(3),(3)中調用(4)初始化RTL8019。

  收到的數據先經過函數(8),然后通過信號量傳送到函數(6),由(6)調用(7)得到數據個數,最后由(5)根據以太網幀頭攜帶的上層協議類型判斷是交給IP協議還是ARP協議處理。

  移植完畢,進行數據收發實驗驗證。使用TCP傳輸協議,由網口虛擬串口軟件VSPM通過串口調試工具收發數據,圖4是以10ms的發送速度在自發自收程序中收發數據的截圖。

圖4 TCP協議數據傳輸界面

圖4TCP協議數據傳輸界面

  由于COM1和COM2被PC機占用,故由網口虛擬出來的串口是COM3,由圖4可看出在面向連接的TCP協議下,高速收發數據不會丟包。

  2.2實時多任務方案的設計

  16個串口分別與網絡端口組成16個雙向通道。為使代碼靈活、透明,程序不使用LWIP提供的SOCKETAPI。應用程序把每個雙向通道分為發送,接收,串口3個任務,加上LWIP本身需占用一個任務,共需建立49個任務。μC/OS-Ⅱ最多能建立64個任務,其中8個操作系統本身占用,剩56個能滿足要求。由VSPM軟件把網口模擬成16個串口,串口服務器偵聽的16個端口分別是1000~1015,如圖5所示。

圖5 網口虛擬擴展16個串口界面

圖5網口虛擬擴展16個串口界面

  網絡端和串口端的數據接收會觸發相應的中斷。每個雙向通道的3個任務各司其職,網口端接收數據中斷后在傳輸層協議判斷信源的端口號,交給相應的接收任務,處理完后交給串口任務把數據從相應串口發送;串口接收數據后在中斷程序中判斷信源的通道號,把數據交給串口任務,處理完后由發送任務通過網口把數據發送出去。

  服務器支持TCP/UDP兩種傳輸協議,下面給出一個通道的TCP傳輸流程圖,UDP部分代碼只需在相應任務中調用LWIP給的UDP函數。TCP模式下串口服務器工作在Server模式,PC機工作在Client模式,流程圖,如圖6所示。

圖6串口服務器單通道程序流程圖

圖6串口服務器單通道程序流程圖

  3.結論

  文中本服務器是以性能不及ARM9且不能使用Linux的ARM7為主控芯片,但兩種開源代碼μC/OS-Ⅱ實時操作系統和LWIP協議棧的有效結合避免了高額的軟件費用,而且能滿足通信要求。實驗證明,基于LWIP和μC/OS-Ⅱ的串口服務器不僅能實現雙向通信,而且傳輸數據實時、準確,符合工業應用的要求。



 

此內容為AET網站原創,未經授權禁止轉載。
主站蜘蛛池模板: 久久国产精品偷| 久久久精品视频在线观看| 国产精品91在线| 国产成人av一区二区三区| 久久亚洲国产精品日日av夜夜| 亚洲专区中文字幕| 国产精品丝袜久久久久久消防器材| 免费91麻豆精品国产自产在线观看 | 久久国产精品久久| 日韩一级片一区二区| 亚洲综合在线中文字幕| 电影午夜精品一区二区三区| 国产日产欧美视频| 久久69精品久久久久久久电影好| 久久天天躁狠狠躁夜夜躁2014| 人人妻人人澡人人爽精品欧美一区| 中文字幕在线亚洲三区| 国产精品久久久久久久久久| 激情伊人五月天| 欧美精品午夜视频| 久久久国产一区二区三区| 久久伊人色综合| 精品麻豆av| 国产欧美一区二区三区视频| 国产精品免费成人| 国产精品久久在线观看| 国产日韩av在线| 国产精国产精品| 91精品久久久久久久久久久 | 久久综合中文色婷婷| 日韩国产一区久久| 日本久久精品视频| 欧美一区二区视频在线| 欧美成人精品三级在线观看| 久久久中精品2020中文| 久久不射电影网| 国产精品裸体一区二区三区| 国产成人精品a视频一区www| 91精品综合久久| 日韩a∨精品日韩在线观看| 欧美亚洲第一页|