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

 
 
 
Reply to this topicStart new topic
> Не инициализируемая память., Прошу сильно не пинать.
SasaVitebsk
сообщение Jun 3 2006, 16:23
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Честно признаю, читал документацию. Даже сделал книжечки и постоянно в них лажу. Но к данному вопросу не знаю как подойти. Не разобрался по английски. smile.gif Поэтому прошу не отфутболивать к документации, а кратко ответить (если можно).

Пытаюсь к ряду переменных пристегнуть спецификатор __no_init. Но при пристёгивании хотябы к одной, компилятор выдаёт ошибку, что у меня отсутсвует сегмент данных NEAR_N. (Точнее не компилятор а редактор связей)

Error[e16]: Segment NEAR_N (size: 0x8 align: 0) is too long for segment definition. At least 0x8 more bytes needed. The problem occurred while processing the segment placement command "-Z(DATA)NEAR_N=_..X_EXT_NV_BASE:+_..X_EXT_NV_SIZE", where at the moment of placement the available memory ranges were "DATA:21ff--1"

Про данные сегменты я читал, но как его объявить в опциях проекта. Чтобы не создавать файл опций.
Если можно, то с примером пожалуйста. smile.gif
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jun 3 2006, 16:47
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(SasaVitebsk @ Jun 3 2006, 19:23) *
Про данные сегменты я читал, но как его объявить в опциях проекта. Чтобы не создавать файл опций.
Если можно, то с примером пожалуйста. smile.gif

Это не прямо в 'проекте' - это в *.xcl файле - опции линкера. Соответственно смотреть документацию на линкер или прямо по "образу и подобию" остальных сегментов отредактировать файл *.xcl имя которого указано в 'проекте'. Если по каким-то непонятным причинам нехочется редактировать
*.xcl файл, то в IDE опциях линкера есть раздел 'extra options', куда и вписать командную строчку.
Есть и 'wizard' для 'генерации', но думаю, что лучше его нафиг послать ввиду его ничем не прикрытой убогости.

А редактировать придется - в Вашем файле сегмент описан, но его размер X_EXT_NV_SIZE мал.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Jun 3 2006, 23:02
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Я смотрел доку по LINK. И если бы я в ней разобрался, то не стал бы никого беспокоить. smile.gif
Описание опции -Z весьма скудное. Тоесть оно полное, но о таких вещах как _..X_EXT_NV_SIZE там не слова.
По моему глупо что сегмент NEAR_I (размеры и начало) линкер "понимает из проекта", а такой же NEAR_N - нет. В моём понимании, по опции __no_init компилятор должен был бы определить мои переменные в соответствующий сегмент. Соответственно линкер выделить под него место. Глупо выделять его вручную. Не хочу его размещать и привязывать к физическому адресу. А как указать линкеру, чтобы он сам зарезервировал место - не знаю.
Кроме всего попробовал дать команду в 'extra options', - так он гад пишет что не фиг мол два раза сегмент определять.

Можно конечно "извратится" и разместить переменные в каком-то своём сегменте, но по-моему должен быть какой-то прямой путь чтобы решить данную проблему.

.xcl файл я не создавал, а пользуюсь закладками в опциях пакета.

Ещё раз попрошу не отсылайте меня к документации. Ну не могу разобраться! Не может быть чтобы никто до меня данную проблему не решал. Кинте в меня примером строки из extra options или xcl файла. Или объясните ошибки. Буду очень благодарен.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jun 4 2006, 12:07
Сообщение #4


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(SasaVitebsk @ Jun 4 2006, 02:03) *
.xcl файл я не создавал, а пользуюсь закладками в опциях пакета.

Ещё раз попрошу не отсылайте меня к документации. Ну не могу разобраться! Не может быть чтобы никто до меня данную проблему не решал. Кинте в меня примером строки из extra options или xcl файла. Или объясните ошибки. Буду очень благодарен.
Там есть одна засада: в стандартных .xcl почему-то считается, что сегмент NEAR_N лежит во внешней памяти. Например у меги-8 он вообще в .xcl не описан. X_EXT_NV_BASE и X_EXT_NV_SIZE - это переменные через которые оболочка передает содержимое полей Project->General Options->System->External memory configuration для столбца Non-Volatile. Если внешней памяти у вас в проекте нет, то можно просто переписать .xcl добавив сегмент NEAR_N в ту же строчку что и NEAR_Z. Если же внешняя память есть, а данные с __no_init хочется держать во внутренней - то надо объявить свой сегмент и вместе с __no_init использовать размещение данных в указанный сегмент:
Код
__no_init int Abc @ "new_segment";


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Jun 5 2006, 09:11
Сообщение #5


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Проблема в следующем
Цитата
-Z(DATA)NEAR_N=_..X_EXT_NV_BASE:+_..X_EXT_NV_SIZE

Что такое _..X_EXT_NV_BASE и _..X_EXT_NV_SIZE?
В описании расположения сегментов надо изменить эту строку на
Код
-Z(DATA)NEAR_N=_..X_SRAM_BASE-_..X_SRAM_END

Или добавить сегмент NEAR_N туда же, где и описаны сегменты NEAR_I и NEAR_Z в файле *.xcl (в опциях проекта это, к сожалелению, сделать не получится если имеется определение для сегмента по умолчанию).
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Jun 5 2006, 13:39
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Спасибо всем откликнувшимся. smile.gif Перевариваю.
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Jun 14 2006, 01:20
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Подключил xcl файл, по образу и подобию "подсмотренному" в MAP файле. Но вот одна проблема

Почему-то не хочет переваривать следующую строку. (В MAP файле эта строка наблюдается)

-s __program_start "C:\IAR Systems\Embedded Workbench 4.0 Evalution\avr\LIB\CLIB\cl5s-ec.r90"

Что я не правильно делаю, и как надо???
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Jun 14 2006, 06:52
Сообщение #8


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Цитата(SasaVitebsk @ Jun 14 2006, 04:20) *
Подключил xcl файл, по образу и подобию "подсмотренному" в MAP файле. Но вот одна проблема

Почему-то не хочет переваривать следующую строку. (В MAP файле эта строка наблюдается)

-s __program_start "C:\IAR Systems\Embedded Workbench 4.0 Evalution\avr\LIB\CLIB\cl5s-ec.r90"

Что я не правильно делаю, и как надо???

Эта строка не нужна в xcl файле вообще.
Go to the top of the page
 
+Quote Post
_artem_
сообщение Oct 12 2006, 03:56
Сообщение #9


учащийся
*****

Группа: Свой
Сообщений: 1 065
Регистрация: 29-10-05
Из: города контрастов
Пользователь №: 10 249



Цитата
Что такое _..X_EXT_NV_BASE и _..X_EXT_NV_SIZE?


Сегодня с той же проблемой столкнулся и нашел откуда компайлер это дурье приплюсовывает - когда линкует то к стандартному cfgm128.xcl (допустим для мега128) еще добавляется cfg3s.xcl из того же template директории. И вот этот _..X_EXT_NV_BASE и _..X_EXT_NV_SIZE там и тусуется. И нигде в документации его описание не нашел.

iar 4.20


--------------------
Зачем лаять на караван , когда на него можно плюнуть?

Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Oct 13 2006, 06:22
Сообщение #10


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Шаблонные файлы из директории template берутся в случае настройки линкера из IDE.
Чтобы избежать подобных нюансов и неоднозначностей я всегда рекомендую скопировать один cfgm128.xcl (допустим для мега128) в директорию проекта и все настройки делать в нём, а не из IDE.
Это и меет ещё и тот плюс, что проекты даже на одном МК, как правило, разные и им нужны разные настройки, которые удобнее держать в папке проекта. Это опять же удобно для переносимости (на другой комп, например) или для архивирования.
Go to the top of the page
 
+Quote Post
_artem_
сообщение Aug 18 2007, 16:10
Сообщение #11


учащийся
*****

Группа: Свой
Сообщений: 1 065
Регистрация: 29-10-05
Из: города контрастов
Пользователь №: 10 249



Наконец то переборол лень прочитал хлинк описание и поставил отдельный хцл файл.
Правда лень частично победила и написал чтотo вроде :

-Z(SPLIT-DATA)NEAR_I,NEAR_Z,NEAR_C,NEAR_N=_..X__SRAM_BASE-_..X_SRAM_END,_..X_EXT_SRAM_BASE:+_..X__EXT_SRAM_SIZE

Вопросик такой - кто нибудь использует такие распределенные между внутренней и внешней памятью сегменты как наверху ? Есть подвох в этом?
Понятно что для быстрого доступа к опеределенным переменным я могу свой сегмент создать, а так, если мне без разницы, то зачем не позволить линкеру сделать это неблагодарное дело за меня?


--------------------
Зачем лаять на караван , когда на него можно плюнуть?

Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Aug 20 2007, 23:12
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Цитата(_artem_ @ Aug 18 2007, 19:10) *
Наконец то переборол лень прочитал хлинк описание и поставил отдельный хцл файл.
Правда лень частично победила и написал чтотo вроде :

-Z(SPLIT-DATA)NEAR_I,NEAR_Z,NEAR_C,NEAR_N=_..X__SRAM_BASE-_..X_SRAM_END,_..X_EXT_SRAM_BASE:+_..X__EXT_SRAM_SIZE

Вопросик такой - кто нибудь использует такие распределенные между внутренней и внешней памятью сегменты как наверху ? Есть подвох в этом?
Понятно что для быстрого доступа к опеределенным переменным я могу свой сегмент создать, а так, если мне без разницы, то зачем не позволить линкеру сделать это неблагодарное дело за меня?


Да вроде нет. У меня всё распределено верно. Хотя проект крупный относительно. Озу - 8к. К распределению переменных не касался и свои сегменты не создавал. И, если честно, то не могу понять как создание своего сегмента может ускорить доступ к определённым переменным.

Если потом интересует, то смотрел распределение памяти по переменным в MAP файле.
Go to the top of the page
 
+Quote Post
_artem_
сообщение Aug 21 2007, 00:32
Сообщение #13


учащийся
*****

Группа: Свой
Сообщений: 1 065
Регистрация: 29-10-05
Из: города контрастов
Пользователь №: 10 249



Дык это изза лени ). У меня сейчас где то около 27 КБ озу. В случае с символьным меню будет где то 40 КБ.
Если распределение памяти делать используя SPLIT то не надо думать попадет ли сегмент во внутреннее озу или во внешнее и разрывов (неиспольззуемой памяти изза того что сегмент слишком большой для внутренней памяти, и вследствии чего будет размешен во внешний ) не будет. Распределение памяти насколько я понял по сегментам идет в последовательности в которой они задекларированы в хцл файле. если задача требует чтобы доступ к переменным, которые могут быть размешены во внешней памяти тоже (допустим NEAR_I), был быстрым и их количество мало, то для них можно создать свой собственный сегмент и для него в хцл файле описать размешение во внутреннюю память которая быстрее чем внешняя на sram.


--------------------
Зачем лаять на караван , когда на него можно плюнуть?

Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Aug 23 2007, 18:47
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Блин. biggrin.gif Теперь понял о чём речь. smile.gif Да... об этом я не подумал. У меня только внутренняя RAMа. А вот-вот будет внутренняя/внешняя. Наверное к тебе обращаться буду. Как к разобравшемуся. smile.gif Пока раньше времени не хочу голову забивать.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 20th May 2024 - 17:34
Рейтинг@Mail.ru


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