проблема с использованием keil uvision 3

Я пытаюсь скомпилировать код C с помощью Keil uvision 3. Весь код компилируется только в том случае, если я использую большую модель памяти, выбрав опцию xdata для цели. Чтобы использовать эту модель, мне нужно использовать внешнюю ОЗУ для данных, что по некоторым причинам для меня невозможно.

Поэтому я решил использовать опцию pdata. Может ли кто-нибудь помочь мне с точными шагами, которые необходимо выполнить для использования pdata? Я использую 89V51RD2. Меня очень смущают такие параметры, как BL51 MISC, BL51 Locate и т. Д.


person Blossom    schedule 15.03.2010    source источник


Ответы (2)


Возможно, вам повезет, разместив это на официальном форуме Keil по адресу

http://www.keil.com/forum

NXP P89V51RD2 является производным от 8051 с, согласно спецификации, 1 КБ встроенной оперативной памяти. Если ваша программа не умещается в таком большом объеме, вам придется добавить внешнюю оперативную память.

PDATA позволяет использовать доступ к XDATA с возрастом "P". Это не дополнительная память. Если вам нужно больше места, вам действительно стоит подумать об оптимизации использования памяти, иначе вам придется добавить дополнительные ресурсы XDATA.

Ссылка: C51: ИСПОЛЬЗОВАНИЕ ПАМЯТИ PDATA

Уведомление: я работаю в Keil / ARM

person 3Dave    schedule 15.03.2010

Если у вас действительно нет доступного внешнего ОЗУ для данных, то опция PDATA вам не поможет. PDATA находится в другом логическом адресном пространстве, чем XDATA, но использует то же физическое пространство.

Например, используемый вами микроконтроллер содержит 1 КБ ОЗУ. Все 1024 байта могут быть доступны как память XDATA (адреса XDATA: от 0x0000 до XDATA: 0x03FF). 256 байтов (за раз) могут быть доступны как память PDATA (адреса PDATA: от 0x00 до PDATA: 0xFF). Предположим, вы настроили микроконтроллер на использование первых 256 байтов ОЗУ в качестве памяти PDATA. Это означает, что PDATA: 0x00 и XDATA: 0x0000 указывают на один и тот же физический байт ОЗУ. Если вы не будете осторожны, вы попытаетесь сохранить два разных значения в одной и той же физической части памяти, и одно из них будет перезаписано и потеряно.

Если вы уже используете всю свою память XDATA, вам нужно будет использовать память DATA или память IDATA, чтобы получить больше. Если вы все же используете память IDATA, вам нужно будет очень осторожно оставить достаточно места пустым, чтобы сохраняемые вами значения не были случайно перезаписаны стеком, который начинается с IDATA: 0xFF и увеличивается. вниз к IDATA: 0x00

Изменить: извините, я не заметил, что этому вопросу было два года. Надеюсь, это кому-то поможет.

person Pete Baughman    schedule 07.07.2012