Ада-95. Компилятор GNAT



         

Привязка объекта к фиксированному адресу памяти


В некоторых случаях может потребоваться выполнение чтения или записи по фиксированному абсолютному адресу памяти.

Простым примером подобной ситуации может быть то, что операционная система MS-DOS хранит значение времени в фиксированных адресах памяти 46E и 46C (шестнадцатеричные значения).

Более точная спецификация этих значений следующая:

046E - 046F  -  время дня в часах
046C - 046D  - 

число отсчетов таймера с начала текущего часа

(один отсчет таймера равен 5/91 секунды)

Таким образом, для получения текущего времени необходимо осуществить привязку объекта к фиксированному адресу памяти.

Для осуществления этого, можно привязать переменную Time_Hight типа Integer

к фиксированному адресу 16#046E# следующим образом:

Time_Hight_Address : constant Address := To_Address (16#046E#);

type Time is range 0 .. 65365; for Time'Size use 16;

Time_Hight : Time; for Time_Hight'Address use Time_Hight_Address;

Следует заметить, что здесь, тип Time является беззнаковым 16-битным целым. Величина адреса 16#046E# должна иметь тип Address, который описывается в пакете System. Стандартная функция To_Address, которая выполняет преобразование целочисленного значения в значение адреса, описывается в пакете System.Storage_Elements.




Содержание  Назад  Вперед