Come accennato da Lundin, questa domanda è aperta a molte risposte diverse. Hai a disposizione piccoli dispositivi embedded metal-constrained con alimentazione a batteria e sistemi più complessi con Linux.
Prima di tutto, è molto importante essere uno sviluppatore flessibile. Devi essere in grado di adattarti ai cambiamenti il più rapidamente possibile. Potrebbe essere necessario realizzare un prototipo a prova di concetto in appena un paio di settimane in una lingua che non hai mai usato prima o iniziare a lavorare in un progetto precedente per correggere un bug molto rapidamente.
È molto importante conoscere i concetti di architettura software, RTOS, sistemi event-driven (i sistemi incorporati sono reattivi per natura) e anche la modellazione (UML). Forse sviluppo basato sui test (TDD). Questi sono indipendenti dalla lingua e ti aiuteranno a sviluppare un buon firmware da zero.
Per quanto riguarda le lingue, penso che C sia usato in entrambi i sistemi piccoli e grandi, quindi avere un buon background in C è un must. Qui non sto parlando di programmazione c a livello di principianti. Sto parlando di sapere cosa fanno il processore e il compilatore dietro le quinte. Secondo quanto hai detto, probabilmente hai queste capacità. Questo è molto utile nel caso di piccoli sistemi, dove ogni byte di RAM e ROM conta. Sapere qualcosa sulle regole MISRA-C ti aiuterà a sviluppare un codice C più sicuro.
Probabilmente avrete bisogno di alcuni programmi di scripting per eseguire test automatici, elaborazione dati, strumenti per la generazione di codice, ecc. Io uso Python per tutto questo, e anche alcuni script di shell linux.
La possibilità di progettare applicazioni basate su PC è utile per creare dispositivi di prova per testare i dispositivi incorporati nella linea di produzione, o forse perché il dispositivo incorporato ha solo bisogno di un software per PC, come un oscilloscopio USB tascabile. In questo caso, utilizzo Qt, dal momento che è multipiattaforma, ma è possibile utilizzare Visual Studio con C# se si desidera lavorare solo su Windows.
Nel caso di sistemi embedded, è meglio avere uno sfondo hardware solido.Inoltre, è necessario essere in grado di utilizzare un oscilloscopio, un analizzatore logico, un generatore di segnali, ecc. A volte è necessario risolvere i problemi hardware con il software. :)
Ecco un piccolo elenco di libri che trovo molto utile:
- pratiche UML Statecharts in C/C++.
- UML Distillato.
- Realizzazione di sistemi integrati.
- Computer come componenti.
- Primer software incorporato.
- Software per sistemi integrati migliori.
Spero che sia d'aiuto.
Fernando
La tua domanda è troppo ampia, quindi verrà chiusa. Ad ogni modo, come regola generale, più vicino all'hardware si ottiene, più ampia e generica è la conoscenza che si otterrà.Se conosci il kernel di Linux o il kernel di Android, lavori ancora a livello di applicazione e diventerai uno specialista in alcune applicazioni particolari. Se conosci una programmazione C generica, hardware, alcuni assemblatori di qualsiasi tipo ed elettronica, allora hai una competenza di base che può essere utilizzata indipendentemente dalla natura dell'applicazione. – Lundin
Siamo spiacenti, ma questo sito è per problemi tecnici che hanno risposte specifiche, non consigli di carriera o domande che sollecitano un elenco aperto. –
Non si conosce l'embedded fino a quando non si lavora direttamente con i registri :) –