当前位置:首页 >> 技术频道 >> 嵌入式开发

基于以太网的新型嵌入式远程控制系统

来源:微计算机信息 作者:王海涛 李磊 发布时间:2009-06-23 09:34:27 发表评论

摘要:本文针对CAN总线网络与以太网的互联问题进行介绍,开发了基于μC/OS-II的CAN-TCP/IP嵌入式系统,完成了系统相关软硬件设计。

关键词:嵌入式远程控制系统

 

  4.1 嵌入式TCP/IP协议结构栈设计

  嵌入式TCP/IP协议栈的结构比个人电脑中Windows或UNIX的协议栈要简单的多,功能也弱很多。可以实现低流量、低速度、少接口、少连接的要求。

  本系统TCP/IP协议栈是以μC/OS-II操作系统为平台的。整个协议栈要完成两大功能:发送数据报和接收数据报。功能的实现通过系统下编写的三个任务完成。第一个是接收数据报并进行ICMP, ARP处理任务,第二个是UDP接收任务,第三个是TCP接收任务。每个任务由若干程序模块组成。任务之间的通讯采用的是信号量或是消息队列实现。图4所示为协议栈实现的流程图。

  图示中标出了整个协议栈的分层结构。接收任务与UDP和TCP任务的通讯是通过消息队列实现的。而UDP接收任务和TCP接收任务是通过SOCKET接口与应用层的程序进行通讯的。

  1、数据报的接收,数据报的接收是通过一个任务进行的,同时也包括ICMP和ARP处理,即接收和ICMP, ARP处理任务。在整个任务调度中,该任务的优先级较高,通过时间片来触发。数据报的接收过程是由下层协议调用上层协议进行的。接收任务中的接收函数,即数据链路层函数Rec_Packet(),它在接收时调用本层函数Rec_Ethernet_Packet()进行以太网数据处理。而Rec_Ethernet_Packet()又调用网络层函数IP_PROCESS()函数进行处理,对不同类型的IP报进行分类。这些都是在网络层进行。如果是ICMP报,就交给icmp_process()函数处理。而TCP或UDP报就通过消息队列交给TCP或UDP处理任务去执行。同时Rec_Ethernet_Packet()根据不同的IP段决定是否进行ARP处理。具体流程如图5。

  

 

  2、数据报的发送。数据的发送与数据报的接收是一个相反的过程,由上层协议函数调用下层协议函数。传输层TCP , UDP处理函数或SOCKET接口函数通过调用网络层函数Send_Ip_Frame()来发送IP报。而Send_Ip_Frame()函数调用Send_Ip_To_LLC()函数来处理IP地址对应MAC地址的事情,然后Send_Ip_To_LLC()调用下层数据链路层函数Send_ethernet_Frame()函数进行发送,最后调用驱动程序的发送函数Send_Pack().

  4.2 系统应用层程序设计

  应用层软件操作的思路为:当连接在CAN总线上的设备向Ethernet网发送数据时,数据首先通过CAN接口电路发送到主系统,通过应用层协议中对应的程序,提取需要传送的数据,然后对数据分别添加TCP和IP层所需要的信息。ARM处理器将经过封装的数据发送给以太网控制芯片DM9000。由于Ethernet物理层和逻辑链路层都是由DM9000实现的,所以DM9000自动给这些数据添加以太网物理层和逻辑链路层所需要的相关信息,通过物理接口传送到以太网上。这时监控计算机就可以通过网卡接收到CAN总线上设备所传递过来的信息。反之,当监控计算机向总线上设备发出控制信息时,它首先将数据发送到以太网控制器DM9000,核心处理器LPC2290从DM9000中接收到数据时,提取实际要传送的数据,然后封装成CAN总线数据格式,通过CAN总线将数据发送到网络中的现场设备。

  本文作者创新点

  本文针对CAN总线网络与以太网的互联问题进行介绍,开发了基于μC/OS-II的CAN-TCP/IP嵌入式系统,完成了系统相关软硬件设计。

0
顶一下
0
踩一下

相关文章

发表评论

请自觉遵守互联网相关政策法规,作者管理后台可以删除恶意评论、广告和违禁词语。