На самом деле есть два пути.
Один из них — установить указатель на адрес, который вы хотите использовать, и получить доступ к объекту через указатель.
type Video_RAM_Pointer is access all My_Video_Ram_Struct;
package Convert is new System.Address_To_Access_Conversions (Video_RAM_Pointer);
Video_RAM : constant Video_RAM_Pointer := Convert.To_Access (16#B8000#);
Другой — наложить ваши данные прямо поверх местоположения.
Video_RAM : My_Video_RAM_Struct;
for Video_RAM'address use at 16#B8000#;
Как правило, я предпочитаю использовать первый. Среди прочего, последнее считается объявлением, что означает, что любые поля в My_Video_RAM_Struct, имеющие код инициализации, будут повторно инициализироваться каждый раз, когда вы объявляете оверлей. Кроме того, у людей возникает искушение чрезмерно использовать (злоупотреблять) эту функцию для создания псевдонимов объектов повсюду, что сложно как для оптимизатора, так и для программиста, занимающегося сопровождением.
Метод указателя просто говорит компилятору предположить, что данный адрес содержит структуру, которую вы ему сказали, что, ИМХО, именно то, что вы хотите.
person
T.E.D.
schedule
30.05.2012