嵌入式UDP实验报告.docx
《嵌入式UDP实验报告.docx》由会员分享,可在线阅读,更多相关《嵌入式UDP实验报告.docx(8页珍藏版)》请在冰豆网上搜索。
嵌入式UDP实验报告
物理与电子工程学院
《嵌入式系统设计》
设计性实验报告
题目UDP通信实验
系别物电学院
年级专业
班级电科学号
学生姓名
指导教师浦炜
实验时间2012.5.17
课题要求
本课题的目的:
1.了解UDP协议的工作原理
2.掌握UDP服务端程序和客户端程序的编写流程
3.熟悉程序的调试方法
运行环境:
ADS环境
正文
一.课题分析
编程实现嵌入式开发平台和计算机之间的UDP通讯。
通过触摸屏进行画图,使其在液晶屏上显示,同时通过网络传输数据,使其在计算机屏幕上显示;由计算机控制清除液晶屏上的图形。
在此基础上,通过小键盘控制在触摸屏上绘制的图形,如按键后控制绘矩形等,通过单击击清屏等功能。
二.系统设计
1.UDP通信原理说明
1)、UDP介绍
UDP协议是英文UserDatagramProtocol的缩写,即用户数据报协议,主要用来支持那些需要在计算机之间传输数据的网络应用。
UDP协议从问世至今已经被使用了很多年,虽然其最初的光彩已经被一些类似协议所掩盖,但即使是在今天,UDP仍然不失为一项非常实用和可行的网络传输层协议。
UDP协议的主要作用是将网络数据流压缩成数据报的形式。
一个典型的数据报就是一个二进制数据的传输单位。
每一个数据报的前8个字节用来包含报头信息,剩余字节则用来包含具体的传输数据。
UDP报头由4个域组成,其中每个域各占用2个字节,具体如下图
(1)所示
图
(1)用户数据报格式
2)、UDP通信过程
图
(2)UDP通信过程
2.UDP通信的建立
1)、Socket介绍
从图
(2)网络整体来看,socket是不同主机上应用程序之间的一个虚拟的接口,具有跨平台特性;从程序员角度来看,它是应用程序和网络设备的一个接口,特殊的I/O;从操作系统看,它是一种资源。
如同handle用来描述windows中的窗口等资源,socket用socketdescriptor来标识。
2)、具体介绍socket编程
由前面的叙述可以看出,我们要进行通信就要得到对应的socketdescriptor,一旦得到了,对它进行读写操作就可以了,例如
intread(intfd,char*buf,intlen);
intwrite(intfd,char*buf,intlen);
3)、Socket对IP地址的描述
structsockaddr
{unsignedshortsa_family;/*地址家族2字节*/
charsa_data[14];/*14字节协议地址*/
};
结构中sa_family为套接口的协议族地址类型,例如对于通常的TCP/IP协议(IPv4),它的值是AF_INET;sa_data中存储着具体的协议地址,不同的协议族有不同的地址格式。
sa_data的存储内容往往是包含地址和端口信息,而仅使用一个变量,使用起来不太方便——定义新的Socket地址结构
structsockaddr_in
{shortintsin_family;/*通信类型2字节*/
unsignedshortintsin_port;/*端口,2字节*/
structin_addrsin_addr;/*Internet地址,4字节*/
unsignedcharsin_zero[8];
}
最后的那个元素是填充的空白信息,这样就保持整个结构与sockaddr结构的长度相同。
三.技术实现问题
1.程序分析
1)、主函数---按下
当触屏上按下动作时,为了确保计算机能够收到触摸点就发送两遍触屏点坐标,用MoveTo()函数进行画线如图(3)。
计算机UDP通信窗口可以与开发板相连显示触平板的图形如图(4)
caseTCHSCR_ACTION_DOWN:
scrpoint.x=-1;
sendto(ClientSock_out,(structpoint*)&scrpoint,sizeof(structpoint),0,(structsockaddr*)&servaddr,sizeof(servaddr));
sendto(ClientSock_out,(structpoint*)&scrpoint,sizeof(structpoint),0,(structsockaddr*)&servaddr,sizeof(servaddr));
scrpoint.x=pMsg->WParam&0x0000ffff;
downpoint.x=pMsg->WParam&0x0000ffff;
if(scrpoint.x<1)scrpoint.x=1;
if(scrpoint.x>319)scrpoint.x=319;
scrpoint.y=pMsg->WParam>>16;
downpoint.y=pMsg->WParam>>16;
if(scrpoint.y<1)scrpoint.y=1;
if(scrpoint.y>239)scrpoint.y=239;
sendto(ClientSock_out,(structpoint*)&scrpoint,sizeof(structpoint),0,(structsockaddr*)&servaddr,sizeof(servaddr));
MoveTo(pdc,scrpoint.x,scrpoint.y);//移动
break;
图(3)触摸屏画线
图(4)计算机UDP通信显示
2)、主函数---画同心圆
触摸屏上有单击动作时执行TCHSCR_ACTION_CLICK事件,用Circle()函数以单击点为圆心,以半径为50和100画同心圆。
如图(5)
caseTCHSCR_ACTION_CLICK:
scrpoint.x=pMsg->WParam&0x0000ffff;
if(scrpoint.x<1)scrpoint.x=1;
if(scrpoint.x>319)scrpoint.x=319;
scrpoint.y=pMsg->WParam>>16;
if(scrpoint.y<1)scrpoint.y=1;
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,100);
Circle(pdc,scrpoint.x,scrpoint.y,50);//画同心圆
break;
图(5)触摸屏画同心圆
3)、主函数---按键下画矩形
在按键抬起的时候判断是否有按键按下,根据OSM_KEY条件没有按键按下时flag==0,有按键按下时flag==1则执行TCHSCR_ACTION_UP事件,在屏幕上根据线条的起始点用DrawRectFrame()画出矩形。
如图(6)
caseTCHSCR_ACTION_UP:
if(key_flag==1)
{
scrpoint.x=pMsg->WParam&0x0000ffff;
if(scrpoint.x<1)scrpoint.x=1;
if(scrpoint.x>319)scrpoint.x=319;
scrpoint.y=pMsg->WParam>>16;
if(scrpoint.y<1)scrpoint.y=1;
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;
caseOSM_KEY:
{key_flag=1;}
break;
图(6)触摸屏画矩形
四.总结与体会
UDP通信是嵌入式开发板与计算机之间的通信,从理论课中老师讲述了有关触摸屏的动作与代码编写的相关知识,有单击,双击,移动,按下,抬起等相应动作,之前做过了键盘实验,本次UDP实验中添加了键盘控制画图部分,有关带键盘控制,代码中要添加抬起事件,即TCHSCR_ACTION_UP事件。
实验中出现了一些问题,1.开始将编译好的system.bin文件添加到可移动U盘中,复位后在触摸屏上画线条,但是意想不到的是出现的并不是线条,而是奇怪的图线,这是没有校准的原因,要通过复位后h键进行校准。
2.实验中反复的改代码生成可执行文件,再复位后调用可移动U盘,但是U盘不再显示,后来通过老师的知道,发现大写控制键开着,将输入改成小写就可以了。
实验中触屏所画的图形,例如同心圆,矩形无法在计算机UDP窗口显示出来,开始以为程序有问题,后来回顾老师课上所讲内容才明白是计算机UDP窗口本身没有编写显示圆,矩形以及其他图形的代码。
通过这次的实验,我了解UDP协议的工作原理,掌握UDP服务端程序和客户端程序的编写流程,熟悉了程序的调试方法,学到了更多嵌入式的知识。
设计性实验报告成绩:
指导教师签名: