片上PowerPC在VxWorks下的UDP千兆网通信

网络与存储   作者:中国科学院光电技术研究所 张峰 任国强 时间:2008-06-10来源:单片机与嵌入式系统应用

  ⑥修改sysL ib.c,以显示正确的信息;

  ⑦设置主机IP地址。

  经过以上修改之后,将新的BSP放在Tornado的安装目录Tornado_root\target\config下。根据这个BSP,在Tornado集成环境下生成一个新的VxWorks工程,然后就可以进行一般的嵌入式操作系统开发了。

  EDK中RAM和ROM的地址映射如表1所列。

        

  若为表1所列的工程,则在config.h和Makfile文件中要进行如下修改:

       

  sysNet.c中通过以下语句定义了网络的MAC地址,必须根据真实的MAC地址进行修改,如本文的MAC地址:00:0A:35:01:88:25

       

  sysSerial.c对串口进行初始化,因为要正确地指定串口ID,sysLib.c中可以显示VxWorks镜像的信息,因此也要进行相应的修改,如将

       

  通过对EDK下牛成的BSP的修改,并在Tornado集成环境下生成正确的VxWorks镜像后,可以将其下载到FPGA中。观察串口的输出是否正确,可以进行相应的调试工作,以确定BSP的移植是正确的。

  3 UDP服务器/客户端程序

  对VxWorks BSP进行正确的配置和修改后,在useAppInit.c中书写自己的UDP服务器端程序。本设计用基于socket的UDP通信。

  网络通信一般可通过socket实现。socket编程均采用客户机/服务器模式,VxWorks提供了标准的BSDsocket调用,支持UDP协议。UDP协议即数据传输协议,它允许创建和维护与远程计算机的连接,使其彼此可以进行数据传输。通信过程如图2所示。

  服务器首先调用socket()建立一个套接字socket,然后调用bind()将套接字与一个本地网络地址(IP地址和端口号)捆绑在一起,以保证客户端正确识别。接着服务器再调用listen()使套接字处于被动的准备接收状态,同时规定它的请求队列长度,随后调用accept()来接收客户连接。服务器进程随即进入阻塞状态。客户与服务器的关系是不对称的。服务器先启动。然后在某时刻客户主动发出请求,服务器被动应答。

  客户端程序首先调用socket(),这个函数产生用于与各分系统连接的套接口,并为每个套接口返回一个ID号。然后初始化一个套接口结构体,为其赋上该 ID号以及服务端的IP地址和端口号,并将其作为函数connect()的参数.调用connect()函数主动去连接服务端。

  当服务端与客户端建立连接之后,就可以发送(write)和接收(read)数据。部分代码如下:

       

  客户端应用程序在Windows下用VC实现,代码略。

  4 实验结果

  结合工程实际开发的顺序,分2步对VxWorks下千兆网通信进行测试:

  第1步,在usrAppInit.c中打印hello the world,若出现图3所示窗口,则证明VxWorks内核已正确加载,以及BSP移植的正确性。程序跑到用户编写的usrAppInit.c。

  第2步,对编写的UDP服务器/客户端进行测试,结果如表2所列。

  5 结 论

  由于FPGA中嵌入了PowerPC处理器及用于千兆网通信的Ethernet MAC,这样,为利用FPGA实现高速网络通信奠定了基础。本文在VxWorks操作系统下实现了UDP的千兆网通信,实测速度达到294.68 Mb/s,吞吐量达到近30%。

1 2

关键词: 通信 PowerPC VxWorks UDP 千兆网 SoC

加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW

或用微信扫描左侧二维码

相关文章

查看电脑版