gpt4 book ai didi

c - 为什么我在 Windows COM 端口上的串行读取限制为 8192 字节?

转载 作者:太空宇宙 更新时间:2023-11-04 03:13:14 24 4
gpt4 key购买 nike

我正在尝试从 Windows 中的 COM 端口读取 20100 字节。数据被截断为 8192 字节。是什么赋予了?当我使用 TeraTerm 时,没有截断。我的同步调用是:

CreateFile(dev, GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0);

And(非重叠只读的代码片段)

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 字节。

最佳答案

您是否明确指定 8192 作为 SetupComm 函数中的 dwInQueue 参数,或者设备驱动程序默认值为 8192?

如何指定 SetupComm 所需的缓冲区大小?

SetupComm function

Initializes the communications parameters for a specified communications device.
Syntax C++

BOOL SetupComm(  
HANDLE hFile,
DWORD dwInQueue,
DWORD dwOutQueue
);

Parameters
hFile
A handle to the communications device. The CreateFile function returns this handle.

dwInQueue
The recommended size of the device's internal input buffer, in bytes.

dwOutQueue
The recommended size of the device's internal output buffer, in bytes.

对于.NET SerialPort,默认值为4096,最多可以指定2147483647。 SerialPort.ReadBufferSize Property

Gets or sets the size of the SerialPort input buffer.
C#

[System.ComponentModel.Browsable(true)]  
public int ReadBufferSize { get; set; }

Property Value
Int32
The buffer size, in bytes. The default value is 4096; the maximum value is that of a positive int, or 2147483647.

关于c - 为什么我在 Windows COM 端口上的串行读取限制为 8192 字节?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54313240/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com