Lär dig C, och få ett billigt mikrokontrollerutvecklingskort, som en MSP430 eller ARM Cortex, och skriv åtminstone några C-program.
Jag har en datavetenskaplig examen och en programutvecklingsbakgrund , mestadels C ++ programmering för spel och nu iOS-spel och appar, men mitt sista jobb var en semi-pro EE-spelning som började med att göra en massa firmwareprogrammering för ett ARM Cortex M3-system, och slutade sedan med att jag lärde mig att göra några grundläggande kretskonstruktioner och kortlayout och design av ett par enkla kort. Så jag var i grund och botten tvungen att konfrontera problemet med att använda det bästa programmeringsspråket för att överbrygga hårdvaru- / mjukvarudesignen som någon som var ansvarig för båda ändarna av det.
C är absolut det språk du behöver veta. Det är enkelt för människor som programmerar i C ++ och aldrig behöver begränsa sig till C: s funktionsuppsättning för att säga "det är samma sak" men det är det inte. Speciellt hur C ++ har utvecklats och samlat in funktioner, och hur vanliga C ++ - programmerare använder dessa funktioner, är det verkligen en helt annan sak att arbeta med en ganska stor C-applikation i motsats till en C ++ - applikation. Din firmware SDK kommer att vara en massa C-bibliotek, allt annat som passar på en MCU kommer att vara ett C-bibliotek, alla operativsystem som är meningsfulla på en MCU kommer att skrivas i C, etc. etc.
Med detta sagt, eftersom många av MCU-verktygskedjorna där ute slutar använda GCC som sin kompilator, kommer du nästan säkert att ha en C ++ - kompilator tillgänglig om du använder en anständig MCU-familj. Men du måste vara mycket försiktig med de funktioner du använder, särskilt saker från standardbiblioteket, eftersom det är väldigt enkelt att sluta med en binär som är alldeles för stor för att passa på din enhet. Jag tror att det finns ett bra fall att använda C ++ på inbäddade enheter, C ++ har en hel del fina funktioner som har strö eller ingen storlek eller hastighetsstraff, du måste bara veta vad du gör och skriva kod på det sättet längre fram i C-stiländen av spektrumet än STL-änden av spektrumet när det gäller smart användning av funktioner.
Var inte uppmärksam på människor som säger att du kan använda Lua eller Python på en MCU med rätt inbäddad tolk bla, bla. Det är sant, jag har gjort det och det är kul, men just nu är det mer för leksaksprojekt och saker som dyker upp på Hack a Day. Jag tror att vi kommer att se mer av den typen av saker, eftersom Moores lag tillämpas obevekligt på även de minsta processorerna, det här är något som hände med spel där det brukade vara mycket montering, sedan höll de ut med C och C ++ längre än alla andra, och nu är allt så snabbt, och utvecklarproduktiviteten är så viktig att mycket utveckling sker med inbäddade språk på högre nivå eller i ett språk på hög nivå direkt. Ändå tar det några år innan du ser företag anställa firmwareprogrammerare med Python- och Lua-bakgrund.
Spenderar inte för mycket tid på montering heller. Det är inte dåligt att vara bekant med begreppen, men det är osannolikt att du kommer att göra mycket, om någon monteringsprogrammering. Det finns som denna konventionella visdom med spel och inbäddade att det är "bra att veta" montering, ofta upprepas av människor som inte arbetar inom dessa områden. Men i verkligheten är det mycket osannolikt att du kommer att skriva någon montering alls, någonsin, och om du gör det kommer det förmodligen bara att vara några rader för optimering eller något med hårdvaran du bara inte har ett API för (men du efter att du har skrivit en som innehåller några rader med montering). Jag har arbetat med flera spel och det här brädet / firmware-designprojektet och det totala antalet monteringslinjer jag har skrivit för kommersiella projekt är förmodligen i de låga tonåren. Det är inte produktivt, det är inte bärbart och det är inte läsbart så det används alltid som det sista möjliga alternativet.