реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Глюки IAR Debugger для AVR, Глючит __low_level_init
Zlumd
сообщение Apr 19 2012, 03:01
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 327
Регистрация: 12-04-05
Из: Новосибирск
Пользователь №: 4 057



У меня: 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-ами.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Apr 19 2012, 06:02
Сообщение #2


Гуру
******

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



Если внимательно посмотреть на листинги студии и "битый" листинг ИАРа видно, что по этому адресу располагаются адреса разных команд. Такое ощущение, что у вас в ИАРе в настройках дебаггера не стоит галочка "прописывать флеш" или еще что-то в этом роде (не знаю, как там для AVR организовано). Поэтому он загружает себе в память новый образ, а ходит по старой прошивке, которая осталась во флеше контроллера. Естественно, адреса функций не совпадают и он не может показать правильные имена.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Zlumd
сообщение Apr 19 2012, 06:46
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 327
Регистрация: 12-04-05
Из: Новосибирск
Пользователь №: 4 057



Цитата(Сергей Борщ @ 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".
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Apr 19 2012, 07:41
Сообщение #4


Гуру
******

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



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".
Вот - либо код загрузился неправильно по какой-то причине, либо не загружался вообще.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Zlumd
сообщение Apr 19 2012, 09:22
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 327
Регистрация: 12-04-05
Из: Новосибирск
Пользователь №: 4 057



Цитата(Сергей Борщ @ 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 делать?
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 16th August 2025 - 05:59
Рейтинг@Mail.ru


Страница сгенерированна за 0.01382 секунд с 7
ELECTRONIX ©2004-2016