相连接的串口。接收到数据后,将MC39i串口接收到的数据发送到接收队列xQRecdFromMC39i中,数据的接收和发送是通过中断服务子程序完成的。
GPRSCo
ctTask实现MC39i模块与GPRS网络的连接,是远程数据传输的基础和关键。
32基于状态机设计GPRS连接任务
由于网络和信号强弱等原因,可能导致节点与GPRS网络连接的失败。本文采用基于状态机的结构设计方法对各个阶段产生的错误进行处理,保障模块与GPRS网络建立可靠连接。程序状态机如图3所示。
f33基于uIP协议栈的传输层软件设计
利用GPRS模块进行数据传输时,数据格式须符合互连网络的TCPIP协议标准。xDataTrsmtTask任务完成传输层和网络层处理。根据系统状态UDP或TCP态,传输层处理方式不同。
TCP提供可靠的数据传输方式,其应用层协议也比较多,被广泛应用于网络通信领域。由于TCP的协议头以及数据传输控制比较复杂,数据的传输效率较低,因而越来越多的实时小数据量的应用,更倾向于使用基于UDP的数据传输协议。
331基于uIP的TCP数据传输方式的实现
本文基于uIPTCPIP协议栈实现TCP数据传输方式。uIP是由AdamDu
kels编写的源代码免费开放的微型TCPIP协议栈,传输层协议实现了UDP和TCP,链路层PPP协议可以作为uIP下面的设备驱动来实现,uIP系统底层和应用程序之间的关系如图4所示。应用程序必须提供一个回应函数给uIP,数据传输任务周期性调用UIP_APPCALL函数处理事件的发生。
f进行TCP数据传输之前,首先通过调用uIP协议栈提供的uip_co
ect函数与监控中心的监控软件建立一个TCP连接,TCP连接的三次握手均由uIP协议栈的uip_process函数完成。
默认情况下,uIP协议栈的发送和接收共用一个缓冲区,当uIP处理缓冲区内数据时,必须关中断,为了提高系统实时性,我们将其改为双缓冲区模式。系统每个时钟节拍分别对发送和接收缓冲区进行扫描,如发现缓冲区非空时,由uIP协议栈处理。接收数据时,uip_process对接收缓冲区内数据进行TCP和IP协议头解析,并将应用数据发送到I
Buffer中。发送数据时,由uip_process完成发送缓冲区OutBuffer中数据的TCPIP封装,再调用uIP驱动程序PPPSe
dData进行链路层PPP协议头的封装,并将封装的数据发送到发送队列xQSe
dToMC39i中。
332UDP数据传输的实现和改进
设计中采用对数据包进行编码和增加握手的方式实现UDP数据传输可靠性的改进。通过给每个UDP数据包加上一个顺序增加的ID号,区别各个不同的数据包,利用它来对丢包的检测。握手过程如图5所示。设计中采用UDPIDProc函数完成握r