B. Micro-processors, Learn Micro-controller from basic to higher version (AT89c51/Arduino/ARM/STM32F427). C. An understanding of Multi-Tasking D. A good understanding of DMA (Direct Memory Access), and how to implement it for systems which have DMA capability. E. How to develop and debug code for communications using RS-232, SPI, I2C, and parallel data ports Learn Communication Protocol(I2C/SPI/UART/CAN). F. Develop and debug code for peripherals such as UARTs, A/D & D/A converters, timers, PWM generation from a timer, real-time clocks, etc. G. Developing code to run under an RTOS (Real Time Operating System), and how to use semaphores, mutexes, queues, inter-task communications. H. Ability to debug multi-tasking code. I. An understanding of the different kinds of memory (RAM, ROM, Flash), the differences between them and how they are read, written, accessed. J. An excellent knowledge of what interrupts are and how they work in code. K. Kernel Programming L. Device Drivers
1.Embedded Software Engineer
i. Micro-controller Firmware Engineer ii. Embedded Linux Engineer / Embedded Operating System Engineer iii. Embedded Networking Engineer iv. Embedded Applications Engineer v. Embedded - Technology experts vi. Driver Development - Linux
2.Embedded Hardware Engineer
i. Hardwareengineer ii. Board Design Engineer iii. Board (hardware) validation engineer
3.Embedded System Engineer
4.Embedded Frimware Engineer
5.Application Engineer
i. Application Engineer Technical Support
ii. Tech Support Engineer iii. Product Application Engineer (PAE)
A. C or C++: hardware related C programming is the bedrock of embedded engineering.
This includes knowledge of the processor and the compiler do behind the scenes B. Understanding of operating systems: embedded developers usually need experience in programming in embedded Linux or similar embedded operating systems C. Knowledge of assembly language: competency in at least one assembly language, such as ARM or x86
D. Basic electronics: embedded engineers use oscilloscopes, logic analyzers and
multimeters for debugging E. Algorithms - search, sort, b-trees F. Design Patterns - factory, observer, singleton etc. G. Microprocessor fundamentals - interrupt processing, registers, assembly code, etc. H. Microcontroller fundamentals - ADC, DAC, Timers, PWM, DMA, watchdog, etc. I. Memory - NOR, NAND, SRAM, DRAM, wear levelling J. Basic protocols - I2C, SPI, UART, LIN *Advanced protocols - SATA, PCIE, USB, CAN, MOST K. Concurrent/ parallel programming - MPI for SMP etc. L. UML - class diagram, component diagram, state diagram, sequence diagram M. Perl or Python for scripting, for e.g. to modify simple text files. N. Specialized techniques for embedded programming e.g. debouncing of switches, resistive ladder switches, rotary encoders, etc. O. Software architecture for embedded systems, software design, software integration and / or system programming P. Build environments - makefile, cmake Q. Basic FPGA/ ASIC design, basic DSP R. Embedded developers working on commercial IoT devices usually need experience with some of the following: HMI programming, audio stacks (microphone, filters and DSP) S. Other programming languages which can be complementary are Rust, Go, Python