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

 
 
 
Reply to this topicStart new topic
> Самодельный JTAG ICE + Mega128: при отладке "прыгает не туда"
gluckmaker
сообщение Jan 20 2008, 01:14
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 75
Регистрация: 17-09-07
Из: Москва
Пользователь №: 30 594



Пытаюсь отлаживать простейшую программу в AVR Studio 4.13:

.include "m128def.inc"
rjmp RESET ;Reset Handle
RESET:
ldi r16,$40
out DDRD,r16
lp:
ldi r16,$40
out PORTD,r16
ldi r16,$00
out PORTD,r16
rjmp lp

Запускаю её через Auto Step. Через некоторое время отладка останавливается: курсор стоит на какой-то строчке, в статусной строке Студия показывает "Running", светодиод на отладчике горит постоянно или "подмигивает". Когда до метки RESET и после последнего rjmp был какой-то неиспользуемый код, оно не висло, а переходило вместо очередного шага в произвольную точку этого кода. Возникает резонный вопрос: WTF?

Сделал 2 варианта JTAG ICE: и с отдельным питанием, супервизором и согласованием с таргетом, и упрощённый, в котором Mega16 напрямую подключается к меге в таргете - оба ведут себя одинаково. Таргет - ATMega128-16AI c кварцем на 16.384 МГц, к ней подключен светодиод и MAX232. Цепь сброса - конденсатор на землю и резистор на питание. Плата с мегой без отладчика работает нормально. Кабель между отладчиком и таргетом пробовал сначала длинный (30 см), потом укоротил до 5 см. Частоту TCK в настройках уменьшал до 50 кГц. Скорость пробовал и 19200 (по умолчанию), и 9600. Симптомы всегда одни и те же.
Go to the top of the page
 
+Quote Post
Qwertty
сообщение Jan 20 2008, 01:56
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 408
Регистрация: 21-10-06
Из: Санкт-Петербург
Пользователь №: 21 527



Вектора у М128 расчитаны на использование команды jmp, а не rjmp. У Вас метка RESET находится ВНУТРИ 0-го вектора. Попробуйте так:
.include "m128def.inc"
.cseg
.org 0x0000
jmp RESET ;Reset Handle

.cseg
.org 0x0046
RESET:
ldi r16,$40
out DDRD,r16
lp:
ldi r16,$40
out PORTD,r16
ldi r16,$00
out PORTD,r16
rjmp lp
Не уверен, что решит Вашу роблему, но так все же правильнее.

Сообщение отредактировал Qwertty - Jan 20 2008, 01:57
Go to the top of the page
 
+Quote Post
gluckmaker
сообщение Jan 20 2008, 11:50
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 75
Регистрация: 17-09-07
Из: Москва
Пользователь №: 30 594



Спасибо, попробую. Но в просмотреных мною примерах (AVRxxx) стоит именно rjmp. Да и к моменту возникновения глюка этот переход уже выполнился: всё нормально бегает в течение 1..20 минут, потом на произвольной команде внутри цикла происходит прыг.

Кстати, ещё заметил странность. Оба отладчика шил одинаково: залил на программаторе лоадер, запустил в студии AVRprog, залил один и тот же update.ebn и снял фьюз BOOTRST. Но теперь один вариант запускается без каких-либо глупых вопросов, а другой (упрощённый) просит ещё какой-то апдейт. Если нажать "да", запускается опять AVRprog и не находит устройство, если нажать "нет" - всё работает так же, как и с первым.
Go to the top of the page
 
+Quote Post
Guest_=VRA=_*
сообщение Jan 20 2008, 13:01
Сообщение #4





Guests






Цитата(Qwertty @ Jan 20 2008, 04:56) *
Вектора у М128 расчитаны на использование команды jmp, а не rjmp. У Вас метка RESET находится ВНУТРИ 0-го вектора
Вектора у М128 расчитаны не на jmp, а на правильное понимание их сути, разжеванной в ДШ до безобразия. Следующие примеры работают одинаково корректно, а почему - попробуй догадаться самостоятельно:

Код
.cseg
.org 0x0000
        jmp RESET;Reset Handle

.org 0x0046
RESET:
        ldi r16,$40
        out DDRD,r16

;-----------------------------------------------




Код
.cseg
.org 0x0000
        rjmp RESET;Reset Handle

.org 0x0046
RESET:
        ldi r16,$40
        out DDRD,r16

;-----------------------------------------------




Код
.cseg
.org 0x0000
RESET:
        ldi r16,$40
        out DDRD,r16

;-----------------------------------------------


Из этого сделай вывод - не учи других тому, чего не знаешь сам.



gluckmaker: попробуй вставить внутрь цикла команду WDR
Go to the top of the page
 
+Quote Post
sensor_ua
сообщение Jan 20 2008, 15:39
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 266
Регистрация: 22-04-05
Из: Киев
Пользователь №: 4 387



Цитата
Кстати, ещё заметил странность

Бывали нюансы насчёт автоопределения порта в студии - после выставления вручную (не авто) перешивка проходила нормально.
Ну и загрузчики бывают разные. Там http://onembedding.bialix.com/files/jtag_vit/ лежит загрузчик рабочий, только говорит, что проц не м16, а м163. Исходники там есть. Если ему пару цифирек кода девайса из avrdude вправить, то будет говорить правильно. Но я не правил в своё время из-за отсутствия у меня этих кодов, а потом - за ненадобностью.


--------------------
aka Vit
Go to the top of the page
 
+Quote Post
Qwertty
сообщение Jan 20 2008, 15:44
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 408
Регистрация: 21-10-06
Из: Санкт-Петербург
Пользователь №: 21 527



Цитата(=VRA= @ Jan 20 2008, 16:01) *
Вектора у М128 расчитаны не на jmp, а на правильное понимание их сути, разжеванной в ДШ до безобразия. Следующие примеры работают одинаково корректно, а почему - попробуй догадаться самостоятельно:
Из этого сделай вывод - не учи других тому, чего не знаешь сам.

gluckmaker: попробуй вставить внутрь цикла команду WDR

Я прекрасно знаю как устроены вектора прерываний. Да, в них можно применять команду rjmp, но это не значит, что так и следует делать. Есть такой древний афоризм - "не все, что ты можешь делать безнаказанно, следует делать". smile.gif В даташите кстати, "в котором все разжевано до безобразия", команда rjmp в этом случае не применяется. Не верите? Посмотрите стр 58. Разработчики ядра для Вас явно не авторитеты в этом вопросе. И я кстати, не писал - "так неправильно и работать не будет", я написал, что по другому - правильнее. Я всегда неиспользуемые вектора собираю на какую нибудь заглушку, это позволяет отследить в процессе отладки появление нежелательных прерываний. Писать .org перед каждым вектором мне не нравится, гораздо проще сделать простой список rjmp/jmp для всех векторов. В случае применения rjmp в начале может быть все хорошо, а потом, по мере развития проекта этой команды может просто не хватить. Может проще сразу применить jmp?
По поводу WDR - в коде WDT не включается, фьюз WDTON по умолчанию не запрограммирован, так что непонятно, чем это может помочь. Тем более, что WDT работает независимо от JTAG, и если он включен, то "некоторое время" у автора темы превращается в 2-2,5 секунды максимум. Я думаю это он бы заметил smile.gif
Go to the top of the page
 
+Quote Post
sensor_ua
сообщение Jan 20 2008, 15:56
Сообщение #7


Профессионал
*****

Группа: Свой
Сообщений: 1 266
Регистрация: 22-04-05
Из: Киев
Пользователь №: 4 387



Цитата
Я всегда неиспользуемые вектора собираю на какую нибудь заглушку

Там пример встречал
http://avr.h15.ru/index.php?page=coding


--------------------
aka Vit
Go to the top of the page
 
+Quote Post
Qwertty
сообщение Jan 20 2008, 15:59
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 408
Регистрация: 21-10-06
Из: Санкт-Петербург
Пользователь №: 21 527



Цитата(sensor_ua @ Jan 20 2008, 18:56) *
Там пример встречал
http://avr.h15.ru/index.php?page=coding

Ну да, именно это и использую в С. А в ассемблере ручками приходится вектора набирать sad.gif
Go to the top of the page
 
+Quote Post
Guest_=VRA=_*
сообщение Jan 20 2008, 16:22
Сообщение #9





Guests






Цитата
Я прекрасно знаю как устроены вектора прерываний. Да, в них можно применять команду rjmp, но это не значит, что так и следует делать. Есть такой древний афоризм - "не все, что ты можешь делать безнаказанно, следует делать"
Мне, четыре года проработавшему в фирме Atmel в должности Field Application Engineer, это слышать особенно прикольно приятноsmile.gifsmile.gif

Сообщение отредактировал =VRA= - Jan 20 2008, 16:23
Go to the top of the page
 
+Quote Post
gluckmaker
сообщение Jan 20 2008, 19:23
Сообщение #10


Частый гость
**

Группа: Свой
Сообщений: 75
Регистрация: 17-09-07
Из: Москва
Пользователь №: 30 594



Сорри, AVRовский ассемблер знаю крайне плохо - эту прогу слепил просто для проверки отладчика "по образу и подобию" примеров из аппнот. Попробовал на другой машине в той же Студии отлаживать программу на С - те же зайцы, только в профиль: останавливается на произвольной строчке.

Вотчдог, естественно, выключен. Более сложная программа без отладчика на этом таргете работает нормально.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 18th July 2025 - 06:32
Рейтинг@Mail.ru


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