
145
автопеременных и переменных, в объявлении которых не указана
соответствующая модель. Это делается с помощью директив SMALL,
COMPACT и LARGE. Явное задание модели отменяет использование модели
памяти по умолчанию.
Таблица 3. Модели памяти
Название Описание
SMALL
В этой модели все переменные по умолчанию размещаются
во внутренней памяти данных. Достигается тот же эффект, как
при явном использовании модификатора data. При такой модели
обращение к переменным оказывается очень эффективным. Но
все объекты данных и стек должны размещаться во внутренней
памяти. Размер стека имеет решающее значение, так как
пространство, занимаемое
стеком, зависит от глубины
вложенности различных функций. Обычно, если компоновщик
BL51 сконфигурирован для оверлейной загрузки переменных во
внутреннюю память данных, лучше всего использовать малую
модель памяти (small).
COMPACT
Если используется компактная модель памяти, все
переменные по умолчанию загружаются во внешнюю память
данных – точно так же, как при явном задании модификатора
памяти pdata. В этой памяти может быть размещено до 256
байтов. Ограничения появляются вследствие использования
косвенной адресации, когда обращение происходит через
регистры R0 и R1. Данная модель памяти не так эффективна,
как
малая, и обращение к переменным происходит медленнее.
Но компактная модель все же быстрее, чем большая. Старший
бит адреса обычно устанавливается через порт 2, причем
делается это вручную программистом.
LARGE
При использовании большой модели памяти все
переменные по умолчанию размещаются во внешней пам
ти
данных. Можно также явно указать модель памяти с помощью
модификатора xdata. Для адресации используется указатель
DPTR. Обращение к памяти через этот указатель не является
эффективным, особенно если переменная имеет длину 2 или
более байт. При использовании данной модели памяти код
получается длиннее, чем при малой или компактной модели.
Примечание
Почти всегда следует использовать модель памяти SMALL: в этом случае
вы получите самый быстрый, компактный и наиболее эффективный код. Однако
у вас есть возможность явно указать нужную модель памяти. Модели,
использующие внешнюю память, стоит использовать только в том случае, если