UDP通讯实验报告.docx
《UDP通讯实验报告.docx》由会员分享,可在线阅读,更多相关《UDP通讯实验报告.docx(11页珍藏版)》请在冰点文库上搜索。
UDP通讯实验报告
《嵌入式系统设计》
设计性实验报告
题目UDP通讯实验
系别物理与电子工程学院
年级09专业电子科学与技术
班级学号
学生姓名XX
指导教师XXX
实验时间2012.5.17
课题要求
1.本课题的目的
1.1.实验目的
熟练掌握ADS1.2开发环境,并利用ARM仿真器进行实验结果的仿真。
理解UDP的实验原理,在已有的实验源代码上进行改写代码,增加一些简单的功能,使其用途更广泛。
利用所学的超级终端设置及BIOS功能,结合ARM实验平台,通过数据传输实现PC机与ARM设备之间的通讯。
1.2.实验要求
(1)触摸画直线;
(2)双击画同心圆;
(3)单击清屏;
(4)通过小键盘控制在触摸屏上绘制的长方形,按任意键然后在触摸屏上画一条线段,以线段为其对角线,自主画长方形。
2.运行环境
硬件:
ARM嵌入式开发板、ARM7TDMI的JTAG仿真器、PC机Pentium100以上;
软件:
ADS1.2集成开发环境(支持ADS10之前的所有ARM系列微控制器,支持硬件或软件调试,)、仿真器驱动程序、UDP.exe软件。
表1ADS1.2集成开发环境的组成
名称
描述
使用方法
代码生成工具
ARM汇编器,ARM的C、C++编译器,ARM连接器
由CodeWarriorIDE调用
集成开发环境
CodeWarriorIDE
工程管理,编译连接
调试器
AXD,ADW/ADU,armsd
仿真调试
指令模拟器
ARMulator
由AXD调用
ARM开发包
一些底层的程序例子,使用程序
由CodeWarriorIDE调用
ARM应用库
C、C++函数库等
用户程序使用
正文
一、课题分析
1.1实验要求
1.1.1.研究内容
通过触摸屏进行画图,使其在液晶屏上显示,同时通过网络传输数据,使其在计算机屏幕上显示;由计算机控制清除液晶屏上的图形。
通过小键盘控制在触摸屏上绘制的长方形,按任意键然后在触摸屏上画一条线段,以线段为其对角线,自主画图;同时还可以双击画同心圆;单击清屏。
1.1.2.设计意义
实现嵌入式开发平台与计算机之间的通讯,使得在触摸板上的信息通过数据传输到达计算机,两边的信息相符合;还可以通过实验开发板上的小键盘输入数字,来完成指定的任务,如:
按“1”画圆,按“2”画长方形等。
1.2UDP协议
1.2.1UDP协议简介
UDP协议即用户数据报协议,主要用来支持那些需要在计算机之间传输数据的网络应用。
包括网络视频会议系统在内的众多客户/服务器模式的网络应用都需要使用UDP协议。
与我们所熟知的TCP(传输控制协议)协议一样,UDP协议直接位于IP(网际协议)协议的顶层。
根据OSI(开放系统互连)参考模型,UDP和TCP都属于传输层协议。
UDP协议的主要作用是将网络数据流压缩成数据报的形式。
UDP报头由4个域组成,其中每个域各占用2个字节,具体如下:
图1用户数据报格式
UDP协议使用端口号为不同的应用保留其各自的数据传输通道。
UDP和TCP协议正是采用这一机制实现对同一时刻内多项应用同时发送和接收数据的支持。
1.2.2UDP协议应用
UDP由于排除了信息可靠传递机制,将安全和排序等功能移交给上层应用来完成,极大得降低了执行时间,使速度得到了保证。
例如视频电话会议系统在内的许多应用都证明了UDP协议的存在价值。
因为相对于可靠性来说,这些应用更加注重实际性能,所以为了获得更好的使用效果(例如,更高的画面帧刷新速率)往往可以牺牲一定的可靠性(例如,画面质量)。
这就是UDP和TCP两种协议的权衡之处。
根据不同的环境和特点,两种传输协议都将在今后的网络世界中发挥更加重要的作用。
二、系统设计
2.1实验设计流程
图2设计流程
实验中,先对ADS1.2集成开发环境中建立新工程,并且进行环境设置,设置Release(Release版本是可以放到实验箱中可以执行的代码)或Debug(Debug编出的文件是用于在现仿真与调试)中的参数。
编写Receive_Task任务,完成ADS开发平台与PC机之间的连接,再进行在线仿真与调试,同时观察UDP界面与触摸屏的图形变化,但触摸屏清屏时UDP界面并不清屏,而利用UDP界面清屏时,直至完成实验现象。
2.2实验代码分析
1.在触摸板上画直线
在触摸屏上画各种曲线,UDP界面也会出现同样的线型。
其实验代码如下:
caseTCHSCR_ACTION_MOVE:
scrpoint.x=pMsg->WParam&0x0000ffff;
if(scrpoint.x<1)scrpoint.x=1;//获取X坐标轴的值
if(scrpoint.x>319)scrpoint.x=319;
scrpoint.y=pMsg->WParam>>16;
if(scrpoint.y<1)scrpoint.y=1;//获取y坐标轴的值
if(scrpoint.y>239)scrpoint.y=239;
sendto(ClientSock_out,(structpoint*)&scrpoint,sizeof(structpoint),0,(structsockaddr*)&servaddr,sizeof(servaddr));
LineTo(pdc,scrpoint.x,scrpoint.y);//画直线
break;
2.单击触摸板清屏
单击触摸板便可以清除触摸板上所画的图形,但不可以清楚UDP界面上的图形。
若直接利用UDP界面清屏,可以同时清除触摸板上的图形。
其代码如下:
caseTCHSCR_ACTION_CLICK:
scrpoint.x=pMsg->WParam&0x0000ffff;
if(scrpoint.x<1)scrpoint.x=1;//获取X坐标轴的值
if(scrpoint.x>319)scrpoint.x=319;
scrpoint.y=pMsg->WParam>>16;
if(scrpoint.y<1)scrpoint.y=1;//获取Y坐标轴的值
if(scrpoint.y>239)scrpoint.y=239;
sendto(ClientSock_out,(structpoint*)&scrpoint,sizeof(structpoint),0,(structsockaddr*)&servaddr,sizeof(servaddr));
ClearScreen();//清零
break;
3.双击画同心圆
双击触摸屏可以画出以触摸点为圆心,分别以20和60cm为半径的同心圆,其代码如下:
caseTCHSCR_ACTION_DBCLICK:
scrpoint.x=pMsg->WParam&0x0000ffff;
if(scrpoint.x<1)scrpoint.x=1;//获取X坐标轴的值
if(scrpoint.x>319)scrpoint.x=319;
scrpoint.y=pMsg->WParam>>16;
if(scrpoint.y<1)scrpoint.y=1;//获取Y坐标轴的值
if(scrpoint.y>239)scrpoint.y=239;
sendto(ClientSock_out,(structpoint*)&scrpoint,sizeof(structpoint),0,(structsockaddr*)&servaddr,sizeof(servaddr));
Circle(pdc,scrpoint.x,scrpoint.y,60);
Circle(pdc,scrpoint.x,scrpoint.y,20);//画同心圆
break;
图3触摸板上的同心圆
4.触摸提起时画矩形
触摸触摸板画直线,画线结束时便可以得到以起点和终点连线为对角线的矩形,该矩形位置与直线的起始有关,其代码如下:
caseTCHSCR_ACTION_UP:
if(Key_flag=1){
scrpoint.x=pMsg->WParam&0x0000ffff;
if(scrpoint.x<1)scrpoint.x=1;//获取X坐标轴的值
if(scrpoint.x>319)scrpoint.x=319;
scrpoint.y=pMsg->WParam>>16;
if(scrpoint.y<1)scrpoint.y=1;//获取Y坐标轴的值
if(scrpoint.y>239)scrpoint.y=239;
sendto(ClientSock_out,(structpoint*)&scrpoint,sizeof(structpoint),0,(structsockaddr*)&servaddr,sizeof(servaddr));
DrawRectFrame(pdc,downpoint.x,scrpoint.y,scrpoint.x,downpoint.y);
//画矩形
Key_flag=0;}
break;}
break;
图4触摸板上长方形
5.按键控制:
按任意键,然后在触摸屏上画上一条直线,在直线结束时,便可以自行画出长方形,与以上实验代码相结合。
其代码如下:
caseOSM_KEY:
{Key_flag=1;}
break;
}
6.数据传输函数:
Send()和recv()这两个函数用于面向连接的socket上进行数据传输;
Send()函数:
intsend(intsockfd,constvoid*msg,intlen,intflags);
recv()函数原型为:
intrecv(intsockfd,void*buf,intlen,unsignedintflags);
Recvfrom()函数:
intrecvfrom(intsockfd,void*buf,intlen,unsignedintflags,structsockaddr*from,int*fromlen);
2.3实验步骤
(1)新建工程→环境设置,其中DebugRel可删除→环境配置,设置属性中的TargetsSettings、ARMLinker中的scattarac(其中用到的scat-ram在3000光盘中的3000的ADS实验中的子文件夹Exp20UDP通讯实验中的init文件夹中)→设置其中的Linker,在ARMfromELF选项中的Outputfilename中输入system.bin,所生成的文件用于后面仿真→选中ARMCComprler中的“ARM/Thumbinterworki”→单击“mark”进行仿真。
(2)运行Windows系统下的超级终端→新建一个通信终端exp5→选择终端的连接串口,并设置通信的格式和协议(波特率为“115200”,数据流控制为“无”)→进入到BIOS状态→输入字母“U”激活平台的USB连接→将前面生成的“system.bin”文件复制到新增的U盘中→观察开发板的变化。
(3)将Exp20UDP通讯实验中的ARM、Exp20_Data、VC三个文件夹拷贝到自己建立的文件夹中,打开VC文件夹中的子文件Debug中的UDP.exe软件,将三者通过硬件设备连接起来,以便观察实验结果。
2.4硬件连线(连线时电源需关闭)
(1)将PC机并口端口与实验操作平台的JTag端口相连接;
(2)连接网线;
(3)插上电源线(黑色的);
(4)连接USB端口。
三、技术实现问题
1.在实验过程中ADS1.2开发平台的IP地址要与超级终端的IP地址以及UDP界面的IP地址要在同一网关,即前三位数字相同,只有最后一位不同。
并且超级终端的IP地址与UDP界面的IP地址相同。
2.在启用超级终端后,完成设置,启动开发板,按住任意键,开发板进入BOIS界面,必须按小写的“u”才能激发平台的USB连接,平台开发可以被PC机认为是一个U盘。
3.在添加触摸板新用途时,中间用到的的变量在调用之前需要定义,如:
intClientSock_out,key_flag;//函数定义
structsockaddr_incliaddr_out;//IPv4套接口地址定义
structpointscrpoint;//触摸点
4.画矩形时,要是矩形的位置随你所画的直线的起始位置相对应,而不是以触摸屏的左上角为起始,就必须添加如下设置:
scrpoint.x=pMsg->WParam&0x0000ffff;
downpoint.x=pMsg->WParam&0x0000ffff;
scrpoint.y=pMsg->WParam>>16;
downpoint.y=pMsg->WParam>>16;
四、总结与体会
通过对UDP通讯实验的学习,我们可以利用以前所学的C语言知识来完成代码的改写,起初还有点担心编程类的实验,怕自己不能够编出可运行的程序来,但真正到了自己动手开始做的时候,感觉和以往的实验一样,通过多次的仿真,检查错误,直至运行结果出来。
看着自己的实验结果,觉得自己的一番辛苦没有白费,花再多的时间也是值得。
通过这几次嵌入式系统实验的学习,我了解到自身在本课程中的诸多不足,但伴随而来的也有淡淡的成功与更进一步的喜悦。
它使我们的理论知识与实践更充分地结合,还具有较强的实践能力。
实验过程中好多代码看起来简单,但要我们自行编程却非常难,这时就需要我们对理论知识的的深入理解。
这次课程设计中遇到了诸如图形位置不能随机显示,UDP界面不现实图形等问题。
在同学的热心帮助和老师的悉心指导下,这些问题都迎刃而解。
这次的实验使我意识到理论知识和实践能力的不足。
所以,在以后的学习生活中,我需要更努力地读书和实践。
还有的就是采纳那些积极有利的知识或信息,这对即将踏入社会的我们来说是宝贵的经验。
参考文献
[1]金建设.嵌入式系统基础教程[M].大连:
大连理工大学出版社.2009
[2]李亚锋,欧文盛等.ARM嵌入式[M].北京:
清华大学出版社.2007
[3]刘凯.ARM嵌入式接口技术应用[M].北京:
清华大学出版社.2009
[4]张石等.嵌入式系统技术教程[M].北京:
人民邮电出版社.2009
设计性实验报告成绩:
指导教师签名: