我的购物车(0)
Globalicnet.com 解决方案综合区 >>

基于UDP协议的ARM、X86平台之间的通讯方案

1iczoo 发表于 2014/5/4 9:09:48
功能构想实现了基于UDP协议的ARM、X86平台之间的通讯,从而提出了基于UDP协议的ARM与其它平台之间通讯的解决方案
市场与应用描述工业控制、无线通讯领域、消费类电子产品、成像和安全产品
  • 1190
    浏览
  • 1
  • 0
器件组合M2S050T-1FG896I
详细描述

导读:本文介绍了通过案例,首先在触摸屏进行画图,使其在液晶屏上显示,同时通过网络传输数据,使其在计算机屏幕上显示,并由计算机控制清除液晶屏上的图形,实现了基于UDP协议的ARM、X86平台之间的通讯,从而提出了基于UDP协议的ARM与其它平台之间通讯的解决方案。

0引言

随着人工智能的应用,ARM产品已经遍布到各个领域:工业控制、无线通讯领域、消费类电子产品、成像和安全产品,包括现在流行的数码相机和打印机中绝大部分采用ARM技术,手机中的32位SIM智能卡也采用了ARM技术。除此以外,ARM微处理器及技术还应用到许多不同的领域,并会在将来取得更加广泛的应用,因此,ARM与其它平台之间通讯就显得尤为重要。

1.UDP协议本质

UDP协议是英文User Datagram Protocol的缩写,即用户数据报协议,主要用来支持那些需要在计算机之间传输数据的网络应用。包括网络视频会议系统在内的众多客户/服务器模式的网络应用都需要使用UDP协议。UDP协议从问世至今已经被使用了很多年,虽然其最初的光彩已经被一些类似协议所掩盖,但即使是在今天,UDP仍然不失为一项非常实用和可行的网络传输层协议。

UDP协议使用端口号为不同的应用保留其各自的数据传输通道。UDP和TCP协议正是采用这一机制实现对同一时刻内多项应用同时发送和接收数据的支持。数据发送一方(可以是客户端或服务器端)将UDP数据报通过源端口发送出去,而数据接收一方则通过目标端口接收数据。有的网络应用只能使用预先为其预留或**的静态端口;而另外一些网络应用则可以使用未被**的动态端口。因为UDP报头使用两个字节存放端口号,所以端口号的有效范围是从0到65535.一般来说,大于49151的端口号都代表动态端口。

数据报的长度是指包括报头和数据部分在内的总的字节数。因为报头的长度是固定的,所以该域主要被用来计算可变长度的数据部分(又称为数据负载)。数据报的最大长度根据工作环境的不同而各异。从理论上说,包含报头在内的数据报的最大长度为65535字节。不过,一些实际应用往往会限制数据报的大小,有时会降低到8192字节。

UDP协议使用报头中的校验值来保证数据的安全。校验值首先在数据发送方通过特殊的算法计算得出,在传递到接收方之后,还需要再重新计算。

如果某个数据报在传输过程中被第三方篡改或者由于线路噪音等原因受到损坏,发送和接收方的校验计算值将不会相符,由此UDP协议可以检测是否出错。其实在UDP协议中校验功能是可选的,如果将其关闭可以使系统的性能有所提升。这与TCP协议是不同的,后者要求必须具有校验值。

2.实现案例

实现案例如下:在触摸屏进行画图,使其在液晶屏上显示,同时通过网络传输数据,使其在计算机屏幕上显示,并由计算机控制清除液晶屏上的图形。

步骤如下:

(1)新建工程

(2)在main.c文件中编辑初始化网络函数void InitNetWork()//初始化网络{

U32 ipadd***,ipmaskadd***,ipgateadd***;

U8 *Mac;

ipadd***=Get_ipaddr();//获取IP地址

ipmaskadd***=Get_maskaddr();//获取子网掩码

ipgateadd***=Get_gwaddr();//获取网关

Mac=Get_mac();//获取网卡地址NetPortChoose(0);

//选择网口,必须在配置网络以前进行

initOSNet(ipadd***, ipmaskadd***,

ipgateadd***,Mac);//配置网络

OSTimeDly(1000);//任务挂起1秒

printk(“init Ethernet and UDP is

ok!\n“);

}

(3)定义计算机端套接字,全局变量(4)编写Main_Task任务及消息循环主要负责响应触摸屏消息,在屏幕上画图,然后将数据传输到计算机上。

对触摸屏消息的处理和键盘消息类似,其消息类型pMsg->Message为OSM_TOUCH_SCREEN,消息参数pMsg->LParam中包含了触摸屏的动作信息,定义如下:

#define TCHSCR_ACTION_NULL

0

#define TCHSCR_ACTION_CLICK 1 //触摸

屏单击

#define TCHSCR_ACTION_DBCLICK 2 //触

摸屏双击

#define TCHSCR_ACTION_DOWN 3 //触摸

屏按下

#define TCHSCR_ACTION_UP 4 //触摸

屏抬起

#define TCHSCR_ACTION_MOVE 5 //触摸

屏移动

消息参数pMsg->WParam中则包含了触摸

点的坐标信息,低16位是X坐标值,高16位是Y坐标值。这里当触摸屏产生“按下”动作后采用MoveTo()函数设置绘图起始点坐标,当产生“移动”动作后采用LineTo()函数绘制线段。

3.解决方案

3.1建立Socket

为了建立建立S o c k e t,程序可以调用Socket函数,该函数返回一个类似于文件描述符的句柄。socket函数原型为:

int socket(int domain, int type,intprotocol);

domain指明所使用的协议族,通常为PF_INET,表示互联网协议族(TCP/IP协议族);type参数指定socket的类型:SOCK_STREAM或SOCK_DGRAM,Socket接口还定义了原始Socket(SOCK_RAW),允许程序使用低层协议;protocol通常赋值“0”。Socket()调用返回一个整型socket描述符,你可以在后面的调用使用它。

Socket描述符是一个指向内部数据结构的指针,它指向描述符表入口。调用Socket函数时,socket执行体将建立一个Socket,实际上“建立一个Socket”意味着为一个Socket数据结构分配存储空间。Socket执行体为你管理描述符表。

两个网络程序之间的一个网络连接包括五种信息:通信协议、本地协议地址、本地主机端口、远端主机地址和远端协议端口。Socket数据结构中包含这五种信息。

3.2配置Socket

通过socket调用返回一个socket描述符后,在使用socket进行网络传输以前,必须配置该socket.面向连接的socket客户端通过调用Connect函数在socket数据结构中保存本地和远端信息。无连接socket的客户端和服务端以及面向连接socket的服务端通过调用bind函数来配置本地信息。

Bind函数将socket与本机上的一个端口相关联,随后你就可以在该端口监听服务请求。

Bind函数原型为:

int bind(int sockfd,struct sockaddr*my_addr,int addrlen);

Sockfd是调用socket函数返回的socket描述符,my_addr是一个指向包含有本机IP地址及端口号等信息的sockaddr类型的指针;addrlen常被设置为3.3建立连接

面向连接的客户程序使用Connect函数来配置socket并与远端服务器建立一个TCP连接,其函数原型为:

int connect(int sockfd,struct sockaddr*serv_addr,int addrlen);

Sockfd是socket函数返回的socket描述符;serv_addr是包含远端主机IP地址和端口号的指针;addrlen是远端地址结构的长度。

Connect函数在出现错误时返回-1,并且设置errno为相应的错误码。进行客户端程序设计无须调用bind(),因为这种情况下只需知道目的机器的IP地址,而客户通过哪个端口与服务器建立连接并不需要关心,socket执行体为你的程序自动选择一个未被占用的端口,并通知你的程序数据什么时候到达端口。

Connect函数启动和远端主机的直接连接。只有面向连接的客户程序使用socket时才需要将此socket与远端主机相连。无连接协议从不建立直接连接。面向连接的服务器也从不启动一个连接,它只是被动的在协议端口监听客户的请求。

Listen函数使socket处于被动的监听模式,并为该socket建立一个输入数据队列,将到达的服务请求保存在此队列中,直到程序处理它们。

int listen(int sockfd,int backlog);

首先,当accept函数监视的socket收到连接请求时,socket执行体将建立一个新的socket,执行体将这个新socket和请求连接进程的地址**起来,收到服务请求的初始socket仍可以继续在以前的socket上监听,同时可以在新的socket描述符上进行数据传输操作。

3.4传输数据

Send()和recv()这两个函数用于面向连接的socket上进行数据传输。

Sockfd是你用来传输数据的socket描述符;msg是一个指向要发送数据的指针;Len是以字节为单位数据的长度;flags一般情况下设置为0(关于该参数的用法可参照man手册)。

Send()函数返回实际上发送出的字节数,可能会少于你希望发送的数据。在程序中应该将send()的返回值与欲发送的字节数进行比较。当send()返回值与len不匹配时,应该对这种情况进行处理。

3.5传输结束

当所有的数据操作结束以后,你可以调用close()函数来释放该socket,从而停止在该socket上的任何数据操作。

 

附件下载:没有附件
资源供应商:ARM, NXP , ST
您可能感兴趣的还有:

医疗器械中的灵活性设计

在医疗器械设计中,灵活性好的零部件能够降低成本、加速上市、减少装配时间以及简化供应链。如果有一个产品平台能够提供各种选件,那么医疗器械设计人员就能够快速地选择满足其应用要求的产品,而不必花费高昂的成本去定制。   霍尼韦尔传感与控制部已经对其传感器产品线进行了平台化处理,能够满足设计团队快速开发样品、更改设计以及生产的要求。通过迅速提供多种选件及零部件,我们能够帮助设计人...[详细]

联芯科技LC1813芯片加速千元智能终端“四核时代”

在2013松山湖IC高峰论坛上,联芯科技展示了其支持TD的手机芯片——四核Cortex A7芯片LC1813。这颗芯片支持双卡双待,双卡支持不同运营商,并支持最新Android 4.2操作系统。目标市场是700元左右的手机市场。据透露,目前已有公司在用这颗芯片做平板。LC1813的出现势必加速千元智能终端“四核时代”的到来。[详细]

展讯平台平板解决方案,超高性价比,值得期待!

平板电脑产品形态越来越丰富,市场容量也不断增长,低成本,高性能成为了众多厂商的追求。CEAC应市场需求,通过展讯SC5735平台,打造高性价比的平板电脑完整解决方案。SC5735集成了四核的ARMCortex-A7处理器,支持Android4.4和双频WCDMA/HSPA+以及四频GSM/GPRS/EDGE通信标准。搭配DDR3和内存,实现支持通话功能的平板电脑,除了支持2G通话功能外,还可以实现...[详细]

面向先进驾驶辅助系统的产品线

日前,德州仪器 (TI) 宣布推出其视觉软件开发套件 (SDK),从而为开发人员提供了一款灵活的框架、一组丰富齐全的硬件设备驱动程序和一套适用的开发工具,可帮助用户依靠 TI 的异型架构打造更加高效的先进驾驶辅助系统 (ADAS) 实施方案。基于 TI 广受欢迎的 SYS/BIOS RTOS 的创新型 TI 视觉 SDK 使得能够在众多的异型内核上并行运行多种算法,并更加容易地将新的功能集成到系统...[详细]

基于STC89C52单片机的客车安全系统设计与实现

为增加客车的安全性,提出了一种基于STC89C52单片机同时具有防超载和防撞功能的客车安全系统。通过研究超声波测距原理和脉冲宽度调制原理,并对车身重量和障碍物的距离进行实时监测以实现其功能。对该系统的安全性能和测量精度进行了测试,结果表明,系统达到了设计要求。 统计表明,在关于客车的交通事故中,超速和超载是事故发生的主要原因。本设计针对如何预防因超速而产生的车辆撞击和防超载的发生进行了一次探...[详细]