Impara C e ottieni una scheda di sviluppo per microcontrollori economica, come un MSP430 o ARM Cortex, e almeno scrivi e carica alcuni programmi C.
Ho una laurea in informatica e un background di sviluppo software, principalmente programmazione C ++ per giochi e ora giochi e app iOS, ma il mio ultimo lavoro è stato un concerto EE semi-pro che è iniziato con un sacco di programmazione firmware per un sistema ARM Cortex M3 , e poi ho finito per imparare come fare un po 'di progettazione di circuiti e layout di scheda e progettare un paio di semplici schede. Quindi, fondamentalmente, ho dovuto affrontare il problema dell'utilizzo del miglior linguaggio di programmazione per colmare la progettazione hardware / software come qualcuno che era responsabile di entrambe le estremità.
C è assolutamente la lingua che devi conoscere. È facile per le persone che programmano in C ++ e in realtà non devono mai limitarsi al set di funzionalità di C per dire "è la stessa cosa" ma non lo è. Soprattutto il modo in cui C ++ ha evoluto e raccolto le funzionalità, e il modo in cui i programmatori C ++ mainstream utilizzano queste funzionalità, è davvero una cosa molto diversa lavorare su un'applicazione C abbastanza grande rispetto a un'applicazione C ++. L'SDK del firmware sarà un gruppo di librerie C, qualsiasi altra cosa che si adatterà su una MCU sarà una libreria C, qualsiasi sistema operativo che abbia senso su una MCU sarà scritto in C, ecc. Ecc.
Detto questo, poiché molte delle toolchain MCU là fuori finiscono per usare GCC come loro compilatore, quasi sicuramente avrai un compilatore C ++ disponibile se stai usando una famiglia MCU decente. Ma devi stare molto attento alle funzionalità che usi, in particolare le cose dalla libreria standard, poiché è molto facile finire con un binario che è troppo grande per adattarsi al tuo dispositivo. Penso che ci sia un buon caso da fare per usare C ++ su dispositivi embedded, C ++ ha alcune belle caratteristiche che hanno rifiuti o nessuna penalità di dimensioni o velocità, devi solo sapere cosa stai facendo e scrivere il codice che è il modo più avanti sull'estremità dello spettro di tipo C rispetto all'estremità STL dello spettro in termini di uso intelligente delle funzionalità.
Non prestare troppa attenzione alle persone che dicono che puoi usare Lua o Python su un MCU con l'interprete integrato giusto blah, blah. È vero, l'ho fatto ed è divertente, ma al momento è più per progetti di giocattoli e cose che appaiono su Hack a Day. Penso che vedremo più cose del genere poiché la Legge di Moore viene applicata incessantemente anche ai più piccoli processori, questo è qualcosa che è successo con i giochi in cui c'era un sacco di assemblaggio, quindi hanno resistito più a lungo con C e C ++ rispetto a tutti gli altri, e ora tutto è così veloce, e la produttività degli sviluppatori è così importante che molto sviluppo è fatto con linguaggi di livello superiore incorporati o in un linguaggio di alto livello. Anche così, ci vorranno alcuni anni prima che tu veda le aziende assumere programmatori di firmware con sfondi Python e Lua.
Non dedicare troppo tempo all'assemblaggio. Non è male avere familiarità con i concetti, ma è improbabile che ti ritrovi a fare molto, se qualsiasi programmazione di assemblaggio. C'è come questa saggezza convenzionale con i giochi e l'incorporamento che è un assemblaggio "buono a sapersi", spesso ripetuto da persone che in realtà non lavorano in quei campi. Ma in realtà è molto improbabile che tu scriva qualsiasi assembly, mai, e se lo fai probabilmente saranno solo poche righe per l'ottimizzazione o qualcosa con l'hardware per cui non hai un'API (ma lo farai dopo aver scritto uno che avvolge alcune righe di assemblaggio). Ho lavorato su diversi giochi e quel progetto di progettazione di schede / firmware e il numero totale di linee di assemblaggio che ho scritto per progetti commerciali è probabilmente negli anni bassi. E'