c++ - WriteFile 到串行端口正在工作,但写入的字节数为零
问题描述
问题:我的控制台应用程序(Microsoft Visual Studio C++ 2019)通过 USB 虚拟串行端口发送数据。一切正常,直到 WriteFile(参见我的代码片段)函数报告写入零字节,即使该函数没有失败(WriteFile 返回 TRUE)。GetLastError() 返回 1。请注意 COMM 设置已正确执行(包括读/写超时)。
我知道过去曾提出过非常类似的案例,但实际上我还没有找到关于这个问题的明确解释。
任何想法?
if (!WriteFile(hPort, (LPCVOID)serout, 1 * sizeof(uint16_t), &byteswritten, NULL)) {
printf("Error writing COMM port\n");
return;
}
if (!byteswritten) {
printf("Error bytes written COMM port %d", GetLastError());
}
FlushFileBuffers(hPort);
// COM SETUP
DCB dcb;
HANDLE hport;
std::string strport = "COM1";
TCHAR pcCommPort[16];
COMMTIMEOUTS timeouts;
_tcscpy_s(pcCommPort, CA2T(strport.c_str()));
hPort = CreateFile(
pcCommPort,
GENERIC_READ | GENERIC_WRITE,
0, // must be opened with exclusive-access
NULL, // default security attributes
OPEN_EXISTING, // must use OPEN_EXISTING
0, // not overlapped I/O
NULL); // hTemplate must be NULL for comm devices
if (!GetCommState(hPort, &dcb))
printf("CreateFile failed with error %d.\n", GetLastError());
// Initialize the DCB structure.
SecureZeroMemory(&dcb, sizeof(DCB));
dcb.DCBlength = sizeof(DCB);
dcb.BaudRate = 921600; //256000 Baud
dcb.ByteSize = 8; //8 data bits
dcb.Parity = NOPARITY; //no parity
dcb.StopBits = ONESTOPBIT; //1 stop
if (!SetCommState(hPort, &dcb))
printf("Fail setting serial port\n");
PrintCommState(dcb);
timeouts.ReadIntervalTimeout = 1;
timeouts.ReadTotalTimeoutMultiplier = 1;
timeouts.ReadTotalTimeoutConstant = 1;
timeouts.WriteTotalTimeoutMultiplier = 10;
timeouts.WriteTotalTimeoutConstant = 10;
if (!SetCommTimeouts(hPort, &timeouts))
printf("Fail setting tineout on serial port\n");// setting timeouts failed.
PurgeComm(hPort, PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEAR);
解决方案
推荐阅读
- python - 如何删除discord py中的类别?
- php - 使用 POST ajax 找不到 php 文件
- javascript - Vue.js 从方法访问子属性
- javascript - 如何使用 ProxyRequire 模拟 NodeJs 测试
- flutter - 视频未在圆形路径 Flutter 中完全剪辑
- python - 原始和列上相同 idx 的 Numpy 选择
- c# - 如何强制实现 c# 10 的静态接口属性?
- thingsboard - Thingsboard 多个遥测记录
- android - Android:Recyclerview、数据绑定和视图模型
- algorithm - 一种有效的概率算法,它使用抛硬币获得自然数 N 并返回 0<=R<=N 范围内的随机数 R