Debug per Arduino

Secondo voi è possibile realizzare un debug tipo questo per Arduino?

Ma AVR Studio non lo fa il debug del codice?

leo72: Ma AVR Studio non lo fa il debug del codice?

Si ed è possibile farlo anche col codice, quello vero in C, generato da Arduino però tocca "smanettare" un attimo col make per fargli generare tutti i necessari file.

astrobeed:

leo72: Ma AVR Studio non lo fa il debug del codice?

Si ed è possibile farlo anche col codice, quello vero in C, generato da Arduino però tocca "smanettare" un attimo col make per fargli generare tutti i necessari file.

Che intendi per "un attimo"? E' una cosa realizzabile senza grandissimo impegno o la questione è "seria" e non vale la pena?

Ho fatto una prova al volo perché quello che mi ricordavo era relativo ad una vecchia release dell'IDE che non generava automaticamente il file .elf necessario per il debug, la 022 lo genera in automatico. La procedura è semplice, compilare, non caricare, in modo verbose per vedere dove vanno a finire i vari file, aprire AVR Studio 4, sconsiglio il 5, e caricare con OPEN il file .elf del nostro programma, ha lo stesso nome, rispondere alle varie richieste di AVR Studio, vi chiede dove aprire un nuovo progetto e dove prendere i file originali del vostro programma, a questo punto aprire tutti i vari file .c e .h del progetto, ci troverete tutti quelli che vengono linkati durante la compilazione, librerie incluse, e avviare il debug con breakpoint o a step manuali con F11 e F10. Si lo so detto così è un gran casino :grin: Più tardi vedo di fare degli screen capture di tutti i passi in modo da rendere più semplice la cosa, intanto scaricare AVR Studio 4 (è free), i relativi service pack, siamo alla 3, la sua toolchain (il compilatore C e le librerie) oppure Winavr (è quello usato da Arduino) e installarli altrimenti niente debug :) Ovviamente il debug software con emulatore non può comprendere gli eventi esterni, qualcosa è possibile fare, ma in modo molto limitato. Per i fortunati possessori di AVR Dragon, AVRICE o tool similare, è possibile fare il debug hardware del programma, cioè vedere quello che succede realmente sul micro quando gira lo sketch, il che include anche la risposta agli eventi esterni.

Ovviamente sto rispondendo ad una richiesta, dovrebbe funzionare in questo modo: In pratica si crea una libreria di istruzioni debug Nello sketch si inseriscono delle variabili (tipo check point) che vengono compilate assieme allo sketch ed inviate al micro Durante l'esecuzione sul micro queste variabili comunicano col PC evidenziando la riga dello sketch in esecuzione in quel momento Almeno così sembra funzionare il link che vi ho passato. E' quello che stai dicendo tu o è una cosa completamente diversa?

menniti: E' quello che stai dicendo tu o è una cosa completamente diversa?

Tocca aprire una parentesi, tonda, quadra e pure graffa, quando si parla di debug tocca specificare se è software o hardware, nel primo caso avviene tramite un simulatore che fa girare il programma in modo continuo, oppure passo a passo, fermandolo in punti predeterminati tramite dei breakpoint in modo da poter analizzare il contenuto dei vari registri del micro e delle variabili. Solitamente in fase di debug si inseriscono variabili "speciali" per controllare stati intermedi o condizioni che vogliamo verificare, esistono anche i breakpoint condizionali, ovvero l'esecuzione del programma viene interrotta in un determinato punto solo se è vera una certa condizione. Nel caso del debug hardware, che è quello che permette un maggiore controllo della situazione, sono necessari tutta una serie di prerequisiti hardware, come minimo è indispensabile il supporto del ICD/OCD (In Circuit Debug/On Chip Debug) da parte del micro in esame e serve l'apposita interfaccia ICD per collegare il micro al PC, spesso l'ICD comprende anche un programmatore e costicchia abbastanza. In mancanza del supporto ICD da parte del micro, non è detto che ci sia, serve un oggetto molto costoso che si chiama ICE (Integrated Circuit Emulator) che permette di emulare fisicamente tutti i pin del micro e il suo core, si connette al posto del micro e ne fa le veci. Ultimamente si sono sviluppati degli ICD parzialmente ICE, anche in questo caso serve il supporto specifico da parte del micro, che permettono di unire i vantaggi dei due sistemi con costi contenuti, p.e. il Real Ice di Microchip che con un costo minore di 500 Euro permette il debug hardware real time dei micro di classe superiore come i dsPIC33 e, sopratutto, i PIC32. Parlando di Arduino non è proponibile il debug hardware tramite ICD/OCD, il 328 lo permette, perché quasi nessuno dei suoi utenti possiede l'hardware minimo per farlo, cioè un AVR Dragon, pertanto è possibile solo il debug tramite emulazione software.

Quindi, in pratica, è possibile eseguire lo sketch in forma simulata, SOLO sul PC, e non mentre gira direttamente sul micro?

Quindi, in pratica, è possibile eseguire lo sketch in forma simulata, SOLO sul PC, e non mentre gira direttamente sul micro?

Si a me pare di aver capito così. Astrobeed forse a dimenticato di citare il Debug Jtag, ma in realtà cosa sono questi nomi? si riferiscono anche ad un determinato proocollo? Sono noti questi protocolli, li possiamo implementare?

Io le idee abbastanza confuse sul debug hardware, es con AVRISP mkii e Arduino 2009 posso fare debug hardware ma senza AVR Studio?

Ciao.

MauroTec: ma in realtà cosa sono questi nomi? si riferiscono anche ad un determinato proocollo? Sono noti questi protocolli, li possiamo implementare?

Sono protocolli che stabiliscono regole hardware, per la connessione e per i segnali, sia software per come dialogare con l'hardware, per quanto riguarda Microchip è tutto di dominio pubblico, è possibile implementare un proprio ICD/OCD ammesso di avere qualche mese da dedicare alla cosa, non è semplice da fare. Per quanto riguarda Atmel non ho mai cercato le relative informazioni, ma immagino che pure nel loro caso siano disponibili visto che esistono vari device di terze parti, ma anche suite di programmazione non Atmel, che permettono la cosa. Gli AVR hanno varie modalità di debug hardware, dipende dal micro e tocca consultare i vari data sheet per sapere quali sono disponibili, stessa cosa vale anche per i device che permettono l'interfaccia tra micro e pc, non tutti supportano tutte le modalità possibili, quello più economico, circa 50 Euro + iva, che supporta praticamente quasi tutte le modalità è il già citato AVR Dragon, poi si passa al AVR JTAGICE MKII che costa oltre 300 Euro e via salendo di livello.

Bene, per quanto mi riguarda, argomento chiuso. Grazie a tutti per l'interessamento e le risposte. :)

Ho usato il Code Studio diversi anni fa. Quando compila il codice aggiunge del codice extra che manda sulla porta seriale tutta una serie di info che ti permettono di vedere il codice che viene eseguito e di vedere le variabili etc.

Il metodo per fare debugging di Arduino è usare il protocollo DebugWire che utilizza il pin di reset per stabilire una comunicazione bidirezionale col processore. Il prodotto più economico al momento è l'AVR Dragon. Devi inoltre compilare il codice di arduino con il debug abilitato.

Quando sono stato in norvegia alla Atmel ho chiesto che aprissero il protocollo in modo che si potesse costruire un debugger open source ma mi hanno detto che non si può. però mi hanno promesso di darmi una soluzione "single chip" per fare un debugger molto a basso costo.

Ora che mi fai ricordare rompo le scatole per farmelo dare..

m

[quote author=Massimo Banzi link=topic=75259.msg568417#msg568417 date=1318547071] Ora che mi fai ricordare rompo le scatole per farmelo dare.. [/quote] Bravo XD

PS: anche tu sempre a fare le ore piccole, eh? ;)

Sono le 16.15 qui a san francisco :slight_smile:

m

comunque il debug dall'harware è limitato dalla velocità di comunicazione, una simulazione via PC è più realistica se il micro è simulato bene. per gli input esterni si potrebbe usare un file di testo che simula gli ingressi, o magari degli script utente... ma non credo esista qualcosa di così "sopraffino", la cosa ideale sarebbe da simulare a livello di transistor l'atmega, ma bisognerebbe avere gli schemi

Quando sono stato in norvegia alla Atmel ho chiesto che aprissero il protocollo in modo che si potesse costruire un debugger open source ma mi hanno detto che non si può. però mi hanno promesso di darmi una soluzione "single chip" per fare un debugger molto a basso costo.

Ciao Massimo, questo vuole dire un chip con codice proprietario per fare debug OneWire, giusto? Non potrebbe essere altrimenti, perchè se nò leggendo il codice è possibile risalire al protocollo usate per la comunicazione.

Nota dal datasheet: Se si abilita il fuse DWEN per abilitare il debug sul pin reset, il micro consumerà di più rispetto al DWEN diabilitato, quindi terminato il debug conviene impostare il fuse DWEN ad 1.

Ciao.

lesto: comunque il debug dall'harware è limitato dalla velocità di comunicazione, una simulazione via PC è più realistica se il micro è simulato bene.

Occorre vedere di che debug parliamo, normalmente c'è sempre da impostare dei breakpoint dove l'esecuzione del programma viene stoppata e solo in quel momento è possibile leggere i vari registri/variabili, il vantaggio del debug hardware è che si possono utilizzare i breakpoint hardware, in numero limitato, che sono molto più efficienti di quelli software, oltre al poter vedere cosa succede realmente in funzione di eventi esterni al micro, cosa molto difficile da fare con la simulazione software. Salendo di livello, e anche come hardware aggiuntivo necessario, si arriva fino al vero debug hardware real time, ovvero sul pc vedi cambiare i registri/variabili sotto controllo senza necessità di stoppare l'esecuzione del programma, però vale solo per i micro che supportano tale modalità e di solito sono di fascia alta, sto facendo un discorso generale e non limitato a solo Atmel.

per gli input esterni si potrebbe usare un file di testo che simula gli ingressi, o magari degli script utente... ma non credo esista qualcosa di così "sopraffino"

Esistono eccome, p.e. l'AVR Simulator 2 allegato ad AVR studio ha il "Port stimulo and logging" che permette di simulare varie condizione sui pin del micro, è un pochino limitato però è free. Non serve a nulla simulare l'ATmega a livello di transistor, devi solo simulare il suo comportamento logico, cosa che si fa facilmente in software, esistono diversi simulatori ben fatti, anche a basso costo, per gli AVR.

Sorry! One world, one place XD

[quote author=Massimo Banzi link=topic=75259.msg568417#msg568417 date=1318547071] Ho usato il Code Studio diversi anni fa. Quando compila il codice aggiunge del codice extra che manda sulla porta seriale tutta una serie di info che ti permettono di vedere il codice che viene eseguito e di vedere le variabili etc.

Il metodo per fare debugging di Arduino è usare il protocollo DebugWire che utilizza il pin di reset per stabilire una comunicazione bidirezionale col processore. Il prodotto più economico al momento è l'AVR Dragon. Devi inoltre compilare il codice di arduino con il debug abilitato.

Quando sono stato in norvegia alla Atmel ho chiesto che aprissero il protocollo in modo che si potesse costruire un debugger open source ma mi hanno detto che non si può. però mi hanno promesso di darmi una soluzione "single chip" per fare un debugger molto a basso costo.

Ora che mi fai ricordare rompo le scatole per farmelo dare..

m [/quote] Sarebbe una cosa ottima, ci facciamo subito un bell'Arduino Dragon (il nome vero poi lo scegli tu :D), naturalmente open source, mi candido per la parte hardware XD PS: intanto che arriva il chip ordino un Dragon e mi metto a studiare questa cosa, naturalmente conto sull'aiuto di Voi tutti :)

A quanto pare c'è qualcuno che si è divertito a fare reverse engineering su debugwire con discreto successo.