154
Модификаторы памяти
/* указатель находится во внутренней памяти и ссылается на объект во внешней
памяти XDATA */
__xdata unsigned char * __data p;
/* указатель находится во внешней памяти и ссылаетсмя на объект во внутренней
*/
__data unsigned char * __xdata p;
/* указатель в пространстве памяти команд (CODE) ссылается на объект во
внешней памяти XDATA */
__xdata unsigned char * __code p;
/* указатель в пространстве памяти команд (CODE) ссылается на объект в
пространстве памяти команд (CODE) */
__code unsigned char * __code p;
/*
указатель на функцию, находящийся во внутренней памяти */
char (* __data fp)(void);
Универсальный (generic) указатель в SDCC содержит дополнительную
информацию о типе адресного пространства. В целях оптимизации объема кода
лучше явно указывать тип адресного пространства.
/* универсальный указатель (generic) находится во внешней памяти XDATA */
unsigned char * __xdata p;
/* универсальный указатель (generic) находится в пространстве памяти по
умолчанию */
unsigned char * p;
Реентерабельность
Реентерабельность (Reentrant, повторное вхождение) – свойство
императивной программы, позволяющее одновременное использование
нескольких одинаковых программ в многозадачной среде. Для того, чтобы
программа стала нереентерабельной, достаточно разместить переменные в
глобальной области памяти в единственном экземпляре. Тогда несколько копий
программ будет использовать один и тот же набор переменных, что приведет к
непредсказуемым последствиям. Для
обеспечения реентерабельности
необходимо снабдить каждый экземпляр кода своим собственным объемом
памяти для хранения данных. Как правило, для этих целей используют
регистровые файлы и стек.
В зависимости от модели памяти и количества свободного места,
автоматические переменные и параметры функции могут быть помещены в
стек, или в пространство внешней или внутренней памяти. Последний
вариант