2015-08-14 33 views
-1

我一直在使用汇编器中的MSDOS API一段时间,我试图构建一个应用程序来读取/写入串行端口。我目前使用VMware Workstation 11 + VSPE(http://www.eterlogic.com/Products.VSPE.html)模拟串口通信。MSDOS API串行端口只读取最后发送的字符

我注意到的一件事是,如果我发送“asdfgh”到串口然后在MSDOS中读取(使用中断21h函数03h,但我也尝试了中断14h函数02h),它只返回最后一个字符读:“h”

根据我读的一些文档,如果应用程序发送数据比我能处理它快,字符将丢失,这意味着要么有另一种方法使MSDOS保存字节到缓冲区(控制流量),或者我必须编写一个驱动程序来完成这项工作(或者可能是一个管理这个我不知道的TSR程序)。

所以问题是,我必须写驱动程序还是有另一种方法来做到这一点?

+0

有一个在编写驱动程序没有意义的。只需直接访问设备(8250/16550)UART)。或者减慢波特率并尽可能快地轮询,以避免字节丢失。 –

+0

问题是数据传输是用户启动的,所以减慢波特率将有所帮助,但是如果其中一个用户需要太长时间才能输入命令,则数据丢失无论如何 –

+0

不,字节将不太可能丢失,如果用户输入较慢。然而,你需要在用户开始输入之前进行轮询**。无论波特率或打字速度如何,已经太晚了。对于像复制字符到屏幕一样简单,这将工作正常。你可以很容易地做到这一点比任何人都可以输入。对于更复杂的文件传输,您需要直接访问硬件,因为MS-DOS(和BIOS)串行API不提供必要的功能。 –

回答