2013-06-20 10 views
10

Voglio fare una lista di cose che devono imparare che è prezioso per la mia carriera. Quali abilità pensi siano di vitale importanza per uno sviluppatore incorporato, ora e in un lontano futuro?Sviluppatore incorporato, quali sono le competenze importanti

Sono diventato abbastanza abile con l'assembler C e ARM, lavorando con il kernel Linux incorporato e sto per tuffarmi nei driver Linux. Tuttavia non posso fare a meno di pensare che forse sto restringendo le mie capacità a molto. Voglio continuare a lavorare con i sistemi embedded in futuro, ma non si conosce mai il mercato del lavoro (paranoico che ho intenzione di esternalizzare in Cina e in India).

Sento che attualmente sono piuttosto debole con C++ e Java, mi piacerebbe anche imparare il kernel di Android in futuro. Inoltre non conosco alcun linguaggio di scripting.

Chiunque abbia lavorato per un po 'con i sistemi embedded, può dare qualche input su quali competenze/lingue ritengono essere di vitale importanza per uno sviluppatore incorporato? Dovrei continuare a perfezionare le mie abilità C o dovrei imparare nuove cose.

+3

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

+0

Siamo spiacenti, ma questo sito è per problemi tecnici che hanno risposte specifiche, non consigli di carriera o domande che sollecitano un elenco aperto. –

+0

Non si conosce l'embedded fino a quando non si lavora direttamente con i registri :) –

risposta

29

Ecco la mia lista:

essenziali C
  • OOP/C++ - classi, incapsulamento, polimorfismo, sovraccarico/imperativa, modelli
  • Algoritmi - cercare, ordinare, b- alberi
  • Modelli di progettazione - fabbrica, osservatore, singleton ecc.
  • Sistema operativo in tempo reale ms - primitive (semaforo, mutex), tecniche di programmazione, spazio utente/kernel
  • Linux fondamentali, scrittura conducente, coperture
  • fondamentali microprocessore - elaborazione, registri, codice assemblaggio interrupt, ecc
  • fondamenti microcontrollore - ADC, DAC, timer, PWM, DMA, cane da guardia, ecc
  • memoria - NOR, NAND, SRAM, DRAM, usura livellamento
  • protocolli di base - I2C, SPI, UART, LIN
  • protocolli avanzati - SATA, PCIe USB, CAN, MIGLIORE
  • Co programmazione in parallelo/parallela - MPI per SMP ecc.
  • UML - diagramma di classe, schema componenti, diagramma di stato, diagramma di sequenza
  • Perl o Python per lo scripting, ad es. per modificare semplici file di testo.
  • Java e Android
  • di base di elettronica - lettura schemi, utilizzando un oscilloscopio, multimetro, saldatore
  • tecniche specializzate per programmazione embedded per esempio debouncing di interruttori, interruttori resistivi a pioli, encoder rotativi, ecc.
  • ingegneria del software - SDLC, CMMI, metodi agili ad es. SCRUM, controllo di versione (ClearCase, git, svn), bug tracking (? JIRA), la verifica statica del codice, Lint, test di unità, integrazione continua
  • ambienti di compilazione - makefile, cmake
  • base FPGA/ASIC, DSP di base
+0

Questo è esattamente quello che stavo cercando! Grazie, sembra che ho molto da imparare :) – MrGigu

2

Qualunque sia il dominio che si desidera selezionare, non solo la programmazione in C, ma si dovrebbe anche avere una buona conoscenza dell'hardware.

Non importa su quale dominio stai lavorando (linux, vlsi, arm ....). Ma importa quanto sia efficiente il tuo codice in esecuzione sull'hardware.

Se vuoi davvero lavorare nel mondo embedded, troverai la tua strada.

6

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

+0

Grazie per il tuo contributo! Ottimo consiglio! – MrGigu

+0

1. Scopri come eseguire l'allineamento del codice: la maggior parte degli sviluppatori incorporati che ho visto negli ultimi 20 anni non sanno come farlo. – zzz777

Problemi correlati