Перейти к содержанию
    

При таких установках ошибка
Это - вполне нормально :) : раньше данные не помещались в xdata - теперь они не помещаются в data. Нужно приписать спицификатор pdata (или xdata) к некоторым данным, чтобы не все они пытались влезть в data...

P.S. При установке модели памяти "Small" данные без спецификатора области размещения - размещаются в data

P.P.S. При установке модели памяти "Large" данные без спецификатора области размещения - размещаются в xdata

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это - вполне нормально :) : раньше данные не помещались в xdata - теперь они не помещаются в data. Нужно приписать спицификатор pdata (или xdata) к некоторым данным, чтобы не все они пытались влезть в data...

P.S. При установке модели памяти "Small" данные без спецификатора области размещения - размещаются в data

P.P.S. При установке модели памяти "Large" данные без спецификатора области размещения - размещаются в xdata

 

Ну так я и говорю : мне надо так распихать переменные, чтобы ни в одном из банков не было больше, чем 256 штук. Кстати, в сегменте 'DATA' сейчас : data = 61.6 байт.

Но, как я уже написал, локальные переменные в сегмент 'DATA' почему то никак не попадают. Только глобальные.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Но, как я уже написал, локальные переменные в сегмент 'DATA' почему то никак не попадают. Только глобальные.
Может быть я непонятно написал... Переменные (в том числе, локальные) попадут в data, если указать модель Small. Тогда, сегмент data - переполнится (переменных слишком много). Некоторым из них нужно приписать спецификатор pdata (xdata), чтобы часть из них размещалась в ERAM (но, чтобы такие переменные не занимали более 256 байт).

Можно пойти от противного (неверное, это - хуже и сложнее)... Оставить модель Large, но части переменным присвоить спецификатор data: стольким переменным, чтобы в xdata осталось не более 256 байт переменных...

 

P.S. В data разместить 256 байт переменных не получится - во первых data не более 128 байт, но часть из них занимает область регистров общего назначения и битовоадресуемая память.

 

Да, кстати, ещё одно замечание. На потребную программе память влияет примененный линкер (лучше поставить галку "Use LX51") и уровень оптимизации (лучше поставить не менее "Level 2", а то и 4)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Может быть я непонятно написал... Переменные (в том числе, локальные) попадут в data, если указать модель Small. Тогда, сегмент data - переполнится (переменных слишком много). Некоторым из них нужно приписать спецификатор pdata (xdata), чтобы часть из них размещалась в ERAM (но, чтобы такие переменные не занимали более 256 байт).

Можно пойти от противного (неверное, это - хуже и сложнее)... Оставить модель Large, но части переменным присвоить спецификатор data: стольким переменным, чтобы в xdata осталось не более 256 байт переменных...

 

P.S. В data разместить 256 байт переменных не получится - во первых data не более 128 байт, но часть из них занимает область регистров общего назначения и битовоадресуемая память.

 

Да, кстати, ещё одно замечание. На потребную программе память влияет примененный линкер (лучше поставить галку "Use LX51") и уровень оптимизации (лучше поставить не менее "Level 2", а то и 4)

 

В общем, отказался я от этого МК51-го сейчас портирую (или как это там называется) прогу на PIC18. Сразу исчезли все проблемы с ОЗУ и вообще с железом. Еще раз подивился упорству фанатов классического МК51... Мазохисты.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

... Мазохисты.

Сам такое слово! Отличный микроконтроллер! Keil отличная IDE, отличный компилятор, линкер, дебаггер!!! Просто у некоторых руки растут не из правильного места... Стартап должен использоваться именно для твоего микроконтроллера, иначе компилятор про твою дополнительную память ничего не знает!!! В Memory Model для твоего проекта надо поставить Compact: variables in PDATA (про зоопарк памяти у MCS-51 слышал?). И действительно часть данных ОСОБЕННО непрерывных - массивы (буферы приёма передачи и т.д.) описать как PDATA! Обрати внимание сколько занимает стек и укажи с запасом в стартапе. Реальный пример компиляции для микроконтроллера AT89C5115 (256 Bytes on-chip RAM and 256 Bytes ERAM): Program Size: data=155.1 xdata=131 code=15356. После добавления массива unsigned char pdata ucUartDataXXX[100] = {0}; Program Size: data=155.1 xdata=231 code=15459. Если и дальше будут проблемы - шли исходники, добью твой прожект :crying:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

При компиляции At89c51rc ( 32 kB flash ) выдает такую ошибку:

******************************************************************************

* RESTRICTED VERSION WITH 0800H BYTE CODE SIZE LIMIT; USED: 4287H BYTE (831%) *

******************************************************************************

 

*** ERROR L250: CODE SIZE LIMIT IN RESTRICTED VERSION EXCEEDED

LIMIT: 0800H BYTES

Target not created

 

Добрый день

 

Появилась аналогичная проблема. 3 месяца 8.06 отработала нормально, а вот вчера слетела. Помогите.

В архиве с клизьмой 3.22 нет правленного l51.dll.

 

Т.е. я просто поставил девелопмент версии 8.06 и сгенерил лицензию. При таком раскладе она проработала 3 месяца без проблем.

А теперь различные танцы с бубном не увенчались успехом. Подкиньте плиз действующую клизьму. В работе для 51 ядра я пользуюсь uVision2 оболочкой. Для ARM uVision3 оболочкой.

 

Спасибо

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Подкиньте плиз ...
Для МК51 я использовал вот этот файл для версии 8.16а; с АРМ'ами - не работаю, но вроде тоже - подходит

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для МК51 я использовал вот этот файл для версии 8.16а; с АРМ'ами - не работаю, но вроде тоже - подходит

 

Спасибо вам больше.

 

У меня эта клизьма есть :) Я проделал следующее. Сначаласгенерил лицензию просто для devel kit. Удалил все obj и скомпилил проект. Оно нормально скомпилилось, но не собралось. Попросило проапгрейдить до PK51 (Professional). Сгенерил теперь для Prof. И перекомпилил. И все получилось. Раньше я сразу генерил для проф и удалял обж файлы. В этот раз повезло. Буду пробовать этот путь на работе.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...