реклама на сайте
подробности

 
 
> Знатокам Кейла
=L.A.=
сообщение Nov 11 2008, 06:06
Сообщение #1


Знающий
****

Группа: Участник
Сообщений: 794
Регистрация: 4-09-06
Из: Москва(ЗелАО), РФ
Пользователь №: 20 055



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

Build target 'Target 1'
linking...
LX51 LINKER/LOCATER V4.17 - SN: *********
COPYRIGHT KEIL ELEKTRONIK GmbH 1995 - 2007
@.\Release\Exe\1 nnnn.lnp ".\Release\Exe\STARTUP.obj",
".\Release\Exe\MAIN.obj"
TO ".\Release\Exe\1nnnn"
PRINT(".\Release\1 nnnn.map") CLASSES (XDATA (X:0x0-X:0xFF), HDATA (X:0x0-X:0xFF), CODE (C:0x0-C:0x7FFF), CONST (C:0x0-C:0x7FFF),
ECODE (C:0x0-C:0x7FFF), HCONST (C:0x0-C:0x7FFF))
*** ERROR L107: ADDRESS SPACE OVERFLOW
SPACE: XDATA
SEGMENT: ?XD?MAIN
LENGTH: 000132H
******************************************************************************
* RESTRICTED VERSION WITH 0800H BYTE CODE SIZE LIMIT; USED: 4287H BYTE (831%) *
******************************************************************************
Program Size: data=10.6 xdata=321 const=0 code=17723
*** ERROR L107: ADDRESS SPACE OVERFLOW
SPACE: XDATA
SEGMENT: ?XD?MAIN
LENGTH: 000132H
*** ERROR L250: CODE SIZE LIMIT IN RESTRICTED VERSION EXCEEDED
LIMIT: 0800H BYTES
Target not created

Чего ему не хватат - ОЗУ, программной памяти или всего сразу? Или другие причины ( RESTRICTED VERSION WITH 0800H BYTE CODE SIZE LIMIT; USED: 4287H BYTE (831%) *)?

Сообщение отредактировал =L.A.= - Nov 11 2008, 06:08


--------------------
-Кто-то работает на совесть, а кто-то на других заказчиков.-
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Палыч
сообщение Nov 11 2008, 07:04
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(=L.A.= @ Nov 11 2008, 09:06) *
Чего ему не хватат - ОЗУ, программной памяти или всего сразу?
Во-первых, ему не хватает внешней памяти (xdata). Определено, что её (xdata) всего 256 байт, а только в main требуется 306 (132h) байт. Памяти программ в МК хватает: нужно на всё чуть больше 17К, но версия Keil, та, что Вы используете имеет ограничение на создаваемый код - 2К (это - поддаётся лечению)
Go to the top of the page
 
+Quote Post
=L.A.=
сообщение Nov 11 2008, 10:15
Сообщение #3


Знающий
****

Группа: Участник
Сообщений: 794
Регистрация: 4-09-06
Из: Москва(ЗелАО), РФ
Пользователь №: 20 055



Цитата(Палыч @ Nov 11 2008, 10:04) *
Во-первых, ему не хватает внешней памяти (xdata). Определено, что её (xdata) всего 256 байт, а только в main требуется 306 (132h) байт. Памяти программ в МК хватает: нужно на всё чуть больше 17К, но версия Keil, та, что Вы используете имеет ограничение на создаваемый код - 2К (это - поддаётся лечению)


Видимо, я напрасно поставил галку use on-chip XRAM? Поскольку по доке у At89c51rc 512 байт ОЗУ.
А по процессу лечения сообщите поподробнее пжлст. Я пользовался советами ника VAI.


--------------------
-Кто-то работает на совесть, а кто-то на других заказчиков.-
Go to the top of the page
 
+Quote Post
Палыч
сообщение Nov 11 2008, 11:00
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(=L.A.= @ Nov 11 2008, 13:15) *
...Поскольку по доке у At89c51rc 512 байт ОЗУ. А по процессу лечения сообщите поподробнее пжлст.
Возможно, ограничение на xdata в 256 байт - это тоже ограничение триальной версии...
По поводу личения. Увы, я давно не использую Keil для новых проектов, а для поддержки старых - хватает древней версии Keil'а, поэтому плохо ориентируюсь в методах лечения современных версий. Ясно, что с лечением у Вас что-то не получилось... Когда я занимался самолечением для этого использовалась клизьма... В и-нете гуляли клизьмы с тремя цифирьками в конце (обозначение версии): 3хх - для АРМ; 7хх (позже 8хх) - для МК51. С клизьмой поставлась и инструкция по применению - (важно!) перед применением сгенерированной лицензии необходимо подменить указанный в инструкции и поставляемый с клизьмой файл (для Вас - L51.DLL). Результат применения можно проверить, если зайти в Keil'е (надеюсь, у Вас восьмая версия) в Menu->File->License Management - для продукта РК51Prof. Developers Kit должна быть действующая лицензия.
Go to the top of the page
 
+Quote Post
=L.A.=
сообщение Nov 11 2008, 11:12
Сообщение #5


Знающий
****

Группа: Участник
Сообщений: 794
Регистрация: 4-09-06
Из: Москва(ЗелАО), РФ
Пользователь №: 20 055



Цитата(Палыч @ Nov 11 2008, 14:00) *
Возможно, ограничение на xdata в 256 байт - это тоже ограничение триальной версии...
По поводу личения. Увы, я давно не использую Keil для новых проектов, а для поддержки старых - хватает древней версии Keil'а, поэтому плохо ориентируюсь в методах лечения современных версий. Ясно, что с лечением у Вас что-то не получилось... Когда я занимался самолечением для этого использовалась клизьма... В и-нете гуляли клизьмы с тремя цифирьками в конце (обозначение версии): 3хх - для АРМ; 7хх (позже 8хх) - для МК51. С клизьмой поставлась и инструкция по применению - (важно!) перед применением сгенерированной лицензии необходимо подменить указанный в инструкции и поставляемый с клизьмой файл (для Вас - L51.DLL). Результат применения можно проверить, если зайти в Keil'е (надеюсь, у Вас восьмая версия) в Menu->File->License Management - для продукта РК51Prof. Developers Kit должна быть действующая лицензия.



Я применял эти рекомендации ( ника VAI ) только не перезапустил компьютер ( в них не указано, но очевидно, это необходимо) Теперь всё компилируется, если убрать галочку Use On chip XRAM (0x00 - 0xFF) Правда не работает. Будем смотреть далее.


--------------------
-Кто-то работает на совесть, а кто-то на других заказчиков.-
Go to the top of the page
 
+Quote Post
Палыч
сообщение Nov 11 2008, 12:29
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(=L.A.= @ Nov 11 2008, 14:12) *
Теперь всё компилируется, если убрать галочку Use On chip XRAM (0x00 - 0xFF) Правда не работает. Будем смотреть далее.
Какой забавный МК Вы используете. Обратите внимание, что у него 512 байт On-chip RAM, а не 512 байт On-chip XRAM. Надо бы посмотреть DS на предмет: "что сие означает?".
Go to the top of the page
 
+Quote Post
=L.A.=
сообщение Nov 11 2008, 18:49
Сообщение #7


Знающий
****

Группа: Участник
Сообщений: 794
Регистрация: 4-09-06
Из: Москва(ЗелАО), РФ
Пользователь №: 20 055



Цитата(Палыч @ Nov 11 2008, 15:29) *
Какой забавный МК Вы используете. Обратите внимание, что у него 512 байт On-chip RAM, а не 512 байт On-chip XRAM. Надо бы посмотреть DS на предмет: "что сие означает?".


Использую этот МК по причине острой необходимости, и считаю его не забавным, а дерьмовым. DS я читал, если XRAM = expanded RAM (ERAM), то непонятно, почему галочка мешает. Правда атмеловские даташиты, прямо скажем, сумбурные.
В общем, компилятор вроде зашуршал, а проблемы с неработоспособностью программы я как нибудь осилю smile.gif)


--------------------
-Кто-то работает на совесть, а кто-то на других заказчиков.-
Go to the top of the page
 
+Quote Post
Палыч
сообщение Nov 12 2008, 07:02
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(=L.A.= @ Nov 11 2008, 21:49) *
DS я читал, если XRAM = expanded RAM (ERAM), то непонятно, почему галочка мешает.
Да, можно считать, что XRAM = expanded RAM (ERAM). Если посмотреть в DS, то размер ERAM равен 256. И Keil тоже так считает: возле галочки написано "Use On-chip XRAM (0x0-0xFF)". А, вот Вы пытаетесь поместить туда гораздо больше - 321 байт (судя по информации в Вашем первом посту).

Кстати, у меня с подобной галкой были проблемы. Я считал, что установка этой галки заставит транслятор поместить в startup код устанавливающий бит в регистре, который разрешает использовать дополнительную внутреннюю память командами movx. Однако, ничего подобного не обнаружил. Пришлось startup править руками. Правда, это было давно, может быть, в современных версиях Keil'а это поправили (или я что-то тогда недопонял).
Go to the top of the page
 
+Quote Post
=L.A.=
сообщение Nov 12 2008, 11:10
Сообщение #9


Знающий
****

Группа: Участник
Сообщений: 794
Регистрация: 4-09-06
Из: Москва(ЗелАО), РФ
Пользователь №: 20 055



Цитата(Палыч @ Nov 12 2008, 10:02) *
Да, можно считать, что XRAM = expanded RAM (ERAM). Если посмотреть в DS, то размер ERAM равен 256. И Keil тоже так считает: возле галочки написано "Use On-chip XRAM (0x0-0xFF)". А, вот Вы пытаетесь поместить туда гораздо больше - 321 байт (судя по информации в Вашем первом посту).

Кстати, у меня с подобной галкой были проблемы. Я считал, что установка этой галки заставит транслятор поместить в startup код устанавливающий бит в регистре, который разрешает использовать дополнительную внутреннюю память командами movx. Однако, ничего подобного не обнаружил. Пришлось startup править руками. Правда, это было давно, может быть, в современных версиях Keil'а это поправили (или я что-то тогда недопонял).



Да, переменных получается на 321 байт ОЗУ. Большой пасиб за консультацию. Но у меня ощущение, что я этот 89c51rc заброшу и перепишу прогу под ПИК. Чую, окажется быстрее по времени.
P.S. А мне Кейл хвалили как наилучший для семейства МК51.... Даже боюсь предположить, как функционируют другие среды.

Сообщение отредактировал =L.A.= - Nov 12 2008, 11:14


--------------------
-Кто-то работает на совесть, а кто-то на других заказчиков.-
Go to the top of the page
 
+Quote Post
Палыч
сообщение Nov 12 2008, 11:51
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(=L.A.= @ Nov 12 2008, 14:10) *
Да, переменных получается на 321 байт ОЗУ.
В действительности переменных получается на 332 байта, что должно поместиться в ОЗУ (RAM+ERAM). А вот с распределением этих переменных у Вас не всё в порядке: 10.6 байта (10 байт и ещё 6 битов) Вы размещаете в секции data ("нормальном" ОЗУ мк, оно же RAM), а остальные 321 байта пытаетесь разместить в секции xdata ("внешнем" ОЗУ, или ERAM, которая размером 256 байт). Если часть данных, которые Вы размещаете в xdata разместить в data, то всё должно поместиться. Не забудьте, что в "нормальном" ОЗУ ещё располагается стек и часть его (ОЗУ) отображена на регистры. Т.е. переместить в data желательно по минимуму, так, чтобы остальные данные поместились в xdata. Желательно в data хранить наиболее часто используемые переменные.

Цитата(=L.A.= @ Nov 12 2008, 14:10) *
А мне Кейл хвалили как наилучший для семейства МК51.... Даже боюсь предположить, как функционируют другие среды.
Keil - действительно самое лучшее средство разработки для МК51, остальные и близко не стоят...
Go to the top of the page
 
+Quote Post
=L.A.=
сообщение Nov 13 2008, 14:29
Сообщение #11


Знающий
****

Группа: Участник
Сообщений: 794
Регистрация: 4-09-06
Из: Москва(ЗелАО), РФ
Пользователь №: 20 055



Цитата(Палыч @ Nov 12 2008, 14:51) *
Keil - действительно самое лучшее средство разработки для МК51, остальные и близко не стоят...


А вы не могли бы подсказать, как расставить галочки в проекте, чтобы распихать 321 байт переменных по банкам ОЗУ? Может , еще какие нибудь директивы применить в исходнике?
Поскольку программа, которую я пытаюсь откомпилировать вполне работоспособная, только довольно старая. Раньше её компилировали в IAR примерно 1990 года выпуска.
Эскизы прикрепленных изображений
Прикрепленное изображение
 


--------------------
-Кто-то работает на совесть, а кто-то на других заказчиков.-
Go to the top of the page
 
+Quote Post
Палыч
сообщение Nov 13 2008, 16:53
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(=L.A.= @ Nov 13 2008, 17:29) *
А вы не могли бы подсказать...
Попробую помочь... Только, если что запамятовал за давностью - строго не судите!

1. Галки на форме, что Вы привели - пусть стоят. Они указывают, что данные из базы Keil о размерах памяти применённого Вами мк будут переданы линкеру для контроля: "не вылезла ли программа и данные за рамки памяти?". Это полезно для контроля за размерами использованной памяти. (Надеюсь, что тип мк в опциях проекта Вы указали AT89C51RC).

2. Данные в окнах "Off-chip XDATA memory" - убрать (внешнюю память Вы к мк не прикручивали)

3. Распихивают данные по разным областям с помощью спецификаторов:

data — внутренняя память данных, прямая адресация
idata — внутренняя память данных, косвенная адресация
bdata — внутренняя память данных, побитно-адресуемая область
xdata — внешняя память данных, обращение через DPTR
pdata — внешняя память данных, обращение через @R
code — память программ

Если спецификатор не указан, то переменная помещается в область по-умолчанию. Обычно, это: bdata для битовых переменных; code - для констант; data - для всех остальных. У Вас, наверное, при описании переменных стоят спецификаторы xdata или pdata (иначе, зачем бы транслятор пытался запихнуть столько переменных в xdata ?).
Итак. Переменные, которые Вы собираетель разместить в ERAM надо описать примерно так

int xdata i;
unsigned char xdata ch[8];
char * xdata ptr;

Поскольку, память ERAM имеет размер 256 байт, то ко всей памяти ERAM можно адресоваться косвенно через регистр. Поэтому, возможно, с точки зрения быстродействия и расходов памяти программ, выгоднее будет использовать спецификатор pdata, т.е.

int pdata i;
unsigned char pdata ch[8];
char * pdata ptr;

Те же переменные, которые Вы собираетесь хранить в RAM нужно оставить без спецификаторов (или, если это почему-то не поможет, приписать спецификаторы bdata для битовых переменных и data для всех остальных)

int k;
char d[20];
int * ptr;
или
int data k;
char data d[20];
int * data ptr;

Если у Вас в программе часто используются указатели, то для увеличения быстродействия, сокращения потребной памяти (данных и программ), хорошо бы указывать на что указатели будут собственно указывать. Например
char data * xdata ptr1; // ptr1 распологается в xdata, указывает на char, который храниться в data

4. Что бы ERAM стала работать, необходимо установить какой-то там бит в каком-то регистре (посмотрите в DS). Нужно поправить Startup, вставив в него соответствующие команды.
Go to the top of the page
 
+Quote Post
=L.A.=
сообщение Nov 13 2008, 21:33
Сообщение #13


Знающий
****

Группа: Участник
Сообщений: 794
Регистрация: 4-09-06
Из: Москва(ЗелАО), РФ
Пользователь №: 20 055



Цитата(Палыч @ Nov 13 2008, 19:53) *


пасиб, буду разбираться.

Попробовал, локальные переменные никак не хотят попадать в сегмент data. Глобальные переменные туда перенеслись. Стартап не смотрел, но он вроде для просто MK51, где внутренняя память ERAM отсутствует. Но локальные переменные компилятор пихает именно туда.

P.S. И ведь некоторые недовольны ПИКами за кривизну обращения к ОЗУ через банки!

Сообщение отредактировал =L.A.= - Nov 13 2008, 21:49


--------------------
-Кто-то работает на совесть, а кто-то на других заказчиков.-
Go to the top of the page
 
+Quote Post
Палыч
сообщение Nov 14 2008, 06:35
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(=L.A.= @ Nov 14 2008, 00:33) *
Попробовал, локальные переменные никак не хотят попадать в сегмент data.
Извиняюсь - не углядел... Модель памяти в приведенной Вами форме нужно поставить "Small: variables in DATA"
Go to the top of the page
 
+Quote Post
=L.A.=
сообщение Nov 14 2008, 06:54
Сообщение #15


Знающий
****

Группа: Участник
Сообщений: 794
Регистрация: 4-09-06
Из: Москва(ЗелАО), РФ
Пользователь №: 20 055



Цитата(Палыч @ Nov 14 2008, 09:35) *
Извиняюсь - не углядел... Модель памяти в приведенной Вами форме нужно поставить "Small: variables in DATA"


При таких установках ошибка

compiling TST51RC.C...
TST51RC.C(2528): error C249: 'DATA': SEGMENT TOO LARGE
Target not created

Если установить модель "Large", то результат ОК

Build target 'Target 1'
assembling STARTUP.A51...
compiling TST51RC.C...
linking...
Program Size: data=61.6 xdata=261 code=5900
creating hex file from ".\RELEASE\EXE\test51rc"...
".\RELEASE\EXE\test51rc" - 0 Error(s), 0 Warning(s).

Вчера нашел еще одно окошко, где настройки влияют на использование ОЗУ. Там надо было сбросить галочку "Use memory layout from target dialog"
Прикрепленное изображение


Но что интересно у меня 2 почти одинаковых проекта с одинаковыми настройками, но в первом такое окошко есть, а в другом его нет.

Сообщение отредактировал =L.A.= - Nov 14 2008, 06:59


--------------------
-Кто-то работает на совесть, а кто-то на других заказчиков.-
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- =L.A.=   Знатокам Кейла   Nov 11 2008, 06:06
|- - Палыч   Цитата(=L.A.= @ Nov 14 2008, 09:54) При т...   Nov 14 2008, 07:10
|- - =L.A.=   Цитата(Палыч @ Nov 14 2008, 10:10) Это - ...   Nov 14 2008, 07:26
|- - Палыч   Цитата(=L.A.= @ Nov 14 2008, 10:26) Но, к...   Nov 14 2008, 08:24
|- - =L.A.=   Цитата(Палыч @ Nov 14 2008, 11:24) Может ...   Nov 25 2008, 08:08
|- - Andy_ry   Цитата(=L.A.= @ Nov 25 2008, 12:08) ... М...   Dec 16 2008, 13:58
- - AndreyS   Цитата(=L.A.= @ Nov 11 2008, 09:06) При к...   Mar 23 2009, 14:25
- - Палыч   Цитата(AndreyS @ Mar 23 2009, 17:25) Подк...   Mar 23 2009, 14:57
- - AndreyS   Цитата(Палыч @ Mar 23 2009, 17:57) Для МК...   Mar 23 2009, 18:55


Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 27th July 2025 - 23:11
Рейтинг@Mail.ru


Страница сгенерированна за 0.02368 секунд с 7
ELECTRONIX ©2004-2016