片上PowerPC在VxWorks下的UDP千兆网通信
⑥修改sysL ib.c,以显示正确的信息;
本文引用地址:http://www.amcfsurvey.com/article/83944.htm⑦设置主机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%。
评论