|
|
  |
__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 объяснит.
--------------------
Уходя, оставьте свет...
|
|
|
|
|
Nov 11 2008, 10:47
|
Гуру
     
Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521

|
Цитата(Dog Pawlowa @ Nov 6 2008, 12:24)  Или может SasaVitebsk объяснит. Неа. Не объясню. Я очень редко пользуюсь прямым размещением. Стараюсь на компилятор положится. Я обратил внимание на ряд нюансов, но возможно они были и в старой версии. Этого я не знаю. Во-первых обратил внимание, что при оптимизации по размеру, компилятор инициализирует только переменные прямо указанные. Иначе этого не делает. (Ранее, по-моему, инициализировалось всё) Далее. Заметил, что применение __no_init на локальную переменную (даже в голове) компилятор по сути игнорирует. (оно и понятно, если он вообще их не инициализирует). А вообще-то у меня у самого есть вопросы. Мне кажется кто-нибудь типа zltigo смог бы ответить. Если я могу писать достаточно универсальный текст для разных типов контроллеров на Си, то наверняка можно как-то указать и универсальные предопределённые значения и для линкера? Иначе ну глупость получается. Пробовал разобраться с проектом AES, но не смог. Да и не нравится мне их подход. Они просто много разных xcl файлов создают. Под каждый проц. Я бы хотел чтобы были предопределённые константы конца флэш, конца рамы, начала рамы. Или чтобы были зачатки условного указания с предопределённым символом процессора. Это возможно? А то я вот написал загрузчик. Продумал его до мелочей. Он у меня ложится на ряд камней мелких, а xcl надо отдельный по разным камням делать.  Или такой вот пример. Есть прога. Разработана для м640. При производстве получили м2560. Принципиально сделано так, что работает и то и другое. В смысле поддерживаются прошивки для разных камней. А при загрузке пользователь видит что за проц установлен. Но при компиляции - приходится вручную. (опять таки на буте. Так как на проге можно использовать файл для 2560 под 640 и под 2560) Короче вопросы есть.
|
|
|
|
|
Nov 11 2008, 11:59
|
Гуру
     
Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823

|
Цитата(SasaVitebsk @ Nov 11 2008, 13:47)  Короче вопросы есть. Ну и я не продвинулся в поисках. 1) Явно неправильная строка в xcl. Их всех старых версий смог поставить только 411 - там ее нет. 2) Пробовал перекомпилировать, чтобы понять, как ОНО работало - но как-то неправильно поставил, не компилируется. Ладно, нужно смотреть вперед
--------------------
Уходя, оставьте свет...
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|