您好,我有一个应用程序在几年前在C++构建。
它用于通过串口控制设备。
我记得开发它的人说他的软件直接访问串口(直接访问内存)。
由于现在具有串口的PC越来越少,如果我使用PCI扩展串口,软件还能直接访问串口吗?
谢谢
发布于 2012-06-01 18:08:00
这在一定程度上取决于您的PCIe串行端口对向后兼容驱动程序的支持程度。
如果它提供了一个(可能是虚拟的)16550 UART的registers的直接I/O空间映射,你将需要改变软件中的“基址”,但之后它可能会工作,如果驱动程序不能工作,那么它就不会工作。
前四个标准串行端口具有以下基地址和与之关联的中断:
| base IRQ
-----------------
COM1 | 0x3f8 IRQ4
COM2 | 0x2f8 IRQ3
COM3 | 0x3e8 n/a
COM4 | 0x2e8 n/a软件可能应该重写,以使用更高级别的端口访问权限。
发布于 2012-06-02 06:26:02
我相信绝大多数local bus串行端口卡都是模拟16x50 RS-232 UART的。除非您打算使用某些特殊的卡,例如那些用于管理调制解调器组的昂贵的多端口卡,否则它可能会很好。
USB/RS-232 converters则完全是另一回事--一般来说,它们不能与直接访问串行端口的软件一起工作,因为它们的驱动程序只提供通过操作系统串行端口子系统的访问。即使它们的驱动程序设法模拟了适当的本地总线UART,这些转换器通常具有不同的行为w.r.t。可能导致软件对串行端口执行不寻常操作的信号计时问题。例如,我在将IR remote control receivers连接到一些USB/RS-232转换器时遇到过问题。使用支持USB 2.0的转换器在一定程度上有所帮助,但它仍然离真正的东西很远。
您还应该记住,如果您的应用程序是为较旧的操作系统设计的,则该操作系统的较新版本可能不再允许直接访问串行端口。
如果所有其他方法都失败了,您仍然可以通过使用虚拟机来改善这种情况。例如,VirtualBox允许客户操作系统访问主机串行端口,从而模拟16550A UART。这可能允许您绕过不支持或不允许直接访问串行端口的驱动程序或操作系统。
发布于 2012-06-01 20:16:04
我四处寻找,发现一些PCI卡将它们的串行端口映射到内存。我将尝试其中的一个。
谢谢你们所有人。
https://stackoverflow.com/questions/10848253
复制相似问题