
Se vi è già capitato di utilizzare Atmel Studio per sviluppare software sulla famiglia di microcontrollori AT(X)mega e conoscete i vantaggi che derivano dall'utilizzo di un debugger, avrete sicuramente sentito la mancanza di questi strumenti utilizzando l'IDE Arduino per la piattaforma Arduino Due. Vediamo in questo articolo come porre rimedio a questa lacuna.
Nonostante sia bello ottenere immediatamente dei risultati significativi con i numerosi sketch di esempio già disponibili per Arduino, quando si comincia a sviluppare un'applicazione completa su una board Arduino con processore ARM ci si deve inevitabilmente confrontare con i seguenti problemi:
- la compilazione del programma eseguita nell'ambiente Arduino richiede troppo tempo;
- il caricamento del programma eseguito dall'ambiente di sviluppo Arduino è troppo lento;
- non è disponibile un debugger hardware.
Per porre rimedio a questi inconvenienti, l'autore ha individuato un sistema alternativo che ora descriveremo.
Uno dei principali vantaggi derivanti dall'utilizzo di un microcontrollore a 32 bit è rappresentato da un accesso più rapido alle risorse hardware, soprattutto ai pin di I/O. Ne consegue che un buon sistema per testare le capacità di elaborazione di un microcontrollore è quello di scrivere un programma di esempio (uno sketch Arduino) che genera un'onda quadra con la minor ampiezza possibile, e misura l'ampiezza dell'impulso del segnale in uscita. Nel corso dell'articolo descriveremo come scrivere un simile sketch di test, utilizzando l'ambiente di sviluppo Atmel Studio 6.2 [1].
Compatibilità con Arduino
La procedura qui descritta assume che abbiate installato il sistema di sviluppo Atmel Studio 6.2 (o una versione successiva) per Windows. Per rendere l'ambiente di sviluppo compatibile con Arduino, occorre inoltre installare l'add-in Visual Micro [2], che è in sostanza un IDE Arduino per Microsoft Visual Studio e per Atmel Studio. Visual Micro è direttamente disponibile in Atmel Studio dopo la sua installazione.
Il debugger USB per Arduino disponibile all'indirizzo [2] non è liberamente scaricabile, ma non è tuttavia necessario in quanto il debugging attraverso l'ICE Atmel è sicuramente più conveniente. Quest'ultimo strumento è disponibile presso numerosi rivenditori on-line a prezzi che si aggirano intorno ai 100 dollari (si veda la presentazione apparsa nel numero Elektor di ottobre 2014 [3]). Vale sicuramente la pena affrontare questo investimento se si utilizzano i microcontrollori Atmel in modo non occasionale.
Grazie a questo debugger è possibile impostare dei veri breakpoint senza dover ricompilare il programma, osservare le variabili nella finestra 'Watch', ed esaminare o modificare il contenuto della memoria. Inoltre, è anche possibile ispezionare i numerosi registri di I/O, e modificarne il contenuto tramite un semplice click del mouse.
Dopo aver installato Visual Micro, all'interno di Atmel Studio sarà disponibile una nuova toolbar. Con essa sarà possibile selezionare la versione corrente di Arduino (1.5.x), il tipo di scheda (Arduino Due), e l'interfaccia per la programmazione (porta di programmazione), come indicato in Figura 1. [...]
ATTENZIONE: quello che hai appena letto è solo un estratto, l'Articolo Tecnico completo è composto da ben 2640 parole ed è riservato agli ABBONATI. Con l'Abbonamento avrai anche accesso a tutti gli altri Articoli Tecnici che potrai leggere in formato PDF per un anno. ABBONATI ORA, è semplice e sicuro.

L’articolo è MOLTO interessante, però presenta alcuni problemi per una sua piena usufruibilità.
Tutte le immagine, a meno che non sia una scelta per motivi di “privacy”, si presentano poco leggibili ed inoltre i link ad Atmel Studio 6.2 punta ad una pagina non valida
http://www.atmel.com/microsite/atmel_studio6 .
Ancora complimenti per un articolo che tratta di un argomento di cui si trova poco su Arduino.
L’articolo è il frutto di una collaborazione tra Elettronica Open Source ed Elektor Electronics. Purtroppo la qualità di alcuni schemi non è alta, questo per motivi di importazione dalla rivista verso il blog. Comunque nel complesso l’articolo è ben comprensibile e ritengo sia un valido aiuto a chi vuole sviluppare software per Arduino utilizzando Atmel Studio. Ma anche soltanto per iniziare a capire le potenzialità di Atmel Studio.
Alla data di pubblicazione dell’articolo, su Elektor in lingua inglese, la versione era appunto la 6.2
Questo il link alla versione corrente:
http://www.atmel.com/tools/STUDIOARCHIVE.aspx
Aggiungo che sino a un paio di mesi fa la versione 7.0 di Atmel Studio era disponibile solo in versione Beta, quindi una versione non ancora stabile e non adatta per essere trattata in un articolo.
C’è un motivo particolare per cui non hai usato il più recente ‘Atmel Studio 7 che fra le novità ha la possibilità di importare direttamente gli sketch Arduino?
L’opzione dell’Atmel studio 7 per implementare gli sketch di Arduino mi sembra una buona cosa nello sviluppo di progetti, comunque ci sono molti progettisti che utilizzano ancora le versioni precedenti e questo articolo risolve molti problemi.
Emanuele ha risposto alla tua domanda sul perchè della versione 6.2.
Per quanto riguarda l’importazione diretta degli sketch Arduino, disponibile solo a partire dalla versione 7, si tratta sicuramente di un valore aggiunto, anche se stravolge in parte la filosofia di sviluppo di Arduino (viene creata una solution con file sorgenti C++ al posto del tradizionale sketch Arduino).
Vista l’entità e l’importanza di quest’ultimo punto, lo stesso meriterebbe di essere trattato a parte in un articolo dedicato.
Ho installato Atmel studio 7 e Add-in per arduino ma non riesco ad accedere al menù “configure ide location” potete aiutarmi
Dopo aver installato Atmel Studio 7, occorre procedere con l’installazione del plugin Visual Micro per Arduino. Sino alla versione 6.2 di AS (quella utilizzata per l’articolo), il plugin poteva essere scaricato e attivato direttamente dall’ambiente AS. Con la versione 7 ciò non è possibile (come indicato esplicitamente quando si cerca di fare l’operazione), per cui occorre scaricare il plugin direttamente dal sito Visual Micro (http://www.visualmicro.com/page/Arduino-Visual-Studio-Downloads.aspx), scegliendo la versione per AS 7 (ahimè, è in versione Beta, altro motivo che avvalora l’utilizzo della vecchia versione 6.2). Il file scaricato avrà estensione VSIX ed è in pratica un’estensione per Visual Studio (AS 7 è basato su Visual Studio 2015). Quindi occorre come prerequisito che sia stato installato Visual Studio 2012 o superiore (si può ad esempio installare la versione Community di Visual Studio 2015, che è free). A questo punto basterà fare doppio click sul file con estensione VSIX e installare l’estensione per Arduino. Rilanciando poi AS 7 ti comparirà un pop-up (“Configure IDE Locations”) in cui dovrai specificare il path di installazione dell’IDE Arduino e la sua versione. Se hai già installato l’IDE Arduino, dovrebbe essere riconosciuto automaticamente e ti basterà premere OK per proseguire. In caso contrario, hai a disposizione nel pop-up il tasto Download/Install IDE con cui scaricare Arduino (se non erro AS 7 richiede almeno la versione 1.6 di Arduino, ma se usi l’ultima non sbagli ovviamente).
Una volta chiuso il pop-up avrai finalmente a disposizione la toolbar di Visual Micro.
A questo punto mi fermerei sull’analisi dei problemi/issue relativi all’installazione di AS7 e uso con Arduino. Come ho già espresso in un altro commento, se la cosa interessa, vale forse la pena dedicare un articolo di follow-up rispetto al presente che è nato invece per la versione 6.2.
Seguirò i tuoi consigli grazie e buon anno
Grazie mille per gli Auguri di Buon Anno che ricambio con piacere. Facci sapere come è andata.
Saluti
Per AS7 serve sicuramente un articolo dedicato, le differenze sono grandi. La piu importante ad esempio è che l’importazione di sketch arduino tramite la funzione ufficiale di AS7 è di sola andata. Il listato non è direttamente riutilizzabile nell ide arduino, mentre con visualmicro puoi sempre usare lo sketch in entrambi gli ide.
Altro problema è che importando sketch in AS7 ci sono problemi nell importazione delle librerie, che ad ora non mi risulta funzionante in automatico.
Si potrebbe allora piantificare un prossimo articolo per venire incontro a queste esigenze.
Mi sembra un’ottima cosa!
Si e sarebbe interessante anche l’aspetto debug hw, tra i vantaggi c’è l’uso diretto anche su sketch arduino, senza il fastidio di aprire il file compilato a parte
Buongiorno a tutti ,
ho installato recentemente Atmel studio 7 e successivamente tramite l’opzione di installazione applicazioni presente nell’ambiente Atmel studio 7 , ho installato Visual_Micro_for_Atmel_studio_7 e dalle prime prove che ho fatto mi sembra che funzioni benissimo .
Mi pare di aver capito che e’ in prova per 90 giorni e poi e’ a pagamento , potreste dirmi se e’ esatto e che successivamente si paga ogni anno una quota ? Pero’ non e’ specificata.
L’ultima domanda e’ : ho visto facendo il Debug di un programma che nella cartella relativa che crea sotto Documenti\Atmel studio\7.0\”nome_progetto”\Debug. mi crea diverse cartelle di file generati .HEX
Che differenza c’e’ tra i file : “.ino.hex” , “.ino.standard.hex” e “.hex” ?
Penso che io debba fare riferimento al file ” nome_progetto .hex ” per la programmazione diretta sul micro tramite programmatore esterno , potete confermarmelo ?
Grazie molte e cordiali saluti
Maurizio
Ciao Maurizio,
terminato il periodo di prova, occorre acquistare una licenza. I costi li trovi a questo indirizzo: https://www.visualmicro.com/page/shop.aspx
Questo strumento è a pagamento perché non è sviluppato direttamente da Atmel, ma da terze parti (l’azienda inglese Visual Micro Limited).
Per quanto riguarda i file hex prodotti dalla compilazione, ti consiglio di abilitare i log durante la compilazione in Arduino IDE (spuntare la voce File->Preferences->Show verbose output during -> Compilation). Al termine della compilazione dovresti vedere il nome dei file hex e del file elf (utilizzato per ricavare le informazioni di debug) a cui fare riferimento. Gli altri file hex potrebbero essere creati per compatibilità con precedenti versioni dell’IDE, anche se non più necessari con la versione più recente dell’ambiente di sviluppo.
Chiedo scusa , mi e’ successa oggi una cosa incredibile e spero che qualcuno possa darmi un’indicazione:
dopo un paio di programmi sviluppati con Visual_micro in Atmel Studio 7 che hanno funzionato bene , ho ricopiato (come gia’ fatto) un terzo programma dall’IDE Arduino e ho generato un nuovo progetto in Visual_Micro.
Ho effettuato il Debug e ho prelevato i file generati nella cartella di Atmel Studio , in particolare il file “.Hex” , per poi caricarlo nella cpu con il programmatore MKR2.
Ebbene non c’e’ verso di far funzionare il programma , se invece lo stesso lo carico dall’IDE Arduino oppure genero il file .Hex da IDE Arduino e lo carico con MKR2 funziona tutto benissimo.
A questo punto non so se conviene acquistare questo programma , anche se e’ molto comodo come Debug ,e’ possibile segnalare la cosa alla casa produttrice ?
Grazie se potete darmi un’indicazione
Saluti a tutti
Buongiorno a tutti ,
vi segnalo in riguardo al commento sopra, che ho appena verificato la cosa facendo un confronto fra i file binari generati in IDE Arduino e quelli generati da Visual Micro :
i due file risultano differenti , le prime 4 linee sono uguali e poi iniziano a differire come codice generato ed il programma caricato dal file di Visual Micro non funziona.
Prova a dare una lettura a questo thread: https://www.visualmicro.com/forums/YaBB.pl?num=1529594395/2
Le cause delle differenze potrebbero essere molte; come descritto nel post. Doveesti fare le verifiche suggerite.
Ti ringrazio , sto facendo delle verifiche ma e’ difficile capire il motivo .
Ho caricato poco fa, per prova , dal debug di Visual_micro il file .HEX su una scheda che avevo sviluppato un anno fa con un LCD grafico e che sono circa 200k di programma e funziona tutto benissimo.
La stessa cosa che faccio per un altro controllo di 2 schede che comunicano tra loro via seriale
non funziona .
In pratica si attiva la comunicazione seriale appena alimentate le schede e non in base al comando della centralina master ed inoltre non funziona niente.
La sola differenza tra i programmi funzionanti e questo e’ la presenza della Serial.begin().
Buonasera Maurizio, poiché sta riscontrando dei problemi con l’utilizzo dello strumento Visual micro, le consiglio di postare il problema sul forum di Visual Micro stesso: https://www.visualmicro.com/forums/
Dovrà seguire le indicazioni indicate a quella pagina web (le chiederanno di vedere anche il codice, quindi se ha un esempio poco complesso che evidenzi il problema, meglio). Gli sviluppatori sicuramente le risponderanno in breve tempo.
Salve a tutti,
chiedo scusa per la cocciutaggine , ma finalmente sono riuscito a capire il problema e lo comunico affinche’ qualcuno non debba avere problematiche simili.
Prima di tutto il problema l’ho riscontrato solo nei programmi che utilizzano la comunicazione seriale e quindi ne ho scritto uno semplice di esempio per chi vuole provare a capire il motivo , Poi comunichero’ anche la cosa tramite il forum di Visual_Micro.
Il programma e’ elencato in fondo e spedisce 3 pacchetti di 3 serie di N° da 0 a 5 e poi ferma la comunicazione ( Si puo’ testare con il Serial_Monitor ).
In pratica se si fa il Debug in Visual Micro con entrambe le modalita’ : una che si riferisce a Start_Debuggin ( (F5) e l’altra che si riferisce a Start_Debuggin_and_Break (Alt+F5), il programma viene caricato nella scheda e vengono generati i file di Output .hex ecc. ma non funziona.
Alla fine dei pacchetti spediti tra l’altro in modo non corretto, continua a BlinKare il TX della scheda.
Se invece si carica il programma con la freccia Start_Without_Debuggin , funziona tutto come deve.
Qualcuno ha gia’ notato questo e perche’ e’ cosi’ ?
Grazie e saluti a tutti
Maurizio
PROGRAMMA DI TEST :
//*********************************************************************************************************************
int a;
int b;
int c;
void setup()
{
Serial.begin(9600);
}
void loop()
{
if (c<3)
{
for (a=0; a<6; ++a)
{
Serial.print(a);
}
++b;
if(b==3){
Serial.println("");
Serial.print("spedito pacchetto ");
Serial.println(c);
++c;
b=0;
}
}
delay(2000);
}
//******************************************************************************************