首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 单片机 >

串口接收三种数据,并将其诀别送入对应线程或进程中使用

2013-11-21 
串口接收三种数据,并将其分别送入对应线程或进程中使用用开发板上的串口,随机不停地发送整形、char型、300个

串口接收三种数据,并将其分别送入对应线程或进程中使用
用开发板上的串口,随机不停地发送整形、char型、300个字节。利用串口接收这些数据,将其解析出来分别送入处理整形、char型、300个字节的线程或进程中处理。大体的怎么去实现。
怎样发送这三种数据类型?接收时怎么去解析?协议怎么定?用的S5PV210的开发板 串口 发送三种数据类型 接收怎么解析
[解决办法]
串口发送的数据都是按字节发送的,发送与接收需要定义如何区分整形、char型、300个字节.
比较简单的做法是设定超时时间,根据接收到连续字节的个数来区分.
[解决办法]
这个问题需要在数据链路层协议中解决。

例如,可以将要发送的数据打包,在包头相应的域中指明数据类型(格式)、长度等等。
[解决办法]
PC上位机接收注意 在线程用消息信号量,否则数量大CPU占用率太高,最简单下位机发送数据转换为字符型的明码(速度也很快),但占字节稍多些,
[解决办法]

引用:
Quote: 引用:

PC上位机接收注意 在线程用消息信号量,否则数量大CPU占用率太高,最简单下位机发送数据转换为字符型的明码(速度也很快),但占字节稍多些,



将串口接收到的数据转化成字符明码后直接和int、char、300字节比较大小。是这个意思么?那我数据之间怎么区分?难道用中断的发送方式,来一个转化一个比较一下,这样效率也不高了啊!!

要协议,你直接比较会出问题的
比如,每一帧都以0x12,0x34,0x56,0x78,4字节开头
然后+一个字节的数据类型或者该帧是给谁的,比如给线程1,就0x01,给0x02
然后+二个字节的数据长度,比如你是发300个字节则为0x01,0x2c
然后是数据,比如你那300个字节
最后是校验,把前面所有的用32位(4字节)或者16位(二字节)加起来不足的补零
如上面(按16位加)就是SUM=0x1234+0x5678+0x0101+0x2c..+....
所以最终就是
帧头4字节 0x12 0x34 0x56 0x78
帧所属进程1字节 0x03
帧内数据长度2字节 0x01 0x2c
帧数据....
校验

热点排行