Мегаобучалка Главная | О нас | Обратная связь

Абсолютные сегменты памяти




Наиболее простой способ определения сегментов это использование абсолютных сегментов памяти. При этом способе распределение памяти ведётся вручную точно так же, как это делалось при использовании директивы 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 позволяет определить абсолютный сегмент во внешней памяти данных по определённому адресу. До недавнего времени использование внешней памяти не имело смысла, так как это значительно увеличивало габариты и цену устройства. Однако в последнее время ряд фирм стал размещать на кристалле значительные объёмы ОЗУ, доступ к которому осуществляется как к внешней памяти.

Использование абсолютных сегментов позволяет облегчить работу программиста по распределению памяти микроконтроллера для различных переменных. Однако в большинстве случаев абсолютный адрес переменной нас совершенно не интересует. Исключение составляют только регистры специальных функций. Так зачем же вручную задавать начальный адрес сегментов?

Перемещаемые сегменты памяти.

Если абсолютные адреса переменных или участков программ не интересны, то можно воспользоваться перемещаемыми сегментами. Имя перемещаемого сегмента задается директивой segment.

Директива segment позволяет определить имя сегмента и область памяти, где будет размещаться данный сегмент памяти. Для каждой области памяти определено ключевое слово:

· data - размещает сегмент во внутренней памяти данных с прямой адресацией;

· idata - размещает сегмент во внутренней памяти данных с косвенной адресацией;

· bit - размещает сегмент во внутренней памяти данных с битовой адресацией;

· xdata - размещает сегмент во внешней памяти данных;

· code - размещает сегмент в памяти программ;

Директива rseg. После определения имени сегмента можно использовать этот сегмент при помощи директивы rseg. Использование сегмента зависит от области памяти, для которой он предназначен. Если это память данных, то в сегменте объявляются байтовые или битовые переменные. Если это память программ, то в сегменте размещаются константы или участки кода программы.

Пример использования директив segment и rseg для объявления битовых переменны:

_data segment idata

public VershSteka, buferKlav

 

;Определение переменных----------------------------

rseg _data

buferKlav: ds 8

 

VershSteka:

End

В этом примере объявлена строка buferKlav, состоящая из восьми байтовых переменных. Кроме того, в данном примере объявлена переменная VershSteka, соответствующая последней ячейке памяти, используемой для хранения переменных. Переменная VershSteka может быть использована для начальной инициализации указателя стека для того, чтобы отвести под стек максимально доступное количество ячеек внутренней памяти. Это необходимо для того, чтобы избежать переполнения стека при вложенном вызове подпрограмм.

Объявление и использование сегментов данных в области внутренней или внешней памяти данных не отличается от приведенного примера за исключением ключевого слова, определяющего область памяти данных.

Наибольший эффект от применения сегментов можно получить при написании основного текста программы с использованием модулей. Обычно каждый программный модуль оформляется в виде отдельного перемещаемого сегмента. Это позволяет редактору связей скомпоновать программу оптимальным образом. При использовании абсолютных сегментов памяти программ пришлось бы это делать вручную, а так как в процессе написания программы размер программных модулей постоянно меняется, то пришлось бы вводить защитные области неиспользуемой памяти между программными модулями.





Читайте также:





Читайте также:
Как выбрать специалиста по управлению гостиницей: Понятно, что управление гостиницей невозможно без специальных знаний. Соответственно, важна квалификация...
Личность ребенка как объект и субъект в образовательной технологии: В настоящее время в России идет становление новой системы образования, ориентированного на вхождение...
Генезис конфликтологии как науки в древней Греции: Для уяснения предыстории конфликтологии существенное значение имеет обращение к античной...

©2015 megaobuchalka.ru Все права защищены авторами материалов.

Почему 3458 студентов выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.008 сек.)