【发布时间】:2019-01-22 17:09:47
【问题描述】:
我正在尝试从 Windows 中的 COM 端口读取 20100 个字节。数据被截断为 8192 字节。是什么赋予了?当我使用 TeraTerm 时,没有截断。我的同步调用是:
CreateFile(dev, GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0);
And(非重叠只读代码 sn-p)
DWORD dwEventMask, dwIncommingReadSize;
int dwSize=0;
char szBuf[10];
if(!SetCommMask((void *) fd, EV_RXCHAR)) {THIS_RTN_ERROR}
do {
if(ReadFile((void *) fd, szBuf, 1, &dwIncommingReadSize, NULL) != 0) {
if(dwIncommingReadSize > 0) {
for (k=0; k<dwIncommingReadSize; k++) {
*(line_buf+dwSize+k) = szBuf[k];
}
dwSize += dwIncommingReadSize;
}
}
else {THIS_RTN_ERROR;}
} while(dwIncommingReadSize > 0);
k = dwSize;
return(k);
这发生在 WriteFile 之后。我反复调用这段代码,直到我得到所有数据——除了我只得到 8192 个字节。
【问题讨论】:
-
数组的定义是什么:
line_buf[] -
代码是否试图读取刚刚写入 COM 端口的数组?有什么硬件可以实际回显数据?您的代码是否检查写入操作的结果以确保所有数据都已写入?丢失的数据是从写入数据的开头还是结尾?
-
为什么要投到
(void *) fd,这让我觉得代码正在做一些尚未发布但不应该发布的事情。推荐minimal reproducible example。 -
简单,我使用 fd 作为套接字或指针,它是一个需要强制转换的长整数(实际上只是没有警告)。那个,我没有问题。至于数据和数组的性质,我给出命令“FORM4; OUTPDATA?;”到 USB 到 GPIB 适配器,适配器响应 20100 个格式化 S 参数数据的 ASCII 字符,实数/虚数对以逗号和 CR 分隔。仅呈现前 8192 个字节。
标签: c windows serial-port usb