USB串行虚拟COM端口:读取不工作,但写入工作
USB Serial Virtual COM Port : Read not working but write works
我使用嵌入式硬件(由TI提供:Piccolo Control Stick xxx69),该硬件使用FTDI usb到串行转换器硬件。
在PC上,我有一个简单的VC++应用程序,它试图通过虚拟COM端口(VCOM:通常是COM7)与硬件通信。
-
我能够正确连接到端口。
-
我能够将数据从应用程序/PC发送到硬件,并且接收正确。(因此,PC上的Tx工作正常),应用程序首先使用
createfile(... ... ...)
API打开连接,然后使用writefile(.. ... ..)
windows API直接写入端口。 -
令人惊讶的是,我无法从串行端口读取到应用程序。当我调用
readfile(... ... ...)
api时,它返回TRUE状态,但读取了ZERO字节。我尝试使用API监控软件,该软件显示内核APINtreadfile(... ... ...)
,返回错误为STATUS_TIMEOUT" [0x00000102]
。这是令人惊讶的,因为写有效,但读无效,尽管数据在线。
数据在线,因为当我使用普通的超级终端软件时,我能够从控制器中正确读取数据,并且它是可见的。[在控制器方面,一切都很好,因为我们可以在超级终端上看到数据。
我不是windows程序员,因为我处理的是微控制器。因此,在处理这一问题方面提供一些帮助将是非常有帮助的。
谨致问候,
-Varun
这是一个参考
问题已解决。我不得不添加等待,直到InQueue>0(这意味着接收缓冲区中至少有1个字节)或超时(作为安全出口)结束。它会阻塞调用,但目前对我的应用程序来说还可以。waitComm()在这里对我不起作用。
示例片段:
while(1)
{
ClearCommError((HANDLE)*h_drv, (LPDWORD)&Err, &CST);
if((CST.cbInQue >0)||(count >1000000))
break;
count++;
}
相关文章:
- 我的文件无法正常工作,无法从C++文件中读取上下文
- 尝试读取/写入Graphviz DAG值的工作证明会导致segfault
- 读取二进制文件大小的短自上周以来停止工作
- Linux C++读取 UART 设备无法始终如一地工作
- char* 如何读取十六进制的这个整数?它在 ostream::write() 中是如何工作的
- 从工作目录 QtWebEngine 读取文件
- 为什么将uint8_t读取为十六进制没有按预期工作?
- ifstream读取二进制文件在发行模式下工作,但在调试模式下不使用
- C++程序在 freopen 中读取大文本后停止工作
- 读取进程内存无法正常工作,使用 UTF16 字符串
- 当写和读在不同的文件中时,C++二进制读取会产生segfault,但放在一个文件中的相同代码可以工作
- 我无法获得基于读取字符数组的算法来工作
- CMD窗口停止工作,文本文件使用fstream读取错误
- USB串行虚拟COM端口:读取不工作,但写入工作
- 似乎没有任何读取文件的方法可以工作,所有方法都不返回任何东西-C++
- 从文件 C++ 程序读取停止工作
- 正在从工作目录C++中的文件夹中读取
- c++中的文件读取:for和while嵌套循环没有按预期工作:串行
- C++:使用get()读取文件;没有按预期工作
- std::getline() 访问冲突,以前可以工作,但现在无法从任何文件中读取