Qualche background nell'elettronica (o almeno il desiderio di entrarci) è praticamente necessario per avere successo nella programmazione embedded. Lo faccio da più di 30 anni e ho fatto il modo formale (BSEE + MSCS), ma ho incontrato molti programmatori embedded autodidatti lungo la strada. Avevano tutti una cosa in comune anche se, da qualche parte nel loro ambiente, avevano ricevuto un'educazione elettronica (formale o meno).
Stai andando a fare molti giri di bit e lavorare con molti registri I / O di basso livello, con i cosiddetti datasheet che potrebbero eseguire diverse centinaia di pagine, come questo (quindi se quel documento non sembra interessante, dimentica la programmazione integrata). Utilizzerai molti bus seriali come UART, SPI, I2C e USB. Timer a otto e 16 bit. Un sacco di interruzioni.
Non devi essere in grado di progettare un circuito, ma è meglio se impari a leggere uno schema poiché probabilmente stai sondando un circuito stampato con un oscilloscopio o un analizzatore logico.
Supponendo che tu stia lavorando con dispositivi di medie dimensioni, che potrebbero avere solo 32K a 256K di memoria di programma e 4K-16K di RAM, probabilmente stai facendo la maggior parte della tua programmazione in C - ma C con proprietario estensioni (diverse per ogni chip), perché la maggior parte di questi processori è un'architettura di Harvard e hanno spazi di indirizzi separati per RAM veloce, RAM estesa e spazio per il codice e i puntatori possono ottenere veramente complicati.
(Considero piccoli micros di quelli con pochi K di memoria di programma e qualche centinaio di byte di RAM.) Questi sono ancora in gran parte programmati in assembly, quindi ci sono microprocessori più grandi in grado di eseguire Linux e avere MB di flash e RAM, ma non è proprio il caso in cui sia la programmazione embedded main-stream.)