Абсолютные сегменты памяти
Наиболее простой способ определения сегментов это использование абсолютных сегментов памяти. При этом способе распределение памяти ведётся вручную точно так же, как это делалось при использовании директивы EQU. В этом случае начальный адрес сегмента жёстко задаётся программистом и он же следит за тем, чтобы сегменты не перекрывались друг с другом в памяти микроконтроллера. Использование абсолютных сегментов позволяет более гибко работать с памятью данных, так как теперь байтовые переменные в памяти данных могут быть назначены при помощи директивы резервирования памяти DS, а битовые переменные при помощи директивы резервирования битов DBIT.
Для определения абсолютных сегментов памяти используются директивы:
· BSEG - абсолютный сегмент в области битовой адресации;
· CSEG - абсолютный сегмент в области памяти программ;
· DSEG - абсолютный сегмент в области внутренней памяти данных;
· ISEG - абсолютный сегмент в области внутренней памяти данных с косвенной адресацией;
· XSEG - абсолютный сегмент в области внешней памяти данных.
Эти директивы не назначают имени сегменту, то есть объединение сегментов из различных программных модулей невозможно. Для определения конкретного начального адреса сегмента применяется атрибут AT. Если атрибут AT не используется, то начальный адрес сегмента предполагается равным нулю.
Директива BSEG позволяет определить абсолютный сегмент во внутренней памяти данных с битовой адресацией по определённому адресу. Использование битовых переменных позволяет значительно экономить внутреннюю память программ микроконтроллера.
Пример использования директивы BSEG для объявления битовых переменных:
BSEG AT 8 ;Сегмент начинается с восьмого бита
RejInd DBIT 1 ;Флаг режима индикации
RejPriem DBIT 1 ;Флаг режима приема
Flag DBIT 1 ;Флаг общего назначения
Директива CSEG позволяет определить абсолютный сегмент в памяти программ по определённому адресу.
Директива DSEG позволяет определить абсолютный сегмент во внутренней памяти данных по определённому адресу. Предполагается, что к этому сегменту будут обращаться команды с прямой адресацией.
Директива ISEG позволяет определить абсолютный сегмент во внутренней памяти данных по определённому адресу. Напомню, что внутренняя память с косвенной адресацией в два раза больше памяти с прямой адресацией.
Пример использования директивы ISEG для объявления байтовых переменных:
ISEG AT 80 ;Разместить сегмент в диапазоне адресов, совмещенных с SFR
Bufer DS 10 ;Десятибайтовый массив
Stack DS 245 ;Стек
Директива XSEG позволяет определить абсолютный сегмент во внешней памяти данных по определённому адресу. До недавнего времени использование внешней памяти не имело смысла, так как это значительно увеличивало габариты и цену устройства. Однако в последнее время ряд фирм стал размещать на кристалле значительные объёмы ОЗУ, доступ к которому осуществляется как к внешней памяти.
Использование абсолютных сегментов позволяет облегчить работу программиста по распределению памяти микроконтроллера для различных переменных. Однако в большинстве случаев абсолютный адрес переменной нас совершенно не интересует. Исключение составляют только регистры специальных функций. Так зачем же вручную задавать начальный адрес сегментов?
Дата добавления: 2015-10-09; просмотров: 1233;