In realtà avr-gcc è nascosto anche in Arduino ... devi solo usare la sintassi C ++ se stai usando le loro librerie o scrivendo la tua. Altrimenti, l'unico vincolo è che sei 'costretto' a usare il modello equivalente a:
int main (int argc, char * argv []) {setup (); for (;;) {loop (); } return 0;}
che è un modello che si adatta a una grande sezione trasversale (probabilmente la totalità) del design incorporato. Devi solo implementare setup () e loop ().
Inoltre non è una scelta tra Arduino e un microcontrollore. In linea di principio, potresti estrarre l'ATMega328P da un contesto di scheda Arduino, programmato con uno schizzo e trapiantarlo in una soluzione più strettamente integrata.
Quindi credo di non essere d'accordo con il sentimento di alcune delle altre risposte qui che suggeriscono che Arduino è solo una piattaforma "giocattolo". Secondo me è fattibile per uno sviluppo più "serio". Abbassa solo la barriera all'ingresso nel mondo embedded. La possibilità di programmarlo senza un programmatore separato (ad esempio AVRISP mkII, STK500, ecc.) È una specie di grosso problema a questo proposito.
Non credo davvero che richieda un compromesso significativo da parte degli utenti più avanzati.