2016-06-01 18 views
9

Non chiedere informazioni su <string> ma sulla libreria standard nel suo complesso per l'utilizzo su microcontrollori.La libreria standard C++ è completamente supportata su Arduino?

Non possiedo ancora una scheda Arduino per eseguire il codice e, come dice il titolo, sono curioso di sapere se la libreria standard C++ è completamente supportata su Arduino e già parte dell'IDE di Arduino. Inutile dire che la Standard-Library è probabilmente la più efficiente, pienamente testata e minimamente risorsa (che è una frase un po 'ridondante, come ho già detto efficienza) codice C++ pubblicamente disponibile là fuori, e renderebbe la vita molto più semplice codificare per microcontrollori come Arduino.

Oppure, mi manca il punto di Arduino/microcontroller in qualche modo? Ciò, poiché le loro risorse sono così limitate, la maggior parte del codice deve essere completamente adattata a una funzione specifica e non generica o templatizzata?

Se la norma-libreria non è una parte di Arduino IDE, poi come includere librerie specifiche, come <algorithm> e <bitset> (Sono molto tentato di chiedere "perché non è incluso nel primo luogo?", Ma sembra troppo ampio.)

+2

Questo non sembra essere un duplicato. Non menziona affatto la libreria di stringhe di Arduino e ha un contesto e un ambito completamente diversi. – Vality

+0

@Angew Intendevo la libreria standard C++, al momento sono nel traffico e correggerò la mia domanda quando sarò in grado. – NonCreature0714

+0

"Arduino" è una specie di ampio. È come chiedere se la libreria standard è disponibile su un microcontrollore. Devi scoprire se un SDK è disponibile o se qualcuno ha portato la libreria standard per la tua piattaforma specifica. –

risposta

4

Arduino è molto diverso da altri progetti di sistema embedded. Per prima cosa, utilizza il proprio language basato su C/C++. Per un'altra cosa, hai a che fare con incredibili software specializzati in cui è improbabile che ti serva l'astrazione pesante di <string> o <bitset>. Contrasto con dire un kernel homebrew, in cui si ha a che fare con hardware di livello desktop e la libreria standard aiuta lo sviluppo. Inoltre, i kernel homebrew alla fine vogliono diventare "self-hosted", cioè possono portare GCC e libstdC++ nello userspace. Di nuovo, questo è qualcosa che non vedrai in un contesto di Arduino.

Ora, quando si parla dello libraries fornito con Arduino, è una storia completamente diversa. Questi sono scritti in C o C++ e potrebbero beneficiare di una libreria standard con porting, ma è improbabile che sia utile. Porting the STL non è un compito facile ed è very, very big. La maggior parte delle funzionalità è molto più necessaria del necessario: hai davvero bisogno di un <string> o <bitset> per leggere o scrivere byte su una porta? Quindi pensa al costo e alla complessità dal punto di vista dello sviluppatore: gli sviluppatori di Arduino intraprenderanno questo compito arduo (non progettato) per implementarlo, e supportarlo quando la maggior parte di essa sarà inutilizzata o strappata out (pensa agli allocatori personalizzati)

E un ultimo punto, ci sono una pletora di schede Arduino con diverse specifiche. La libreria standard è un'astrazione costruita su una libreria C esistente. A un certo punto, dovrete scendere e sporcare e scrivere effettivamente il codice per la libreria C e il runtime, rendendo la libreria standard intrinseca non importabile (pensate a libstdC++ - arm-none-eabi-newlib).

Ora, se non sei soddisfatto, puoi ancora trasferire un sottoinsieme dell'STL seguendo il loro tutorial scrivendo la tua libreria per Arduino.

+0

Ottima risposta, questo è quello che stavo cercando, grazie! – NonCreature0714

+0

Come commento aggiunto, anche i produttori di microcontroller spesso non forniscono l'implementazione della libreria standard C++. Se lo facessero, sarebbe facile da incorporare nell'ambiente di sviluppo di Arduino. Ad esempio: i microcontrollori Atmel sono utilizzati in molte schede Arduino e qui c'è un post di Atmel sulla mancanza di supporto per varie funzionalità C++, inclusa la libreria standard che utilizza l'infrastruttura di sviluppo di Atmel: http://www.atmel.com/webdoc /avrlibcreferencemanual/FAQ_1faq_cplusplus.html – statueuphemism

Problemi correlati