Аппаратные и программные средства встраиваемых систем



Pdf көрінісі
бет215/268
Дата07.01.2022
өлшемі3,23 Mb.
#18255
1   ...   211   212   213   214   215   216   217   218   ...   268
5.2.2  Классы памяти 
Компилятор SDCC поддерживает  инструмент,  позволяющий  управлять 
механизмами  использования  памяти  в  микроконтроллерах  семейства Intel 
MCS51  и  создавать  мощные  и  гибкие  программы.  Этот  инструмент – классы 
памяти. Каждая переменная может принадлежать к одному из 7 классов памяти. 
Класс памяти указывается при помощи специального модификатора. 
Таблица 31. Классы памяти (расширение языка Си для МК Intel MCS51) 
Модификаторы 
памяти 
Описание 
data 
Внутренняя память данных с прямой адресацией; самая быстрая 
работа с переменными (128 байт). Класс памяти по умолчанию для 
модели памяти small. 
xdata 
Внешняя память данных (64Кб-16Мб). Класс памяти по 
умолчанию для модели памяти large. 
idata 
Внутренняя память данных с косвенной адресацией; доступ ко 
всему адресному пространству (128/256 байт). 
pdata 
Внешняя память данных с косвенной адресацией (256 байт). Класс 
памяти по умолчанию для модели памяти medium. 
code 
Память программ (64 Kб). 
bit 
И класс памяти, и нестанадртный тип данных. Бит-адресуемая 
внутренняя память данных (128 бит) в диапазон адресов 20h-2Fh. 
sfr/sfr16/sfr32/sbit 
И класс памяти, и нестанадртный тип данных. Служит для 
определения регистров специального назначения (sfr – 8 разрядов, 


 
224 
sfr16 – 16 разрядов, sfr32 – 32 разряда) и их битов (sbit). Эти 
ключевые слова используются для создания заголовочных файлов, 
позволяющих обращаться к регистрам специального назначения 
по именам. 
 
Обращение к внутренней памяти данных происходит гораздо быстрее, чем 
к внешней. Поэтому переменные, которые используются чаще других, следует 
размещать во внутренней памяти, а остальные – во внешней. Далее приведены 
примеры объявления переменных в разных классах памяти: 
 
__data unsigned char test_data; 
__xdata unsigned char test_xdata; 
__idata unsigned char test_idata;  
__pdata unsigned char test_pdata; 
__code unsigned char test_code; 
__bit test_bit; 
 
__sfr __at (0x80) P0; // регистр специального назначения P0 по адресу 0x80 
 
/* 16-разрядный регистр специального назначения для Таймера 0 
   Старший байт значения находится по адресу 0x8C, младший по адресу 0x8A*/ 
__sfr16 __at (0x8C8A) TMR0; 
 
__sbit __at ( 0xD7 ) CY; /* CY (Carry Flag, флаг переноса в SFR PSW) */ 
 
Если в объявлении переменной модификатор памяти не указан, выбирается 
модель  памяти,  установленная  по  умолчанию.  Аргументы  функции  и 
переменные класса памяти auto, которые не могут быть размещены в регистрах, 
также хранятся в области памяти, установленной по умолчанию. 
Модель  памяти,  выбираемая  в  качестве  модели  по  умолчанию, 
устанавливается с помощью опций компилятора small, medium и large. 


Достарыңызбен бөлісу:
1   ...   211   212   213   214   215   216   217   218   ...   268




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет