当前位置: 代码迷 >> VC/MFC >> 串口接收大量数据,byte数组怎么设置
  详细解决方案

串口接收大量数据,byte数组怎么设置

热度:51   发布时间:2016-05-02 03:27:13.0
串口接收大量数据,byte数组如何设置?
楼主需要做一个串口接收数据的程序,一次性接收的数据大概在256KB左右。为了节省内存,定义两个byte[1024]:a[1024]和b[1024],即当a接收满之后传递给b,a继续接收新的数据,b将数据插入数据库,a存满之后继续传递给B,如此往复

那么问题来了:

1、怎么触发a传递给b这个条件呢?
2、怎么把a复制到b(for循环就不要提了= =),楼主试着用memcpy(a,b,1024)可是提示语法错误

------解决思路----------------------
不是应该memcpy(b,a,1024)吗
------解决思路----------------------
1、串口接收数据时,即使是数据块,也不可能一下就收到。串口的驱动层会将每次收到的数据放在底层的缓冲区中,至于你程序中读出的数据,它们应该就来自底层缓冲区。底层数据读出后就被清空,因此不会读到重复的数据。串口函数提供了一个询问指令用于检查缓冲区的长度,可以通过比较前后读到的长度是否相同,判定数据是否读完。一但读完可以一次将底层数据全部读出。
例:

byte myByte[1024];
DWORD dwErrors; // 错误信息
COMSTAT Rcs; // COMSTAT结构通信设备的当前信息
int Len=0;
LOOP:
ClearCommError(hCom,
&dwErrors,
&Rcs); // 获取读缓冲区数据长度
if(Len!=Rcs.cbInQue) // 数据未收完
{
Len=Rcs.cbInQue;
Sleep(3);
goto LOOP; // 再接收
}

if(Len<1) // 无数据
return;

// 读缓冲区并处理收到的数据

------解决思路----------------------
InBufferCount 属性
      

返回接收缓冲区中等待的字符数。该属性在设计时无效。

语法

object.InBufferCount[ = value ]

InBufferCount 属性的语法包括下列部分:

部分 描述 
object 对象表达式,其值是“应用于”列表中的对象。 
value 整型表达式,说明在接收缓冲区中等待的字符数。 


说明

InBufferCount 是指调制解调器已接收,并在接收缓冲区等待被取走的字符数。可以把 InBufferCount 属性设置为 0 来清除接收缓冲区。

注意   不要把该属性与 InBufferSize 属性混淆。InBufferSize 属性返回整个接收缓冲区的大小。

数据类型

Integer
  相关解决方案