Ik zit nu al ruim dertien jaar in het embedded vak en mijn functie is dan ook Sr. Embedded software engineer. Nu heb ik het geluk dat ik zowel veel interesse had in hardware als in software waardoor mijn werkzaamheden een stuk makkelijker af gaan. Ik heb overigens HBO TCK (Technische Computer Kunde) gestudeerd. Ik had geen zin om door te studeren en heb het er bij gelaten.
Je hebt twee soorten embedded programmeurs in mijn ogen. De 1e is de echte embedded engineer met gedegen hardware kennis. Hij kan goed hardwareschema's lezen en liefst maken, hij weet erg veel van de gebruikte microcontroller, de architectuur, de periferie, de limitaties van het interne en externe geheugen, de snelheid van de geheugenbus, eventuele caching, real-time gedrag, etc. Ook heeft hij ervaring en kan hij omgaan met de soldeerbout, oscilloscoop/Logic Analyser en hardware debuggers om de firmware te kunnen debuggen op een live running target (liefst non-intrusive). Omdat hij erg laag op de hardware programmeert, heeft hij vaak ook kennis van low-level communicatiesystemen en protocollen zoals SPI, RS232, I2C, CAN, etc. Het programmeren gebeurt vaak tegen de hardware aan en dit doet hij bare-metal, via een super-loop/round-robin scheduler of middels een (RT)OS.
De 2e soort is een embedded engineer die op een hoger niveau programmeert. Zo hoeft hij niet zo veel te weten van de microcontroller en de gebruikte periferie. Hij kan de hardware wat abstracter behandelen. De drivers voor de periferie worden aangeleverd of intern door andere mensen ontwikkeld. Vaak programmeren ze op Posix compliant operating systems zoals Linux, QNX, etc. Het debuggen gaat via software zoals GDB. Een IT-er zou zich hier redelijk in kunnen vinden. Het is bijna hetzelfde als programmeren voor een PC, maar uiteraard wel met beperkingen (zoals geheugen gebruik, beperkte processorsnelheid, beschikbaarheid van wel of geen floating-point unit, etc). Een hardwareschema lezen en een oscilloscoop bedienen is eigenlijk altijd wel een pre in de embedded wereld.
Ik werk bij een bedrijf dat hardware en Real-Time embedded software ontwikkelt. De dagelijkse bezigheden van mij zijn oa:
- Harwareschema's lezen, reviewen en soms uitbreiden/wijzigen
- Processoren selecteren in samenspraak met de hardware engineers
- Design/architectuur maken van de firmware
- Make systemen opzetten, verbeteren en toepassen op nieuwe projecten
- Modulair programmeren in C. Vaak object-oriented C (niet C++, maar OO design principes in C)
- Debuggen middels Lauterbach debuggers (JTAG) icm tracing, code coverage, breakpoints, etc
- Timing analysis middels oscilloscoop en/of tracing ivm Real-time gedrag van onze producten
- Overleggen met hardware engineers, system test engineers en QC
- Drivers schrijven voor Linux (LED, FPGA, etc)
- VHDL schrijven, simuleren, testen en debuggen (middels oscilloscoop en/of logic analyser). Dit is overigens kennis die lang niet alle embedded engineers bezitten. Vaak worden VHDL en FPGA's gezien als een hardware verantwoordelijkheid en derhalve ook ontwikkelt door een hardware engineer.
Dit zijn maar enkele bezigheden binnen mijn functie. Het wil ook nog wel eens verschillen tussen de verschillende werkgevers.
Als laatste. Ik heb tientallen sollicitatiegesprekken gevoerd met potentieel nieuwe collega's. Echter viel het me op dat de kwaliteit en aanbod van de mensen tegenviel. We zijn naar het buitenland uitgeweken om daar mensen proberen te vinden. Ook dat viel overigens tegen. Er is veel vraag naar goede embedded engineers maar helaas zijn die gewoon dun gezaaid. De embedded kant kiezen voor je studie is in mijn ogen dan ook een goede keuze. Werk zat!