Salve a tutti,
è il mio primo post in questo forum, mi presento mi chiamo Biagio Ianero e ho 17 anni.
Scrivo questo post per tutti gli utenti Macintosh che hanno acquistato arduino, ma vogliono programmarlo senza usare le librerie super-semplificate già fornite e senza acquistare programmatori hardware esterni.
Essendo su mac non ho potuto nemmeno usufruire dell'IDE di sviluppo AVR Studio, e ho dovuto girare un po' qua e là per mettere insieme vari programmi a linea di comando per programmare il nostro ATMega in assembly o C.
I programmi a linea di comando necessari sono: avr-as (assembler), avr-gcc (compilatore C), avr-ld (linker), avr-objcopy (da .elf a .hex, formato compatibile con tutti i programmatori) e avrdude (per trasferire l'hex sul chip).
Fortunatamente troviamo tutto "impacchettato" qui:
Dopo aver scritto il vostro programma in assembly o C, potete seguire i seguenti passi per portarlo sull'ATMega senza passare dall'IDE Arduino:
Compilazione (esempio in assebly, per il C basta cambiare avr-as con avr-gcc)
$ avr-as -mmcu=atmega328p -o helloworld.o helloworld.S
Linking
$ avr-ld -o helloworld.elf helloworld.o
Da elf a hex Intel (formato compatibile con tutti i programmatori)
$ avr-objcopy --output-target=ihex helloworld.elf helloworld.hex
Sono sicuro che a qualcuno tornerà utile, anche perchè è una procedura standard che lavora su tutte le piattaforme, eventualmente per programmi più complessi c'è "make" che dovrebbe compilare anche sotto MAC.
per programmare il ATmega in assembler devi avere una discreta conoscenza di programmazione in assembler e dell'architettura del ATmega. Dubito che fino a questo punto siano arrivati tanti che girano su questo Forum. Io non so farlo.
Perché non usare il IDE Arduino per compilare e uploadare il programma? Se non Ti piace l' editore del IDE usa un altro.
Ho specificato:
"Scrivo questo post per tutti gli utenti Macintosh che hanno acquistato arduino, ma vogliono programmarlo senza usare le librerie super-semplificate già fornite"
@matteodellinoci: essendo il tuo primo post, ti chiederei di presentartiQUI (spiegando bene quali conoscenze hai di elettronica e di programmazione) e di leggere con attenzione il REGOLAMENTO ... Grazie.
Ah ... per rispondere alla tua domanda ... QUI e QUI
tutto il framework Arduino si può bypassare, ad esempio cancellate le due funzioni loop() e setup() e scrivere
int main()
{
while(1);
}
e così avrete il main pulito con i suoi pregi e difetti, ad esempio nessun interrupt inizializzato e quindi no delay,millis et simila.
Sapere modificare il comportamento del framework è un buon inizio, per programmare in C non basta conoscere il linguaggio, che si racchiude in circa 200/300 pagine, bisogna avere altre conoscenze, bisogna studiare parecchio.
Tramite l'ide Arduino non si può programmare in Assembly perché viene richiamato GCC e poi g++ dunque possiamo usare l'inline, ma meglio non abusarne ed usarlo solo in casi strettamente necessari.
Forse si crede che in tale linguaggio il chip corra più veloce, ma per superare le ottimizzazioni del compilatore bisogna avere tanta,tanta,tanta esperienza.
Volete fare di più? aprite la directory che contiene il core Arduino e iniziate ad aggiungere , modificare il codice.Ricordatevi che li siete in C non in C++.