2015-08-14 2 views
-1

Я играл с API MSDOS в ассемблере в течение некоторого времени, и я пытаюсь создать приложение для чтения/записи из последовательного порта. В настоящее время я использую 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

Нет, байты с меньшей вероятностью потеряются, если пользовательские типы медленнее. Тем не менее, вам нужно пройти опрос ** до того, как пользователь начнет вводить текст. После того, как уже слишком поздно, независимо от скорости передачи или скорости набора. Для чего-то простого, как копирование символов на экран, это будет работать нормально. Вы можете легко сделать это быстрее, чем кто-либо может набрать. Для более сложных вещей, таких как передача файлов, вам необходимо получить доступ к оборудованию напрямую, поскольку серийные API MS-DOS (и BIOS) не обеспечивают необходимую функциональность. –

ответ

0

Мне удалось написать программу, которая включает буфер 16550 FIFO, и теперь он работает с использованием DOS API.

Так это просто буфер FIFO

Нет необходимости, чтобы замедлить скорость, или вообще. Тем не менее, если один случается, есть 8250 это, вероятно, что либо или реализовать коммуникационный драйвер поверх него

Кроме того, это помогло:

https://en.wikibooks.org/wiki/Serial_Programming/8250_UART_Programming#UART_Registers