Programmare Arduino in C o C++ puro.

Ciao a tutti,
da qualche mese ho approciato il mondo Arduino,interessante senza dubbio,solo che ad un certo punto mi son chiesto
se fosse possibile evitare due cose,pur continuando a "giocare" con questa divertente scheda,in particolare:

  • è possibile programmare Arduino in puro C oppure in puro C++,quindi da un lato evitanto tutte le librerie e i metodi
    prettamente arduiniani (a partire da Serial,digitalWrite e via discorrendo) e dall'altro,oltre a far accesso direttamente ai
    registri del uControllore,cosa certamente possibile, utilizzare metodi standard del C o del C++(ad esempio per l'I/O preferirei usare printf o
    cout<<).

  • è possibile utilizzare altri IDE,ad esempio VisualStudio di Microsoft o AVR Studio di Atmel,come se stessi programmando un
    normalissimo uControllore Atmel?

Vi ringrazio anticipatamente per le vostre risposte,son sicuro che soddisferanno a pieno i miei dubbi!
Saluti Manu89.

Puoi programmare anche in assembly, se ne sei capace. L'IDE di Arduino è solo un modo semplificato per gestire il microcontrollore ma nulla vieta di lavorarci in C puro (gli Atmel con core AVR ad 8 bit non sono ottimizzati per il C++).
Puoi usare qualunque editor che ti aggrada, anche un semplice editor di testo. Poi salvi, compili da terminale e flashi con avrdude ed un programmatore qualsiasi, anche Arduino usato con lo sketch ArduinoISP o altro. Altrimenti su Windows puoi usare l'IDE ufficiale di Atmel.

Manu89:
è possibile programmare Arduino in puro C oppure in puro C++

Si

Manu89:
utilizzare metodi standard del C o del C++(ad esempio per l'I/O preferirei usare printf o cout<<)

Si

Manu89:
è possibile utilizzare altri IDE,ad esempio VisualStudio di Microsoft o AVR Studio di Atmel,come se stessi programmando un normalissimo uControllore Atmel?

Si

Grazie per le risposte,adesso che ho appurato che sia possibile andare oltre certi "limiti" indagherò
sulle metodologie realizzative.
Finalmente si inizia a programmare in forma canonica :smiley:
Saluti M4nu89

Puoi programmare Arduino senza l' uso delle sue librerie, ma il forte di Arduino é che non devi conoscere il Microcontroller a livello programmazione e hardware a memoria per sapere cosa come fare.
Per non usare l' ide di Arduino devi avere grosse conoscenze a livello programmazione e elettronica del Controller.
Ciao Uwe

Manu89:
Grazie per le risposte,adesso che ho appurato che sia possibile andare oltre certi "limiti" indagherò
sulle metodologie realizzative.
Finalmente si inizia a programmare in forma canonica :smiley:
Saluti M4nu89

Ciao, ho visto che finora nessuno ti ha consigliato eclipse come ide alternativo per programmare avr.

Se lo conosci non ho bisogno di decantarti le sue doti, se non lo conosci PROVALO!

Aggiungi però che devi perderci mezza giornata per settarlo per farlo funzionare, io ci ho perso un sacco di tempo e non sono giunto a nulla di buono. Hai una guida che "funziona" realmente? E poi, con Eclipse, flashi direttamente dall'IDE o devi ricorrere al terminale?

leo72:
Aggiungi però che devi perderci mezza giornata per settarlo per farlo funzionare, io ci ho perso un sacco di tempo e non sono giunto a nulla di buono. Hai una guida che "funziona" realmente? E poi, con Eclipse, flashi direttamente dall'IDE o devi ricorrere al terminale?

Ciao leo, guarda l'ho rifatto anche ieri sera sul pc di casa.
Installato eclipse, installato plugin , ad esagerare 2 minuti di settaggi da fare su eclipse e sei a posto.
Ad onor del vero però, mi sento di dirti che quando provai la prima volta la cosa era veramente molto complicata da fare.
Da quando invece ho trovato questo ultimo plugin di baeyens (http://eclipse.baeyens.it/) è veramente semplice.

Puoi fare tutto da eclipse, compili , carichi sulla scheda e hai anche il monitor seriale se ti serve.
Certo che una volta che passi a quello poi è tutto 'eclipse style' , se come me lo conosci bene (lo utilizzo per lavoro) vai una scheggia, hai un ottima visione dei progetti complessi e tutti gli strumenti di refactoring , codecompleting e codeformat che dall'ide di arduino te li sogni.
Certo che sono il primo a dirti che tutti queste potenzialità si apprezzano se si programma 'seriamente' .
Per fare lampeggiare 2 led premendo un bottone insomma tutto il per di più non serve.

Io mi trovo molto bene (windows) ma non posso garantirti che funzioni altrettanto bene su linux non avendolo potuto provare.
Se vuoi provarlo puoi seguire le istruzioni presenti nel sito che ho scritto sopra, la guida è leggermente diversa da quello che ti ritroverai a schermo perchè è fatta per una versione di plugin precedente, ma niente che intuitivamente non si possa risolvere (se poi serve una mano chiedi).

Ti consiglio la versione ecplise Indigo c++ developer incubation, poi quando vai ad installare il plugin di eclipse, installa la versione 1.2.4 dalla sezione 'Uncategorized', e una volta ultimato, fai tutti i settaggi indicati, una volta completato, prima di fare qualsiasi altra cosa cerca gli aggiornamenti, dovrebbe trovartene uno per il plugin stesso versione 1.2.5.5 .

Se vuoi provarlo veramente fammi sapere che ti fornisco gli screenshot di tutti i miei settaggi (in totale sono 2) perchè ho ottimizzato ulteriormente alcune cose, e ti fornisco le librerie di arduino che ho dovuto modificare (le ho dovute modificare perchè sono proprio sintatticamente ERRATE, funzionano solo compilando dall'ide di arduino perchè quando arduino compila sposta tutte le lib nella stessa radice)

1 Like

Un'ultima domanda. Nel caso di core aggiuntivi, come si comporta? Io programmo molto i Tiny, e questo è un punto essenziale.
Se vuoi mandarmi gli screenshot, spediscili pure a leonardo@leonardomiliani.com

Per quanto riguarda i core aggiuntivi non so ,non ho ancora provato, mentre a livello di schede puoi utilizzare tutte le stesse che hai disponibili nell'ide arduino .
Sostanzialmente il plugin legge le schede dalla configurazione dell'IDE arduino e ne prepara il progetto core qualora non già presente.
Non ho mai provato core diversi (anche se a breve dovrò provare per il 1284p) , ma in caso lo provassi ti faccio sapere.
Dopo pranzo ti mando gli screeenshot, adesso ho fame!

niki77:
Per quanto riguarda i core aggiuntivi non so ,non ho ancora provato, mentre a livello di schede puoi utilizzare tutte le stesse che hai disponibili nell'ide arduino .
Sostanzialmente il plugin legge le schede dalla configurazione dell'IDE arduino e ne prepara il progetto core qualora non già presente.
Non ho mai provato core diversi (anche se a breve dovrò provare per il 1284p) , ma in caso lo provassi ti faccio sapere.
Dopo pranzo ti mando gli screeenshot, adesso ho fame!

Ok, grazie.

niki77:
Non ho mai provato core diversi (anche se a breve dovrò provare per il 1284p) , ma in caso lo provassi ti faccio sapere.

Mi rimangio quello che ho detto, non posso aiutarti in quanto ho già fatto le prove per il 1284p, che sono terminate con esito positivo, ma purtroppo non si può parlare di core diverso in quanto nelle versioni arduino > 1.0 quel chip è già supportato....

PaoloP:

Manu89:
è possibile programmare Arduino in puro C oppure in puro C++

Si

Non in puro C++... qualcosina-ina del C++, ma non tutto...

Fonte: Frequently Asked Questions

niki77:

leo72:
Aggiungi però che devi perderci mezza giornata per settarlo per farlo funzionare, io ci ho perso un sacco di tempo e non sono giunto a nulla di buono. Hai una guida che "funziona" realmente? E poi, con Eclipse, flashi direttamente dall'IDE o devi ricorrere al terminale?

Se vuoi provarlo veramente fammi sapere che ti fornisco gli screenshot di tutti i miei settaggi (in totale sono 2) perchè ho ottimizzato ulteriormente alcune cose, e ti fornisco le librerie di arduino che ho dovuto modificare (le ho dovute modificare perchè sono proprio sintatticamente ERRATE, funzionano solo compilando dall'ide di arduino perchè quando arduino compila sposta tutte le lib nella stessa radice)

problema per cui ho proposto una modifica dell'ide giusto qualche settimana fa...

domanda, l'autocompletamento del codice funziona per le lib ufficiali? e per quelle fatte ad hoc? (uso eclipse sono con java, mai provato in C/C++)

Certo che funziona, ma non solo per le librerie ufficiali, ma anche per quelle non ufficiali, per le classi utente e per le funzioni....
Praticamente quando inizi a scrivere codice se premi ctrl+barra ti propone i candidati , ogni candidato ha la sua icona accanto che ti permette di vedere se è un metodo , una proprietà, una enumerazione, una costante una classe etc etc etc.
Una volta individuato il tipo, mettendo il punto ti mostra tutte le possibilità che hai per quel tipo alla stessa maniera.

Un altra cosa carina è che appoggiando il mouse sul metodo di una libreria, nel tooltip te lo espande , e anche per le costanti e per le macro ti fà vedere il valore e/o la macro

E' ciò che manca all'IDE di Arduino e di cui io sento la mancanza, avendo una memoria praticamente della durata di 5 minuti :stuck_out_tongue_closed_eyes:, non ricordo mai la sintassi di un comando o i metodi di una classe. Il fatto della distinzione fra maiuscole e minuscole mi complica ulteriormente le cose :sweat_smile:

lesto:
problema per cui ho proposto una modifica dell'ide giusto qualche settimana fa...
Recursive compilation by lestofante · Pull Request #116 · arduino/Arduino · GitHub

Io ho preferito modificarmi le librerie per conto mio, tanto l'ide di arduino non lo uso più.

Dai allora butta sù sto eclipse!!!

Così passi da fare l' Indignados per le scarse potenzialità dell'ide di arduino all'Indigatos eclipse!

leo72:
Il fatto della distinzione fra maiuscole e minuscole mi complica ulteriormente le cose :sweat_smile:

Strano. Proprio tu che usi Linux che, a differenza di Windows, è Case-Sensitive. :astonished:

Anche io uso eclipse sopratutto per programmare android e java devo dire che è fantastico ha un supporto di plugin eccezionale! inoltre è possibile lavorare con repository remoti(lo dico in quanto si poneva il problema dei backup poco fà) :grin:

egit + eclipse, e passa la paura :grin:

@niki77: in java se fai un errore di compilazione, c'è un c'è trace di tutte le funzioni chiamate "a cipolla" a partire dal main fino alla riga incriminata, e per ogni chiamata c'è il link diretto alla riga di codice.

Ora immagino che la versione c/c++ punti alla riga di errore, ma è presente questa funzionalità? comunque stasera provo, e da un pò che aspetto un buon plugin per eclipse :slight_smile: