基于ARM-Linux的网络通讯设计实验(上位机)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于ARM-Linux的网络通讯设计实验
——上位机实验部分一.实验目的
1. 掌握基于LabWindows/CVI的上位机网络通讯程序的设计。

2. 掌握上位机与下位机的联调方法。

二.实验内容
在Windows系统的LabWindows/CVI开发环境下用C语言编写基于TCP协议的数据收发的上位机程序,作为客户端,可与下位机服务器端(上次实验完成的ARM-Linux程序)进行数据通讯,即字符串的收与发。

三.预备知识
1. C语言。

2. TCP网络传输协议的原理及工作方式。

四.实验设备与工具
硬件:测试技术与嵌入式系统综合实践平台,微型计算机。

软件:Windows操作系统,LabWindows/CVI,超级终端,ARM-Linux系统的内核映像文件zImage和上次实验完成的ARM-Linux系统的文件系统映像压缩文件initrd.gz。

五.实验原理与说明
1. 网络传输协议
众所周知,当今国际互联网Internet是建立在TCP/IP体系架构基础上的,尽管大名鼎鼎的OSI体系架构是ISO组织为取代TCP/IP而指定的,但由于TCP/IP协议体系出现得较早,并得到了市场的认可和商业上的驱动,应用非常广泛,目前已成为事实上的国际标准。

参照OSI体系架构的术语和概念,可以将TCP/IP体系分为四层结构,从上向下依次是:应用层、传输
其中,网络接口层根据不同的网络物理介质而不同,如同轴电缆、双绞线、光纤、无线等等,一般由硬件实现,并对上层是透明的,软件开发中一般无需考虑这一层。

TCP/IP体系结构中的网络层、传输层和应用层一般是由系统软件实现的。

网络层只运行一个协议,即IP协议,主要是供传输层协议调用的,程序设计者不能直接调用,因此,一般也无需考虑这一层。

TCP/IP体系结构中的传输层运行了两个截然不同的协议,即TCP协议和UDP协议,它们是为不同的应用场合而设计的。

为了方便应用程序的设计,大多数操作系统都提供了TCP和UDP的库函数,如Windows 给出了相应的针对不同传输层协议的API函数,可供程序员选择以设计出满足特定需求的网络应用。

这一层是软件开发中需要考虑的。

TCP/IP体系结构中的应用层协议就很多了,如DNS、TELNET、SMTP、HTTP、FTP等等,它们实际上也是通过调用传输层的TCP协议或UDP协议,为某些特定的通用性很强的应用而设计的。

显然,调用应用层协议比调用传输层协议更简单、更有针对性。

然而,应用层协议一般是针对通用性很强的应用。

因此,网络应用程序的开发只能通过调用传输层的TCP协议或UDP协议来实现系统的网络通信功能。

那么,在测试系统的网络应用开发中,究竟是采用TCP协议还是UDP协议,这里需要进行具体的分析。

1)TCP协议的特点分析
TCP协议(即传输控制协议)是一个面向连接的,具有可靠传输特性的传输层协议,其主要特点有:端口功能和差错检测;差错检验范围是整个报文段;面向连接(需要建立连接及连接管理);有确认重传的可靠性机制,数据按序到达;实现了流量控制和拥塞控制;TCP的首部长度不固定;支持全双工的可靠传输。

可见,TCP协议比较复杂。

其最大的好处就是数据传输的可靠性,尤其是在网络误码率较高的时候,TCP协议可以准确无误的把数据送达目的地。

它适用于数据量较大、且对数据的正确性要求较高的场合,如文件传输、远程登录、电子邮件、网页浏览等。

但TCP协议也因为它的优点而体现出了对应的缺点,那就是复杂的可靠机制降低了传输的效率,特别是连接管理和确认重传机制等措施。

对于数据量较小、且对实时性要求较高的场合,TCP协议就不再适用了。

这也是为什么TCP/IP协议体系需要两种传输层协议的原因。

2)UDP协议的特点分析
UDP协议(即用户数据报协议)和TCP协议相比就简单许多,它不需要建立连接,也不采用可靠的传输机制,其主要特点有:有端口功能和差错检测;差错检验范围是整个报文段;不建立连接、不确认,不重传,数据无序到达;不进行流量控制和拥塞控制;UDP的首部长度固定为简短的8个字节;在局域网内支持广播传输。

可见,简单就意味着高效,UDP协议省去了复杂的连接管理和确认重传的可靠机制,并且其首部长度仅有8个字节,有效数据的占比得以大幅提高。

这种简单的机制带来的最大好处就是数据传输的高效率,非常适用于对实时性要求较高、而对数据正确性要求不高的场合。

然而,对于数据量较大、且对数据的正确性要求较高的场合,UDP协议的数据无序到达和不可靠传输等缺点,使得其无法胜任,尤其是网络状况较差的时候更是如此。

诚然,TCP和UDP是两个优缺点互补的传输层协议,UDP协议的优点恰恰就是TCP协议的缺点,TCP 协议的优点就正是UDP的缺点。

对于测试系统而言,数据传输的有效性和正确性是首要的考虑因素,数据错了,传得再快也无济于事。

因此,对于测试数据的传输,通常采用的传输协议是TCP。

2. LabWindows/CVI 库函数简介
LabWindows/CVI是一款基于C语言的可视化软件开发工具。

它提供了方便快捷的函数模板(Function Panel),指导用户调用函数。

使用方法:在函数名上点右键,选择快捷菜单的“Recall Function Panel ”项,如下图所示。

在各参数上点右键即可弹出该参数的说明,在面板空白处点右键即可弹出该函数的说明。

填写完参数后,点击“Insert Function Call ”工具按钮,即可在源程序的当前光标位置自动插入该语句。

1)建立与TCP服务器连接的函数
ConnectToTCPServer ( ) Establishes a connection between your program and a TCP server specified by a port number and server host name. Your program becomes a TCP client.Thereafter, all
messages from the server are routed through the specified client callback function.
Prototype
int ConnectToTCPServer (
unsigned int * Conversation_Handle,
unsigned int Port_Number,
char Server_Host_Name[],
tcpFuncPtr Callback_Function,
void * Callback_Data,
unsigned int T ime_Out );
2)TCP发送数据的函数
ClientTCPWrite ( ) Allows your program, acting as a TCP client, to send data to the server.The function waits until some data is available at the port or until the specified interval expires. In
previous versions of LabWindows/CVI, the function did not wait if no data was
available at the port. This change might require modifications to your existing source
code.
Prototype
int ClientTCPWrite (
unsigned int Conversation_Handle,
void * Data_Pointer,
unsigned int Data_Size,
unsigned int Time_Out );
3)TCP接收数据的函数
ClientTCPRead ( ) Allows your program, acting as a TCP client, to request data from the server.
The function waits until some data is available at the port, or until the specified interval
expires. In previous versions of LabWindows/CVI, the function did not wait if no data
was available at the port. This change might require modifications to your existing
source code.
Prototype
int ClientTCPRead (
unsigned int Conversation_Handle,
void * Data_Buffer,
unsigned int Data_Size,
unsigned int Time_Out );
六.实验步骤
1. 在Windows操作系统下找到LabWindows/CVI应用程序图标,点击进入LabWindows/CVI编程坏境
2. 源程序的编写。

在LabWindows/CVI坏境下打开client工程文件,根据提示补全相关代码。

图1建立与TCP服务器连接
图2 TCP发送数据
图3 TCP接收数据
图4 断开与TCP服务器的连接
3. 上位机与下位机的TCP网络通讯测试。

步骤如下:
(1)连接实验平台。

用串口线和交叉网线将实验平台的ARM模块与PC机的对应接口连接,然后接通实验平台的电源线。

(2)打开超级终端,如下图所示。

首次设置超级终端将会出现如下图所示的对话框,点击“确定”。

(3)设置超级终端。

首次设置超级终端将会出现如下图所示的对话框,输入任意的区号(如028),点击“确定”。

接着出现如下图所示的对话框,直接点击“确定”。

接着出现如下图所示的对话框,输入任意名称,如9200 。

点击“确定”。

接着出现如下图所示的对话框,选择串口(默认为COM1)。

直接点击“确定”。

接着出现如下图所示的对话框,设置属性,请按下图设置为:115200,8,无,1,无。

点击“确定”。

至此,超级终端的设置完毕。

(4)实验平台通电或按下ARM板上的复位按钮,可以看到ARM板上的指示灯闪亮。

此时,超级终端中将显示ARM的启动过程(说明:超级终端作为ARM的控制台,起到键盘和显示器的作用)。

在时间提示出现时马上按下回车键,进入Uboot命令行模式,如下所示。

(说明:Uboot类似于PC机的BIOS程序,用于引导和启动ARM系统,并提供了一些简单的操作命令)
(5)Uboot网络参数的设置。

注意:PC机必须和ARM模块在一个网段(IP地址的前三个数相同,最后一个数不同)
首先,PC机的IP地址可在Windows桌面的网上邻居的属性中设置。

然后,在超级终端窗口的Uboot命令行中输入如下命令:
printenv (查看当前的Uboot环境参数的设置情况)
setenv ipaddr IP地址(设置ARM模块的Uboot系统的IP地址,要求与PC机在同一网段,且与
server.c中设置的IP地址不同)
setenv serverip 服务器IP地址(服务器IP地址就是PC机本身的IP地址)
(6)在PC上运行一个TFTP服务器程序,以便用TFTP协议与ARM模块上的Uboot进行网络通讯,本实验采用的是TFTPD32。

运行TFTPD32后如下图所示。

点击“Browse”设置当前目录为文件zImage和initrd.gz所在的目录,“Server interfaces”为PC机与ARM模块连接的网口的IP。

(7)输入命令(区分大小写):
tftp 20008000 zImage,传输Linux内核到SDRAM的20008000地址。

(8)输入命令:
tftp 20700000 initrd.gz,传输Linux文件系统到SDRAM的20700000地址。

(9)输入命:
go 20008000 ,从内核的起始地址20008000开始运行ARM_Linux系统。

(10)运行上位机测试程序client.c,输入ARM模板的IP地址(在ARM_Linux程序server.c中设置的),点击“连接”与ARM模块建立TCP连接,然后发送字符串,验证接收到的字符串是否正确,如下图所示。

同时,在超级终端中观察ARM模块显示的信息。

相关文档
最新文档