MSDOS API 串口只读取最后发送的字符
MSDOS API serial port only reading last sent character
我在汇编程序中使用 MSDOS API 已经有一段时间了,我正在尝试从串行端口构建一个到 read/write 的应用程序。我目前正在使用 VMware Workstation 11 + VSPE (http://www.eterlogic.com/Products.VSPE.html) 来模拟串行端口通信。
我注意到的一件事是,如果我将 "asdfgh" 发送到串行端口,然后在 MSDOS 中读取它(使用中断 21h 函数 03h,但我也尝试了中断 14h 函数 02h),它只returns 最后一个字符读取:"h"
根据我阅读的一些文档,如果应用程序发送数据的速度比我处理它的速度快,字符将会丢失,这意味着有另一种方法可以使 MSDOS 将字节保存到缓冲区(控制流)或我必须编写一个驱动程序来执行此操作(或者可能是一个管理此我不知道的 TSR 程序)。
所以问题是,我必须编写驱动程序还是有其他方法可以做到这一点?
我设法编写了一个打开 16550 FIFO 缓冲区的程序,现在它可以使用 DOS API。
所以它只是 FIFO 缓冲区
无需降低波特率或任何其他方式。尽管如此,如果碰巧有一个 8250,它可能就是那个,或者在它上面实现一个通信驱动程序
此外,这很有帮助:
https://en.wikibooks.org/wiki/Serial_Programming/8250_UART_Programming#UART_Registers
我在汇编程序中使用 MSDOS API 已经有一段时间了,我正在尝试从串行端口构建一个到 read/write 的应用程序。我目前正在使用 VMware Workstation 11 + VSPE (http://www.eterlogic.com/Products.VSPE.html) 来模拟串行端口通信。
我注意到的一件事是,如果我将 "asdfgh" 发送到串行端口,然后在 MSDOS 中读取它(使用中断 21h 函数 03h,但我也尝试了中断 14h 函数 02h),它只returns 最后一个字符读取:"h"
根据我阅读的一些文档,如果应用程序发送数据的速度比我处理它的速度快,字符将会丢失,这意味着有另一种方法可以使 MSDOS 将字节保存到缓冲区(控制流)或我必须编写一个驱动程序来执行此操作(或者可能是一个管理此我不知道的 TSR 程序)。
所以问题是,我必须编写驱动程序还是有其他方法可以做到这一点?
我设法编写了一个打开 16550 FIFO 缓冲区的程序,现在它可以使用 DOS API。
所以它只是 FIFO 缓冲区
无需降低波特率或任何其他方式。尽管如此,如果碰巧有一个 8250,它可能就是那个,或者在它上面实现一个通信驱动程序
此外,这很有帮助:
https://en.wikibooks.org/wiki/Serial_Programming/8250_UART_Programming#UART_Registers