Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Глюки IAR Debugger для AVR
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > IAR
Zlumd
У меня: IAR for AVR v6.11, XMega128A1, JTAG ICE mkII, WinXP SP3
Загружаю прошивку в контроллер с помощью IAR С-SPY Debugger:
Нажмите для просмотра прикрепленного файла
__ low_level_init указывает куда надо.
Далее в процессе отладки останавливаюсь на одном брейкпойнте, перекомпилирую и перезапускаю C-SPY, прошивка перезаливается, и:
Нажмите для просмотра прикрепленного файла
Теперь вместо __low_level_init появилось 0x1DC06. Т.е. осуществляется вызов процедуры по какому-то левому адресу. Программа в Xmege после этого не работает.
После этого не помогают никакие перекомиляции, ни ReBuild All, ни перезапуск отладчика, ни вкл/выкл питания процессора.
Помогает только одно: Меняю тип выходного файла на Ubrof 8 и загружаю его с помощью AVR Studio. В студии все нормально:
Нажмите для просмотра прикрепленного файла
После этого снова меняю формат на Debug info for C-SPY и начинаю отлаживаться с помощью C-SPY. И __low_level_init снова указывает куда надо, до тех пор пока не остановишься на первом же брейкпойнте.

Подскажите, из-за чего может быть такая проблема?
Вообще непонятно, как AVR Studio может влиять на результат работы линкера.
PS: В AVR Studio такого глюка никогда не наблюдалось, но в ней отлаживаться не хочу, так в ней менее удобно работать с Watch-ами.
Сергей Борщ
Если внимательно посмотреть на листинги студии и "битый" листинг ИАРа видно, что по этому адресу располагаются адреса разных команд. Такое ощущение, что у вас в ИАРе в настройках дебаггера не стоит галочка "прописывать флеш" или еще что-то в этом роде (не знаю, как там для AVR организовано). Поэтому он загружает себе в память новый образ, а ходит по старой прошивке, которая осталась во флеше контроллера. Естественно, адреса функций не совпадают и он не может показать правильные имена.
Zlumd
Цитата(Сергей Борщ @ Apr 19 2012, 13:02) *
Такое ощущение, что у вас в ИАРе в настройках дебаггера не стоит галочка "прописывать флеш"
В IAR C-SPY есть кнопка "Download and Debug". Я всегда жму на нее.
Я поставил тычку Project\Options\Debugger\JTAGICE mkII\Target Consistency Check\Verify All.
Теперь стал выдавать несколько сотен MessageBox-ов, первое из которых: "Verify failed at CODE 0x003A".
Сергей Борщ
QUOTE (Zlumd @ Apr 19 2012, 09:46) *
В IAR C-SPY есть кнопка "Download and Debug". Я всегда жму на нее.
А в ИАРе для ARM в свойствах проекта в разделе дебаггера есть еще куча галочек, в том числе и "загружать код" и "использовать загрузчик для флеш". Возможно в ИАРе для AVR тоже есть что-то подобное.
QUOTE (Zlumd @ Apr 19 2012, 09:46) *
Я поставил тычку Project\Options\Debugger\JTAGICE mkII\Target Consistency Check\Verify All.
Теперь стал выдавать несколько сотен MessageBox-ов, первое из которых: "Verify failed at CODE 0x003A".
Вот - либо код загрузился неправильно по какой-то причине, либо не загружался вообще.
Zlumd
Цитата(Сергей Борщ @ Apr 19 2012, 14:41) *
Вот - либо код загрузился неправильно по какой-то причине, либо не загружался вообще.
Походу дела IAR перед программированием прошивки Erase забывает делать.
Был код: 940E EE95 jmp __low_level_init
Добавил в программу две строчки, __low_level_init сдвигается.
Т.е. должно стать 940E EE9B jmp __low_level_init,
а реально получается 940E EE91.
95h & 9Bh = 91h.
В опциях настройки дебаггера можно какие-то макросы подключать. Можно ли его как-то с помощью макроса заставить Erase делать?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.