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

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 слов кода. Интересно бы пообсуждать данный метод и узнать заодно, кто-нибудь пользуется подобным способом отладки?
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
|
 |
Ответов
|
Dec 11 2007, 15:53
|
Гуру
     
Группа: Участник
Сообщений: 3 834
Регистрация: 14-06-06
Из: Moscow, Russia
Пользователь №: 18 047

|
Цитата(=GM= @ Dec 11 2007, 18:32)  Интересно бы пообсуждать данный метод и узнать заодно, кто-нибудь пользуется подобным способом отладки? Я, например, только таким способом и пользуюсь  Приведенный фрагмент компактен и симпатичен, но не обеспечивает сохранение регистров, да и UART UARTу рознь, так что предпочитаю все сохранить, пусть даже код существенно более раздутый получается, и воспользоваться "полноценной" программой передачи (которая используется и другими компонентами). Плюс к отладочной пропечатке по точкам практически всегда использую hex-пропечатку того, чего надо, на уровне байтов, регистров, а то и блока данных в формате hex/ascii. Приведенный пример с вызовом и параметрами в виде констант вслед за ним еще очень удобен при систематической загрузке регистров какой-нибудь периферии или собственных аккумуляторов или еще чего, не надо кучи ldi и lpm, результат компактнее и нагляднее (и пусть в меня не бросают камнями апологеты ЯВУ). А еще для отладки оказалось весьма удобным использовать бутер, который принимает через UART непосредственно .hex, и перепрограммирует программную память прямо в терминале, по простому копированию. Но тут надо использовать либо xon/xoff, либо (что особенно удобно в случае USB/COM) аппаратное управление потоком. 921600 и "со свистом"... Заодно упрощается жизнь на ноутбуках, где кроме USB и нет ничего. Один раз бутер хоть чем зашить и все... Но, понятное дело, это для более-менее "объемистых" камешков, хоть восьмая мега нужна...
|
|
|
|
|
Dec 11 2007, 16:36
|

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

|
Цитата(rx3apf @ Dec 11 2007, 15:53)  Приведенный фрагмент компактен и симпатичен, но не обеспечивает сохранение регистров, да и UART UARTу рознь, так что предпочитаю все сохранить, пусть даже код существенно более раздутый получается, и воспользоваться "полноценной" программой передачи (которая используется и другими компонентами) Код можете показать? Интересует как вы сохраняете регистры, и где. Что касается "полноценной" программы передачи, то тут вопрос, к примеру, вот вы начинающий и как раз хотите освоить приём-передачу "полноценной" программы с кольцевыми буферами и т.п. Что-то не срастается, глаз замылился, вы не видите очевидных вещей...значит, самое время воспользоваться более-менее автономным механизмом отладки. Цитата(rx3apf @ Dec 11 2007, 15:53)  Плюс к отладочной пропечатке по точкам практически всегда использую hex-пропечатку того, чего надо, на уровне байтов, регистров, а то и блока данных в формате hex/ascii Тут как-то не врубился, что это - hex-пропечатка? Цитата(rx3apf @ Dec 11 2007, 15:53)  Приведенный пример с вызовом и параметрами в виде констант вслед за ним еще очень удобен при систематической загрузке регистров какой-нибудь периферии или собственных аккумуляторов или еще чего, не надо кучи ldi и lpm, результат компактнее и нагляднее (и пусть в меня не бросают камнями апологеты ЯВУ) Это должен был бы быть мой следующий пост(:-(. Похоже, не один я такой прыткий...Покажите кусочек кода, если можно. Цитата(rx3apf @ Dec 11 2007, 15:53)  А еще для отладки оказалось весьма удобным использовать бутер, который принимает через UART непосредственно .hex, и перепрограммирует программную память прямо в терминале, по простому копированию. Но тут надо использовать либо xon/xoff, либо (что особенно удобно в случае USB/COM) аппаратное управление потоком. 921600 и "со свистом"... А смысл 921600, если пишется 5 мс? Насчёт загрузчика я пока думаю, не решил до конца вопрос. Заманчиво использовать тот-же усап, в принципе, можно всю рам задействовать, но вот что делать, если программа больше объёма рамы?
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
Сообщений в этой теме
=GM= Простой и прозрачный способ отладки программ Dec 11 2007, 15:32  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 zhevak Странные вы какие-то...
Отладка отладке -- рознь.... Dec 11 2007, 20:12 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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|