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

 
 
 
Reply to this topicStart new topic
> IAR, J-Link и прерывания
sgrig
сообщение Jun 7 2006, 11:53
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 45
Регистрация: 4-11-05
Из: Tomsk
Пользователь №: 10 464



Прежде чем пойти и тихо удавиться решил попросить совета здесь.

В результате ряда манипуляций с программой, отлаживаемой в IAR ARM v.4.11a
с помощью J-Link из IAR-KIT добился следующего:

В отладчике не работают никакие прерывания, хотя все служебные регистры
читаются как надо.
Вне отладчика - все работает как надо.

Еще несколько часов назад и в отладчике все было отлично. Что случилось, понять
не могу, уже близок к суициду wacko.gif

Буду рад любым соображениям по теме...
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jun 7 2006, 13:16
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(sgrig @ Jun 7 2006, 14:53) *
Прежде чем пойти и тихо удавиться решил попросить совета здесь.

Бывает не работает часть прерываний, бывает все. Бился (и инициализация, и сбросы, и со скриптами перед запуском отладчика колдовал) долго и безнадежно.
Помогла только 5 версия железа J-Link, точнее поддержка этим железом опции
"adaptive clocking". Все взяло и заработало. Эффект несколько ослабевал при использовании
segger-овских DDLок посвежее - посетите segger.com.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
sgrig
сообщение Jun 8 2006, 03:10
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 45
Регистрация: 4-11-05
Из: Tomsk
Пользователь №: 10 464



Все страньше и страньше..

Воспользовался Вашим советом, обновил драйвер с СЕГГЕРа. Легче не стало.

НО! Пару месяцев назад я угробил несколько дней, пытаясь заставить работать
RDI. Так и не смог. А тут ткнулся по старой памяти и все пошло влегкую -
молниеносная загрузка и куча точек останова.

Естественно, в RDI появилась опция Adaptive clocking, только с ней все очень
медленно (у меня JLink 3-ей версии). Но прерывания все равно не работают в
отладчике.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jun 8 2006, 06:35
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(sgrig @ Jun 8 2006, 06:10) *
Естественно, в RDI появилась опция Adaptive clocking, только с ней все очень
медленно (у меня JLink 3-ей версии). Но прерывания все равно не работают в
отладчике.

А в V3 в принципе нет (мне так кажется) поддержки Adaptive clocking. Что-то как-то выставляет и как-то в принципе работает, но на эффекте прерываний не сказывается. Про V5 я писал, поскольку у меня есть старый эквивалент и новый полный клоны J-Link V5. На V5 однозначно рабочая опция и железно помогает c глюком.
Кстати, у меня эффект с пропаданием проявляется 100% при 'штатном' обязательном останове на 0 адресе. При переносе его на main() еще меньше и так далее... Cо свежими драйверами спокойно преносит железный сброс и можно после зависания прерываний reset -> break -> установить brekpoint -> run и все работает.
И еще, у меня эффект был завязан на процесс прошивки Flash, поэтому, если прошить а потом отключить загрузку и только отладка, то тоже без потерь прерываний. Неудобно, конечно, лазить в опции, но помогает.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jun 8 2006, 07:19
Сообщение #5


Гуру
******

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



Цитата(sgrig @ Jun 7 2006, 14:53) *
Прежде чем пойти и тихо удавиться решил попросить совета здесь.

В результате ряда манипуляций с программой, отлаживаемой в IAR ARM v.4.11a
с помощью J-Link из IAR-KIT добился следующего:

В отладчике не работают никакие прерывания, хотя все служебные регистры
читаются как надо.
Вне отладчика - все работает как надо.

Еще несколько часов назад и в отладчике все было отлично. Что случилось, понять
не могу, уже близок к суициду wacko.gif

Буду рад любым соображениям по теме...

Было подобное. То генрятся то нет.
Соображения такие: при сбросе отладчиком происходит только сброс ядра, но не контроллера прерываний. Если перед этим обрабатывалось какое-то прерывание и логика контроллера не была сброшена (VICVecAddr = 0 или AIC_EOICR = 0) то следующее прерывание не генерится.
Поборол принудительным сбросом контроллера прерываний в процедуре инициализации.


--------------------
На любой вопрос даю любой ответ
"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
vesago
сообщение Jun 8 2006, 07:31
Сообщение #6


Тутэйшы
****

Группа: Свой
Сообщений: 708
Регистрация: 30-11-04
Пользователь №: 1 263



У меня МТлинк и даже не 5 версии. Работаю через RDI последней версии. Как заполучил отладчик - начал ставить разные версии драйверов, ковыряться в настройках. В результате на каком-то этапе вообще перестало работать, хотя командер видел. Чего я только не делал, чтоб реанимировать. Помогла только переустановка оси. Сейчас все настройки поумолчанию. Правда через некоторое время плохо стало соединяться. Тогда в начтройках CPU поставил задержку на 200 млс и пока все стабильно. Прада если надо брэкпоинт поставить, сначала надо по шагам немного пройтись, поставить брэкпоинт и только после этого запускать.
Go to the top of the page
 
+Quote Post
sgrig
сообщение Jun 8 2006, 07:51
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 45
Регистрация: 4-11-05
Из: Tomsk
Пользователь №: 10 464



Огромное спасибо всем за участие.

Дело кончилось тем, что я скачал и поставил EWA версии 4.40а в
дополнение к новым драйверам от segger.

Все заработало как часы, вопрос в том, надолго ли.
Причем в JLink-е теперь неограниченное количество точек останова,
но RDI по прежнему грузит раза в 3 быстрее.

В общем уже часа полтора счастлив и наслаждаюсь стабильностью
результатов, стараясь пока не думать о плохом.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jun 8 2006, 12:19
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Сергей Борщ @ Jun 8 2006, 10:19) *
Поборол принудительным сбросом контроллера прерываний в процедуре инициализации.

У меня как правило работает часть прерываний. Можно, конечно попробовать и сбросы всего, что попало в скрипт инициализации добавить. Попробую на досуге.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
sgrig
сообщение Jun 8 2006, 12:37
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 45
Регистрация: 4-11-05
Из: Tomsk
Пользователь №: 10 464



Если поставить точку останова в прерывании, а затем сделать сброс,
прерывания перестают работать.

Поставил в стартапе EOICR = 0 и эта проблема исчезла, так что совет очень дельный.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jun 8 2006, 17:32
Сообщение #10


Гуру
******

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



Цитата(zltigo @ Jun 8 2006, 15:19) *
Цитата(Сергей Борщ @ Jun 8 2006, 10:19) *

Поборол принудительным сбросом контроллера прерываний в процедуре инициализации.

У меня как правило работает часть прерываний. Можно, конечно попробовать и сбросы всего, что попало в скрипт инициализации добавить. Попробую на досуге.
Может не совсем правильно выразился, вот sgrig понял. Под сбросом я понимал вот что:
Цитата
VICVectAddr: Writing to this register does not set the value for future reads from it. Rather, this register should be written near the end of an ISR, to update the priority hardware.
Почему-то мне запомнилась фраза "This will reset VIC logic", хотя сейчас в мануале ее не нашел, видимо сам ассоциативно выдумал ;-). Для AT91 аналогичное происходит при записи в EOICR.


--------------------
На любой вопрос даю любой ответ
"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
zltigo
сообщение Jun 8 2006, 17:46
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Сергей Борщ @ Jun 8 2006, 20:32) *
Может не совсем правильно выразился.

Выразился правильно, но данный эффект не объясняет наиболее частый у меня вариант, когда
не работает самое приоритетное прерывание. Низкоприоритетные живут. Попробую обязательно.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jun 8 2006, 18:43
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Попробовал. Как и следовало ожидать, строка
"Write32( 0xFFFFF030, 0x00000000 );"
в скрипте эффекта не оказала, зато выяснилось, что все нормально работает
не только при 'Adaptive clocking', но и при зажатии JTAG на фиксированной скорости 2000KHz и более.
На меньших скоростях - нестабильнось. На скоростях мене 1000KHz - полная неработоспособность.
В штатной (не RDI) поддержке есть опция Auto, но с начальной скоростью, так вот, указание более высокой начальной скорости ничего не меняет.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 08:51
Рейтинг@Mail.ru


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