SapegoAL 0 3 июня, 2006 Опубликовано 3 июня, 2006 · Жалоба Честно признаю, читал документацию. Даже сделал книжечки и постоянно в них лажу. Но к данному вопросу не знаю как подойти. Не разобрался по английски. :) Поэтому прошу не отфутболивать к документации, а кратко ответить (если можно). Пытаюсь к ряду переменных пристегнуть спецификатор __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" Про данные сегменты я читал, но как его объявить в опциях проекта. Чтобы не создавать файл опций. Если можно, то с примером пожалуйста. :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 2 3 июня, 2006 Опубликовано 3 июня, 2006 · Жалоба Про данные сегменты я читал, но как его объявить в опциях проекта. Чтобы не создавать файл опций. Если можно, то с примером пожалуйста. :) Это не прямо в 'проекте' - это в *.xcl файле - опции линкера. Соответственно смотреть документацию на линкер или прямо по "образу и подобию" остальных сегментов отредактировать файл *.xcl имя которого указано в 'проекте'. Если по каким-то непонятным причинам нехочется редактировать *.xcl файл, то в IDE опциях линкера есть раздел 'extra options', куда и вписать командную строчку. Есть и 'wizard' для 'генерации', но думаю, что лучше его нафиг послать ввиду его ничем не прикрытой убогости. А редактировать придется - в Вашем файле сегмент описан, но его размер X_EXT_NV_SIZE мал. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SapegoAL 0 3 июня, 2006 Опубликовано 3 июня, 2006 · Жалоба Я смотрел доку по LINK. И если бы я в ней разобрался, то не стал бы никого беспокоить. :) Описание опции -Z весьма скудное. Тоесть оно полное, но о таких вещах как _..X_EXT_NV_SIZE там не слова. По моему глупо что сегмент NEAR_I (размеры и начало) линкер "понимает из проекта", а такой же NEAR_N - нет. В моём понимании, по опции __no_init компилятор должен был бы определить мои переменные в соответствующий сегмент. Соответственно линкер выделить под него место. Глупо выделять его вручную. Не хочу его размещать и привязывать к физическому адресу. А как указать линкеру, чтобы он сам зарезервировал место - не знаю. Кроме всего попробовал дать команду в 'extra options', - так он гад пишет что не фиг мол два раза сегмент определять. Можно конечно "извратится" и разместить переменные в каком-то своём сегменте, но по-моему должен быть какой-то прямой путь чтобы решить данную проблему. .xcl файл я не создавал, а пользуюсь закладками в опциях пакета. Ещё раз попрошу не отсылайте меня к документации. Ну не могу разобраться! Не может быть чтобы никто до меня данную проблему не решал. Кинте в меня примером строки из extra options или xcl файла. Или объясните ошибки. Буду очень благодарен. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 143 4 июня, 2006 Опубликовано 4 июня, 2006 · Жалоба .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"; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
IgorKossak 0 5 июня, 2006 Опубликовано 5 июня, 2006 · Жалоба Проблема в следующем -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 (в опциях проекта это, к сожалелению, сделать не получится если имеется определение для сегмента по умолчанию). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SapegoAL 0 5 июня, 2006 Опубликовано 5 июня, 2006 · Жалоба Спасибо всем откликнувшимся. :) Перевариваю. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SapegoAL 0 14 июня, 2006 Опубликовано 14 июня, 2006 · Жалоба Подключил xcl файл, по образу и подобию "подсмотренному" в MAP файле. Но вот одна проблема Почему-то не хочет переваривать следующую строку. (В MAP файле эта строка наблюдается) -s __program_start "C:\IAR Systems\Embedded Workbench 4.0 Evalution\avr\LIB\CLIB\cl5s-ec.r90" Что я не правильно делаю, и как надо??? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
IgorKossak 0 14 июня, 2006 Опубликовано 14 июня, 2006 · Жалоба Подключил xcl файл, по образу и подобию "подсмотренному" в MAP файле. Но вот одна проблема Почему-то не хочет переваривать следующую строку. (В MAP файле эта строка наблюдается) -s __program_start "C:\IAR Systems\Embedded Workbench 4.0 Evalution\avr\LIB\CLIB\cl5s-ec.r90" Что я не правильно делаю, и как надо??? Эта строка не нужна в xcl файле вообще. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_artem_ 0 12 октября, 2006 Опубликовано 12 октября, 2006 · Жалоба Что такое _..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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
IgorKossak 0 13 октября, 2006 Опубликовано 13 октября, 2006 · Жалоба Шаблонные файлы из директории template берутся в случае настройки линкера из IDE. Чтобы избежать подобных нюансов и неоднозначностей я всегда рекомендую скопировать один cfgm128.xcl (допустим для мега128) в директорию проекта и все настройки делать в нём, а не из IDE. Это и меет ещё и тот плюс, что проекты даже на одном МК, как правило, разные и им нужны разные настройки, которые удобнее держать в папке проекта. Это опять же удобно для переносимости (на другой комп, например) или для архивирования. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_artem_ 0 18 августа, 2007 Опубликовано 18 августа, 2007 · Жалоба Наконец то переборол лень прочитал хлинк описание и поставил отдельный хцл файл. Правда лень частично победила и написал чтот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 Вопросик такой - кто нибудь использует такие распределенные между внутренней и внешней памятью сегменты как наверху ? Есть подвох в этом? Понятно что для быстрого доступа к опеределенным переменным я могу свой сегмент создать, а так, если мне без разницы, то зачем не позволить линкеру сделать это неблагодарное дело за меня? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SapegoAL 0 20 августа, 2007 Опубликовано 20 августа, 2007 · Жалоба Наконец то переборол лень прочитал хлинк описание и поставил отдельный хцл файл. Правда лень частично победила и написал чтот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 файле. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_artem_ 0 21 августа, 2007 Опубликовано 21 августа, 2007 · Жалоба Дык это изза лени ). У меня сейчас где то около 27 КБ озу. В случае с символьным меню будет где то 40 КБ. Если распределение памяти делать используя SPLIT то не надо думать попадет ли сегмент во внутреннее озу или во внешнее и разрывов (неиспольззуемой памяти изза того что сегмент слишком большой для внутренней памяти, и вследствии чего будет размешен во внешний ) не будет. Распределение памяти насколько я понял по сегментам идет в последовательности в которой они задекларированы в хцл файле. если задача требует чтобы доступ к переменным, которые могут быть размешены во внешней памяти тоже (допустим NEAR_I), был быстрым и их количество мало, то для них можно создать свой собственный сегмент и для него в хцл файле описать размешение во внутреннюю память которая быстрее чем внешняя на sram. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SapegoAL 0 23 августа, 2007 Опубликовано 23 августа, 2007 · Жалоба Блин. Теперь понял о чём речь. :) Да... об этом я не подумал. У меня только внутренняя RAMа. А вот-вот будет внутренняя/внешняя. Наверное к тебе обращаться буду. Как к разобравшемуся. :) Пока раньше времени не хочу голову забивать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться