2013-04-29 20 views
5

Sto imparando a programmare il mio Arduino, ma ho uno sfondo piuttosto solido in C++, il che significa che sono rimasto molto deluso nel constatare che non potevo usare la libreria standard C++. Mi sono guardato intorno cercando di scoprire esattamente il perché, e finora l'unica spiegazione plausibile è che AVR-GCC non è compatibile con lo standard di linguaggio C++.Conformità standard C++ nell'AVR-GCC

Ora, so che molti compilatori hanno deviazioni minori dallo standard, ma sto pensando che ci deve essere qualcosa di veramente grande che separa AVR-GCC con GCC, Clang o uno qualsiasi degli altri compilatori che ho usato prima. Come alcune funzionalità massivamente importanti che mancano del tutto, o qualcosa del genere. Ci deve essere una buona ragione per cui non posso usare, ad esempio, std::vector. È semplicemente troppo utile lasciarlo senza motivo.

Quindi che cos'è? Qual è il buco gigante nel dialetto AVR-GCC che rende impossibile la libreria standard C++ su un Arduino? E sto chiedendo questo per più di una semplice curiosità, perché se ci sono buchi giganteschi nella lingua, allora ho bisogno di conoscerli prima di andare in errore in un comportamento indefinito che non mi aspettavo.

+0

Questo è il C++, con tutte le sue non conformità, incompatibilità e supporto generale scadente nel mondo embedded. Questo è molto sfortunato, lo so. Essere come 13 anni nel nuovo secolo, a volte sembra che siamo ancora negli anni '90. –

+0

Mi sembra che la maggior parte delle piattaforme C++ incorporate non vengano spedite con lo stdlib principalmente perché nessuno lo userebbe comunque in ogni caso – PlasmaHH

+1

@PlasmaHH: In parte, ma suona più come una scusa. –

risposta

-3

AVR-GCC è clearly the work of hobbyists. In sostanza, nessuno è disposto a raccogliere il duro lavoro di scrivere un'implementazione di una libreria standard. Scrivere una libreria standard non è un compito banale per le piattaforme desktop, e le funzionalità limitate di Arduino rendono solo più difficile.

+1

Puoi spiegare perché 'PROGMEM 'significa" hobbisti "? – angelatlarge

+1

@angelatlarge: i buoni compilatori non hanno bisogno di una parola chiave. Inoltre, le buone scritture del compilatore non finiranno con "non esiste una regola ferrea su dove dovrebbe andare PROGMEM". La sintassi di C e C++ può presentare alcune ambiguità, ma non a questa scala. La sintassi è ** non ** fuzzy. – MSalters

+3

Sono ancora confuso da questa affermazione: è qualcosa di simile alla prova "volatile" del cattivo design del compilatore? Che dire di 'register'? Dato che AVR è un processore con architettura di Harvard con pochissima RAM ma una capacità di memorizzare i dati nella ROM (con vari costi di prestazioni associati), non sono sicuro di vedere il tuo punto sulle regole rigide e veloci e sulla sintassi fuzzy. – angelatlarge