Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: __no_init в IAR AVR 511b
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > IAR
Dog Pawlowa
Сменил версию IAR.
Имеем - счетчик сбросов по wdt, с доступом по интерфейсу, перестал нормально записываться и считываться. Чтобы он нормально работал, он должен быть ессно, __no_init.
В проекте на М128 - нормально, в проекте на М32 - перестал работать.
Убираю __no_init - все нормально.
В причинах пока не разобрался, но если честно, задрал ИАР своими постоянными изменениями формата xcl - файла.
Если кто столкнулся, дайте знать. Спасибо.
SasaVitebsk
Цитата(Dog Pawlowa @ Nov 5 2008, 20:51) *
Сменил версию IAR.
Имеем - счетчик сбросов по wdt, с доступом по интерфейсу, перестал нормально записываться и считываться. Чтобы он нормально работал, он должен быть ессно, __no_init.
В проекте на М128 - нормально, в проекте на М32 - перестал работать.
Убираю __no_init - все нормально.
В причинах пока не разобрался, но если честно, задрал ИАР своими постоянными изменениями формата xcl - файла.
Если кто столкнулся, дайте знать. Спасибо.

Я не заметил разницы кроме одной. Если __no_init применяешь к локальной переменной, то всё нормально по умолчанию проходит. А вот если к глобальной, то компилятор её переносит в сегмент NEAR_N. А по умолчанию часто он равен 0. ну правишь строчку типа
-Z(DATA)NEAR_Z,NEAR_I=_..X_SRAM_BASE-_..X_SRAM_END
на
-Z(DATA)NEAR_Z,NEAR_I,NEAR_N=_..X_SRAM_BASE-_..X_SRAM_END
и всё работает.

Или я вопрос неправильно понял?
Dog Pawlowa
Цитата(SasaVitebsk @ Nov 6 2008, 03:51) *
Или я вопрос неправильно понял?

Нет, вопрос понят правильно, спасибо за подсказку.
Переменная расположена по адресу 0x5a если _no_init, и 0x221, если инициализируется.
Смотрю свой xcl файл, вытащенный пару лет назад из неизвестно какой версии:
-Z(DATA)NEAR_N=58-6FFF
То есть компилятор разместил туда, куда ему сказали.
Вряд ли я такую бомбу сам придумал, скорее всего это стрельнула старая ошибка IAR.
Исправил на -Z(DATA)NEAR_N=60-85F, переменная попала наконец-то в ОЗУ, все работает.
Сергей Борщ
Цитата(Dog Pawlowa @ Nov 5 2008, 20:51) *
Сменил версию IAR.
Цитата(Dog Pawlowa @ Nov 6 2008, 09:35) *
Смотрю свой xcl файл, вытащенный пару лет назад из неизвестно какой версии:
-Z(DATA)NEAR_N=58-6FFF
То есть компилятор разместил туда, куда ему сказали.
А как же оно работало до смены версии компилятора?
Dog Pawlowa
Цитата(Сергей Борщ @ Nov 6 2008, 11:48) *
А как же оно работало до смены версии компилятора?

Загадка. Сейчас смотрю другие проекты на М32 (тоже "рабочие") - там тоже эта строка есть.
Нужно ставить старые версии и проверять.
Или может SasaVitebsk объяснит.
plombir
Был похожая ситуация, как и у ТС. IAR 5.10, только на М64.
Руками правил xcl файл, и именно описание NEAR_N. Сравнил xcl файлы от 4.11 и 5.10. Они отличаются.
Проверял этот же проект на M32 и M644, там NEAR_N описан корректно.

Подробно не разбирался, но, возможно разработчики намудрили в этих файлах для камней, где можно расширять память.
SasaVitebsk
Цитата(Dog Pawlowa @ Nov 6 2008, 12:24) *
Или может SasaVitebsk объяснит.

Неа. Не объясню. sad.gif
Я очень редко пользуюсь прямым размещением. Стараюсь на компилятор положится.

Я обратил внимание на ряд нюансов, но возможно они были и в старой версии. Этого я не знаю.
Во-первых обратил внимание, что при оптимизации по размеру, компилятор инициализирует только переменные прямо указанные. Иначе этого не делает. (Ранее, по-моему, инициализировалось всё)
Далее. Заметил, что применение __no_init на локальную переменную (даже в голове) компилятор по сути игнорирует. (оно и понятно, если он вообще их не инициализирует).

А вообще-то у меня у самого есть вопросы. Мне кажется кто-нибудь типа zltigo смог бы ответить.

Если я могу писать достаточно универсальный текст для разных типов контроллеров на Си, то наверняка можно как-то указать и универсальные предопределённые значения и для линкера? Иначе ну глупость получается. Пробовал разобраться с проектом AES, но не смог. Да и не нравится мне их подход. Они просто много разных xcl файлов создают. Под каждый проц.

Я бы хотел чтобы были предопределённые константы конца флэш, конца рамы, начала рамы. Или чтобы были зачатки условного указания с предопределённым символом процессора.
Это возможно?

А то я вот написал загрузчик. Продумал его до мелочей. Он у меня ложится на ряд камней мелких, а xcl надо отдельный по разным камням делать. sad.gif Или такой вот пример. Есть прога. Разработана для м640. При производстве получили м2560. Принципиально сделано так, что работает и то и другое. В смысле поддерживаются прошивки для разных камней. А при загрузке пользователь видит что за проц установлен. Но при компиляции - приходится вручную. (опять таки на буте. Так как на проге можно использовать файл для 2560 под 640 и под 2560)

Короче вопросы есть.
Dog Pawlowa
Цитата(SasaVitebsk @ Nov 11 2008, 13:47) *
Короче вопросы есть.

Ну и я не продвинулся в поисках.
1) Явно неправильная строка в xcl. Их всех старых версий смог поставить только 411 - там ее нет.
2) Пробовал перекомпилировать, чтобы понять, как ОНО работало - но как-то неправильно поставил, не компилируется.
Ладно, нужно смотреть вперед smile.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.