我从离开公司的另一位程序员那里继承了一些代码,遇到了一个奇怪的问题,并且需要一些有关如何甚至开始解决它的指导。
问题是这样的-半定期地,我们发现正在创建重复的USB虚拟通信端口。例如,在我的PC上,当我在“设备管理器”中查看端口并选择“查看隐藏的设备”时,我为同一设备有两个条目-一个在COM6上,一个在COM8上。
不幸的是,我们无法可靠地重现该问题。我们怀疑,当我们的软件正在运行时,有人快速断开连接并重新连接USB电缆时,可能会发生这种情况,但这需要确认。
据我所知,编写该代码的前提是没有人会拔下电缆。在启动软件后,我发现没有任何逻辑可以检测到这种情况。当您重新插入电缆时,它会失败-即使重新插入电缆后,它也会默默地产生读取和写入错误。您必须重新启动该程序,然后它才能再次运行。
我对串行和USB的经验很少,对如何开始解决此问题有点茫然。
谁能说出为什么会这样吗?
杂项详细信息(如果它们可能相关):
USB串行代码在C++ DLL中
VS2008
FTDIBUS USB/串行驱动程序
Windows XP和Win7
重复的注册表项的屏幕截图(请注意所选键的值!)
最佳答案
正如雷蒙德·陈(Raymond Chen)的博客“旧事物”(Old New Thing)所述,以及上面的评论者所述:
总结一下:
因此,如果没有序列号的设备或在Windows注册表中标记为具有重复序列号的设备被插入到以前从未插入过的串行端口中,则它将被视为新设备,而不是重新连接旧设备。如您所描述的,这将导致“Ghost”设备。
制造商明确指出某些FTDI设备存在此问题:
关于c++ - 正在创建重复的USB虚拟串行端口-这可能是什么原因造成的?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10554192/