首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

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

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

  摘 要:文中提出了一种低成本、高性能的嵌入式串口服务器的硬软件设计方案。该服务器以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所示。

       
          图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所示。

                       

          图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所示。

       
          图3 底层程序框架图
继承事业,薪火相传
返回列表