Ho da poco acquistato un arduino UNO visto il gran parlare in internet.
Io di mestiere faccio il firmwarista embedded quindi non parto da zero come conoscenze. Ma il dubio che avevo con arduino vedendo il IDE fornito, era se era possibile programmare in maniera totale il dispositivo. Mi dpiego pià nel dettaglio.
Con l'IDE fornito vedo alcune limitazioni, ad esempio non vedo il classico main(), e se non sbaglio non è possibile fare un progetto in C con più di 1 file (ad esempio 10 file .C e 10 file .h). Ho visto inoltre che spesso chiate sketch i programmi, come mai?
In genere nei software che sviluppo al lavoro tengo un interrupt temporizzato (comandato da un timer) in modo che ogni x millicondi partano alcuni task.
Ho guardato tutta la documentazione dell'IDE fornito, ma non ho trovato il controllo dei timer. è proevisto che si possano usare?
Il main è incluso nell'IDE, compilato a parte e aggiunto dal linker. Lo trovi nelle cartelle del core di Arduino con nome main.cpp
Esistono dei semplici S.O. real time (parola grossa) per gestire task su Arduino. Una versione semplificata è data dalla libreria LeOS si Leo72. (http://www.leonardomiliani.com/2012/leos-un-semplice-so-per-arduino/)
Studiando inoltre le libreria a corredo dell'IDE e il core di Arduino puoi vedere come effettuare programmazione a basso livello.
Gli AVR sono un pò diversi dai PIC, se hai conoscenza di quest'ultimi.
Per programmare a basso livello, forse è meglio anche abbandonare l'IDE di Arduino e rivolgersi a strumenti di sviluppo più particolari: su Windows, AVR Studio (http://www.atmel.com/microsite/atmel_studio6/), oppure su altre piattaforme Eclipse, ecc.
Viene chiamato "sketch" la parte del programma realizzando dall'utente che poi verrà completato dall'IDE, compilato, linkato e scritto, come firmware, sulla memoria flash del micro.
L'IDE di Arduino è pensato per utenti alle prime armi e nasconde tutta una serie di operazioni e concetti che però sono necessari per una programmazione più avanzata.
In realtà ho esperienza con Freescale e i PIC li ho usati solo all'università.
Ti ringrazio per il suggerimento su LeOS, ma per il momento a me basterebbe avere un interrupt ogni x millicondi. Su questo lavorerei io su un mio kernel di base. Questo è possiile farlo con l'ide di dafault? O occore qualcosa di più complesso?
Per la programmazione cosi a basso livello forse è meglio abbandonare l'IDe di Arduino, in quanto durante la compilazione si porta appresso tutta una serie di impostazioni, settaggi e funzioni che presumo possano essere inutili al tuo progetto.
Parti dal main.cpp del core e segui la parte relativa alla init(), vedrai subito se ti può essere utile o meno l'impostazione data dell'IDE.
Ok ti ringrazio.
Mi sa quindi che farò così. Parto da un progetto da zero e da li comincio a lavorare altrimenti ci sarebbero troppi "limiti".
Quando ne caverò qualcosa se interessa posso condividere il procedimento usato, se a qualcuno interessa... Mi sa che per lo sviluppo come mi hai suggerito userò l'ambiente ATMEL direttamente...