新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 通用可靠的串口/以太网网关设计

通用可靠的串口/以太网网关设计

作者:时间:2012-07-18来源:网络收藏

1.2.2 接收
接收使用中断方式,从接收到的字节数据并不直接处理,而是先存入一个环形缓冲,环形缓冲示意图如图4所示。从头偏移处写入,从尾偏移处读出,每写入或读出一字节头或尾都将模递增,且头偏移处为空,尾偏移处为满。

本文引用地址:http://www.eepw.com.cn/article/148750.htm

f.JPG


只要串口接收到数据,就将其从头偏移处写入串口的环形缓冲。如果缓冲满了,则用新数据覆盖未处理的旧数据。
在将一个字节数据写入缓冲的同时,判断其是否等于帧结束定界符EFD,如果等于,则表示缓冲中可能存在一个完整的帧(只是可能,并不能完全确定,因为一个普通的字节数据完全有可能正好等于EFD),此时便可从环形缓冲中按帧格式解析数据。若解析到完整的帧,则做相应的处理:首先,根据帧中FCS字段做差错校验,如果校验正确,则从串口回送一个同序号的确认帧;然后从帧中取出净荷数据从Socket发送。
从缓冲中解析数据的过程简述如下:从环形缓冲的尾偏移处开始读字节数据,查验是否等于帧开始定界符SFD,若不等于则丢弃并继续读下一字节,若等于则向后偏移读取长度域LEN,根据长度值,便能确定帧结束定界符EFD的位置。查验此位置的字节数据,若不等于EFD,则认为之前等于SFD的字节只是个普通数据,并不是帧开始定界符,将其丢弃并继续读取查验下一字节;若等于EFD,则认为SFD到FFD之间为一个完整的帧。
1.3 Socket数据传送
Socket数据传送的帧格式如下:

g.JPG


相比串口帧格式,少了Seq.、Type和FCS字段。这三个字段在串口数据传送中是用来保证性的,而使用TCP Socket,下层的TCP协议会保证通信的性,应用层只需要保证数据的完整性,所以不需要这些字段。其他字段相同,意义也分别相同。
1 3.1 Socket发送
Socket接收过程同串口接收类似,接收的数据并不直接处理,而是先存入环形缓冲。然后,按Socket帧格式,解析环形缓冲中的数据。解析到的数据帧插入串口发送队列,从串口转发。
1.3.2 Socket接收
Socket发送相比串口发送操作更简单,因为下层的TCP协议会保证通信的性,所以不需要再另外实现确认、重发等机制,发送队列中只需要一个待发送队列即可,不需要待确认队列。而且在具体实现中,并没有真的构造一个Socket发送队列,而是利用了操作系统提供的线程间通信机制中的邮箱通信方式,需要从Socket发送数据时,只需将数据的首地址以邮件的方式发送到Socket发送线程指定的邮箱中。

2 实现
2.1 软硬件平台
软硬件平台包括操作系统RT-Thread和ARM9开发板Mini2440。

tcp/ip相关文章:tcp/ip是什么




评论


相关推荐

技术专区

关闭