Порты ввода/вывода
Системы реального времени должны иметь возможность читать и писать данные в устройства. RTX-интерфейсы портов ввода/вывода позволяют осуществлять это без необходимости переключения в режим ядра. Отпадает необходимость написания драйвера для каждого устройства, к которому необходимо получить доступ. Кроме того, устраняются задержки, связанные с запросом обслуживания драйвером при каждом обращении к устройству.
Порт ввода/вывода предоставляет альтернативный метод прямого общения с аппаратурой. В адресном пространстве ввода/вывода у процессоров Intel каждый адрес представляет собой 8-ми битный “порт”, который обычно соответствует 8-ми битному управляющему регистру устройства. Хотя последовательные адреса могут представлять байты в многобайтовом порту, разработчики обычно используют подход, при котором существует однобайтовый порт, а многобайтовые величины обычно вводятся, как последовательные однобайтовые записи в порт.
Перед любым вводом/выводом из портов необходимо разрешить доступ к портам. Это осуществляется посредством функции RtEnablePortIo, параметром которой является диапазон портов ввода/вывода, к которым надо получить доступ. После этого для передачи данных можно использовать функции RtWrite* и RtRead*.
API управления портами ввода/вывода
Следующие функции служат для управления портами ввода/вывода:
RtEnablePortIo - разрешает прямой доступ к портам ввода/вывода для указанного диапазона адресов
RtDisablePortIo - запрещает прямой доступ к портам ввода/вывода для указанного диапазона адресов
API передачи данных
Следующие функции служат для передачи данных из/в портов ввода/вывода:
RtReadPortUchar,RtReadPortUshort,RtReadPortUlong - напрямую читают одно-, двух-, четырехбайтовые данные из указанного порта
RtWritePortUchar,RtWritePortUshort,RtWritePortUlong - напрямую пишут одно-, двух-, четырехбайтовые данные в указанный порт
RtReadPortBufferUchar,RtReadPortBufferUshort,RtReadPortBufferUlong -
копируют одно-, двух-, четырехбайтовые данные из указанного порта ввода/вывода в буфер
RtWritePortBufferUchar,RtWritePortBufferUshort,RtWritePortBufferUlong - копируют одно-, двух-, четырехбайтовые данные из буфера в указанный порт ввода/вывода
Общие замечания по программированию
Интерфейсы RTX написаны на ассемблере и используют вызов _ _stdcall. Это означает, что подпрограмма ответственна за очистку стека. Вы не должны использовать другие другие соглашения о вызове (это может вызвать проблемы с компилятором).