基于ARM7的串口服务器的实现

基于ARM7的串口服务器的实现,第1张

  摘 要:文中提出了一种低成本、高性能的嵌入式串口服务器的硬软件设计方案。该服务器以ARM7芯片LPC2210为核心控制器, 采用RTL8019以太网控制器处理网络数据, TL16C554异步通信组件处理串口数据。对轻便TCP/ IP协议栈LW IP在μC/OS - Ⅱ实时 *** 作系统中进行了移植, 并对16路串行通道设计了实时多任务方案, 使串口服务器能够以TCP/UDP模式在网口和串口端进行双向232 /485通信。实验证明本服务器能使传输数据实时, 准确。

  通过扩展多串口, 可以在PC端远程监控、管理各种外设, 或对外设进行系统升级。通常串口服务器采用ARM9 微处理器和带TCP / IP协议栈的付费 *** 作系统, 而文中提出的串口服务器是通过移植LW IP协议栈到代码开源的μC /OS - Ⅱ中实现, 这样不但降低成本, 而且代码的编写更加透明、灵活。

  1 硬件系统的设计

  本串口服务器采用Philip s的ARM7 系列芯片LPC2210,网络控制芯片采用RTL8019, 串口采用TL16C554芯片扩展。为得到更广泛的应用, 串口端还扩展485 接口, 通过跳线选择232 /485 方式。系统结构框图, 如图1所示。

  

基于ARM7的串口服务器的实现,图1 系统结构框图,第2张

 

  图1 系统结构框图

  2 软件系统的实现

  串口服务器软件系统包括两部分: TCP / IP协议栈的移植和实时多任务应用程序。μC /OS - Ⅱ在LPC系列ARM中的移植采用周立功公司的方案。

  2.1 TCP / IP协议栈的移植

  LW IP是瑞士人Adma Dumkels等开发的源代码开放的精简TCP / IP 协议栈。目的是在于保证TCP协议完整的情况下减少系统资源的需求, 适合于资源较少的嵌入式系统应用。移植LW IP协议栈主要有两部分代码: (1)编写 *** 作系统模拟层相关代码; (2) LW IP接口初始设置及网卡驱动。

  2.1.1  *** 作系统模拟层相关代码

   *** 作系统模拟层存在的目的主要是在μC /OS - Ⅱ和LW IP之间提供一座桥梁, 使LW IP能与μC /OS - Ⅱ能以相同的规范存在于一个系统中并能相互通信。LW IP有信号量和邮箱两种进程通讯方式, 而μC /OS - Ⅱ也提供这两种进程通讯方式。

  信号量用来同步任务, *** 作函数有sys_new_sem (建立并返回一个新信号量) , sys_ sem _ signal(指定要发送的信号量) , sys_sem_free (指定要释放的信号量) , sys_arch_sem_wait (等待由参数sem指定的信号量并阻塞线程) , 在这些函数体中进行数据结构的初始化并加入μC /OS - Ⅱ中的相关函数便可完成。

  邮箱用来投递消息, LW IP允许将邮箱实现为一个队列,多条消息投递到这个邮箱。

  μC /OS - Ⅱ提供了丰富的消息队列函数, 且μC /OS - Ⅱ和LW IP投递到邮箱中的消息均用指针实现。该系统建立了多个邮箱, 邮箱通过单向链表接在一起。接收消息的最大数量由消息数组决定, 结构图如图2所示。

  

基于ARM7的串口服务器的实现,图2 邮箱数据结构图,第3张

 

  图2 邮箱数据结构图

  邮箱建好后用指针P_Mbox指向节点1, 申请新邮箱将节点1和节点2断开, P_Mbox指向节点1的p stNext, 以此类推。回收时P_Mbox的移动方向与申请时相反, 这样不会浪费内存且比较稳定。由以上结构和μC /OS - Ⅱ提供的函数写出邮箱相关函数。

  除此之外, 还需要编写任务创建函数sys_thread_new和sys_arch_TImeouts函数, 由于每个任务都有TImeouts链表, sys_arch _TImeouts函数返回的sys_TImeouts结构保存了timeouts链表的首地址。

  2.1.2 LW IP初始化设置及底层驱动

  LW IP的初始化设置包含在LW IP通信进程的入口函数中, 其入口函数LwipEntry的基本结构如下:

  Void LwipEntry ( void 3 pvArg)

  {

  / /初始化LW IP, 涉及LW IP使用的内存区,PCB ( TCP /UDP)以及OS模拟层各个方面

  __ilvInitLwip ( ) ;

  / /设置LW IP, 包括添加配置网络接口, 建立接受任务等工作

  __ilvSetLwip ( ) ;

  / /在这里建立LW IP 的应用, 服务器支持TCP /UDP方式, 两种方式都建立

  }

  底层驱动在服务器每次收发数据中都要调用,这部分代码需要有良好的健壮性和稳定性。整个实现顺序, 如图3所示。

  

基于ARM7的串口服务器的实现,图3 底层程序框架图,第4张

 

  图3 底层程序框架图

  

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/dianzi/2713535.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-08-17
下一篇 2022-08-17

发表评论

登录后才能评论

评论列表(0条)

保存