|
__no_init в IAR AVR 511b, Не разобрался подробнее, но есть проблемы |
|
|
|
Nov 5 2008, 17:51
|
Гуру
     
Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823

|
Сменил версию IAR. Имеем - счетчик сбросов по wdt, с доступом по интерфейсу, перестал нормально записываться и считываться. Чтобы он нормально работал, он должен быть ессно, __no_init. В проекте на М128 - нормально, в проекте на М32 - перестал работать. Убираю __no_init - все нормально. В причинах пока не разобрался, но если честно, задрал ИАР своими постоянными изменениями формата xcl - файла. Если кто столкнулся, дайте знать. Спасибо.
--------------------
Уходя, оставьте свет...
|
|
|
|
|
 |
Ответов
|
Nov 5 2008, 23:51
|
Гуру
     
Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521

|
Цитата(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 и всё работает. Или я вопрос неправильно понял?
|
|
|
|
|
Nov 6 2008, 06:35
|
Гуру
     
Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823

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

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

|
Цитата(Dog Pawlowa @ Nov 5 2008, 20:51)  Сменил версию IAR. Цитата(Dog Pawlowa @ Nov 6 2008, 09:35)  Смотрю свой xcl файл, вытащенный пару лет назад из неизвестно какой версии: -Z(DATA)NEAR_N=58-6FFF То есть компилятор разместил туда, куда ему сказали. А как же оно работало до смены версии компилятора?
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Nov 6 2008, 08:24
|
Гуру
     
Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823

|
Цитата(Сергей Борщ @ Nov 6 2008, 11:48)  А как же оно работало до смены версии компилятора? Загадка. Сейчас смотрю другие проекты на М32 (тоже "рабочие") - там тоже эта строка есть. Нужно ставить старые версии и проверять. Или может SasaVitebsk объяснит.
--------------------
Уходя, оставьте свет...
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|