Привязка объекта к фиксированному адресу памяти
В некоторых случаях может потребоваться выполнение чтения или записи по фиксированному абсолютному адресу памяти.
Простым примером подобной ситуации может быть то, что операционная система 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.