当前位置: 代码迷 >> 单片机 >> 串口接收三种数据,并将其分别送入对应线程或进程中使用解决方案
  详细解决方案

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

热度:97   发布时间:2016-04-28 15:06:43.0
串口接收三种数据,并将其分别送入对应线程或进程中使用
用开发板上的串口,随机不停地发送整形、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
帧数据....
校验

  相关解决方案