проблема с использованием Keil Uvision 3 - PullRequest
1 голос
/ 15 марта 2010

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

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

Ответы [ 2 ]

1 голос
/ 15 марта 2010

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

http://www.keil.com/forum

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

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

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

Раскрытие информации: я работаю на Keil / ARM

0 голосов
/ 07 июля 2012

Если у вас действительно нет оперативной памяти для внешних данных, то опция 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

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

...