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