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

 
 
> Простой и прозрачный способ отладки программ, (особенно для начинающих)
=GM=
сообщение Dec 11 2007, 15:32
Сообщение #1


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Время от времени слышатся просьбы о помощи в отладке программы. Ниже предлагается простой способ отладки через уарт путём внесения отладочной информации в отлаживаемую программу, т.е. по мере необходимости в исследуемые ветви отлаживаемого кода вставляются две строчки с определённым текстом, например, таким
Код
         rcall     debug
         .db       "some datum to be sent",0

или таким
Код
         rcall     debug
         .db       "первая точка пройдена",0


Программа вывода отладочной информации имеет следующий вид
Код
debug:   pop       zh
         pop       zl
         lsl       zl
         rol       zh
deb1:    lpm       temp,z+
         tst       temp
         brne      deb2
         lsr       zh
         ror       zl
         ijmp
deb2:    sbis      ucsr0a,udre0
         rjmp      deb2
         out       udr0,temp
         rjmp      deb1

и занимает всего 14 слов кода.

Интересно бы пообсуждать данный метод и узнать заодно, кто-нибудь пользуется подобным способом отладки?


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
zhevak
сообщение Dec 11 2007, 20:12
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 723
Регистрация: 29-08-05
Из: Березовский
Пользователь №: 8 065



Странные вы какие-то...

Отладка отладке -- рознь. Одно дело отлаживать код в мелкиих АВРках (tiny13, 15, 26), у которых нет uart, другое дело отлаживать код в крупных АВРках, где полно всяких "вводов/выводов".

Я лично так делаю. Когда код небольшой по размерам или код дожен работать в реальном времени, -- выделяю под отладку 2-3-4 вывода какого-нибудь порта. "Прохождение" проги контролирую изменением состояния соответствующей ноги. Можно ЛЭДом, можно осциллографом. Это так называемый, первый уровень отладки. Он годится лишь для маленьких АВРок и маленьких программ.

Если прога болшая и процессорное время позволяет, то организую отладочный канал на основе uart'а. С частотой особо не заморачиваюсь, делаю 115200. Такую частоту все компы поддерживают, поэтому проблем нет. На вывод организую буфер, не кольцевой, объемом от 10 до 64 байт (когда как). Этого вполне достаточно для того, чтобы вывести изнутри АВРки несколько байт перемненных. По этим байтам можно судить о том, что делает прога. Это -- второй уровень отладки. Обычно я использую этот подход для программ 500-4000 байт для средних АВРок (от tiny2313 до mega8).

Третий уровень. Это отладка с помощью JTAG-отладчитков. Сюда можно также отнести и 1d-отладку, но я с ней не "игрался", поэтому ничего не могу сказать. Итак, этот уровень позволяет не только посмотреть некоторые переменные, но и пройтись по шагам. Понятно, что не всякая АВРка имеет JTAG-интерфейс. Поэтому этот метод подходит только для больших АВРок и больших программ.

Все, что я сказал выше, это не есть какое-то незыблемое правило. Способ отладки зависит от типа АВРки и объема программного кода, от наличия под руками отладочных средств (JTAG-отладчика, конвертора uart -> RS232, -> USB) и желания что-то делать.


Два, маленьких примера. Я сейчас рожаю один проект на mega2561: два uart'а, графический LCD, тетя клава на 20 кнопулек (мышки только вот нет!). Система управления основанная на событиях, реальное время, ... ладно, не буду все рассказывать. Короче, достаточно солидный проект. Так вот, отлаживать его с помощью LED'ов -- невозможно, по моему тут даже и говорить не о чем. Если отладку производить с помощью uart'ов, то они оба заняты самой прогой. Поэтому, быстро и безупречно -- не получится. На других интерфейсах (I2C, SPI) тоже сидя не по одному устройству. Значит, оставется только JTAG. Что я и делаю.

Второй пример, для отладки модуля, упомянутого в первом примере, мне понадобилось сделать маленькую плату на tiny2313. Плата должна была принимать определенные пакеты и отсылать на них ответные. Типа эмулятор периферийного устройства (объекта). Я не умею писать проги без ошибок, поэтому отладка здесь тоже была нужна. Эту плату я отлаживал с помощью "лапко-дерганий" и вывода инфы в uart.

Сообщение отредактировал zhevak - Dec 11 2007, 20:24


--------------------
Хочешь рассмешить Бога -- расскажи ему о своих планах!
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- =GM=   Простой и прозрачный способ отладки программ   Dec 11 2007, 15:32
- - rx3apf   Цитата(=GM= @ Dec 11 2007, 18:32) Интерес...   Dec 11 2007, 15:53
|- - =GM=   Цитата(rx3apf @ Dec 11 2007, 15:53) Приве...   Dec 11 2007, 16:36
|- - rx3apf   Цитата(=GM= @ Dec 11 2007, 19:36) Код мож...   Dec 11 2007, 16:54
|- - =GM=   To rx3apf Посмотрел ваш код, неплохо написано, все...   Dec 12 2007, 16:48
|- - mse   А зачем так долбаться, если можно тупо поставить б...   Dec 13 2007, 09:59
|- - rx3apf   Цитата(mse @ Dec 13 2007, 12:59) А зачем ...   Dec 13 2007, 10:49
||- - mse   Цитата(rx3apf @ Dec 13 2007, 13:49) Часто...   Dec 13 2007, 11:56
|- - =GM=   Цитата(mse @ Dec 13 2007, 09:59) А зачем ...   Dec 13 2007, 13:00
- - Dog Pawlowa   Цитата(=GM= @ Dec 11 2007, 19:32) ... Инт...   Dec 11 2007, 16:44
|- - =GM=   Цитата(Dog Pawlowa @ Dec 11 2007, 16:44) ...   Dec 11 2007, 16:51
|- - Dog Pawlowa   Цитата(=GM= @ Dec 11 2007, 20:51) Что вы ...   Dec 12 2007, 07:59
- - slog   Это аналог printf() в Си   Dec 11 2007, 17:42
- - bodja74   Цитата(=GM= @ Dec 11 2007, 19:32) ijmp de...   Dec 11 2007, 20:49
- - sla000   ИМХО вывод длинных строк для отладки - непозволите...   Dec 12 2007, 04:39
|- - rx3apf   Цитата(sla000 @ Dec 12 2007, 07:39) ИМХО ...   Dec 12 2007, 12:59
|- - Maik-vs   Вставлю и свои 5 коп Тоже uart, но с прерываниям...   Dec 12 2007, 13:27
- - IGK   Я тоже УАРТом отлаживаюсь. Вывод в фоновой програм...   Dec 12 2007, 06:46
- - adc   Подскажите пожалуйста что я делаю не так? в свою ...   Dec 12 2007, 06:52
|- - ae_   Цитата(adc @ Dec 12 2007, 15:52) Подскажи...   Dec 12 2007, 08:03
- - adc   ae_ пасиба! Я писал что "..в свою прогр...   Dec 12 2007, 08:45
|- - =GM=   Цитата(adc @ Dec 12 2007, 08:45) Странно,...   Dec 12 2007, 10:53
- - Aesthete Animus   Хм... Я тоже использую вывод отладочной информации...   Dec 14 2007, 08:28
- - _Pasha   Забыли упомянуть о еще одном извращенном туле: глу...   Dec 14 2007, 09:08
|- - =GM=   Цитата(_Pasha @ Dec 14 2007, 09:08) Забыл...   Dec 14 2007, 13:51
- - _Pasha   Цитата(=GM= @ Dec 14 2007, 16:51) Если я ...   Dec 14 2007, 15:04
|- - =GM=   Цитата(_Pasha @ Dec 14 2007, 15:04) Пошаг...   Dec 14 2007, 20:32
|- - _Pasha   Цитата(=GM= @ Dec 14 2007, 23:32) А что в...   Dec 15 2007, 09:12
- - SergeyYA   Я отлаживаю так проги 1 в разных функциях с помощь...   Dec 16 2007, 09:32


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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 21:42
Рейтинг@Mail.ru


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