Writing embedded software requires very different skills from enterprise or application software development. Here are six questions you always wanted to know about embedded engineers, but were too afraid to ask.
1. What are embedded systems?
An embedded system is a computer with a dedicated function within a larger mechanical or electrical system. They often perform pre-defined tasks with very specific requirements.
Embedded systems can be microprocessors, the tiny electronic chips found inside a computer’s central processing unit (CPU), which compute and calculate the commands. They can also be microcontroller-based, which is usually a SoC (System on a chip) containing logic units, memory slots, and I/O peripherals, etc. In either case, there is an integrated circuit (IC) at the heart of the product that is generally designed to carry out computation for real-time operations.
2. What are some examples of embedded systems?
As mentioned in the previous question, think of an embedded system as any electronic device that assists you to solve a specific problem. Mobile phones, microwaves, coffee machines, fridges, air conditioning, traffic lights and remote controls are all examples of embedded systems. There are many embedded systems in cars, such as airbags, anti-lock brakes, and SatNav systems.
3. What do embedded engineers do?
Embedded engineers typically have control over both hardware and software design. Typically this requires an in-depth knowledge of embedded architectures.
4. What skills do embedded engineers have?
Embedded engineers generally come from an Electrical Engineering, Computer Science background and have total command of embedded architecture. The most common programming language used by embedded engineers is C/C++.
Maharajan Veerabahu suggests to think of embedded engineers in five key roles: micro-controller firmware engineers, embedded operating system engineers, embedded networking engineers, embedded applications engineer and embedded technology experts. Each has its own particular specialities, but in general the key skills include:
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
Understanding of operating systems: embedded developers usually need experience in programming in embedded Linux or similar embedded operating systems
Knowledge of assembly language: competency in at least one assembly language, such as ARM or x86
Other skills include:
Basic electronics: embedded engineers use oscilloscopes, logic analyzers and multimeters for debugging
Algorithms - search, sort, b-trees
Design Patterns - factory, observer, singleton etc.
Microprocessor fundamentals - interrupt processing, registers, assembly code, etc.
Microcontroller fundamentals - ADC, DAC, Timers, PWM, DMA, watchdog, etc.
Memory - NOR, NAND, SRAM, DRAM, wear levelling
Basic protocols - I2C, SPI, UART, LIN *Advanced protocols - SATA, PCIE, USB, CAN, MOST
Concurrent/ parallel programming - MPI for SMP etc.
UML - class diagram, component diagram, state diagram, sequence diagram
Perl or Python for scripting, for e.g. to modify simple text files.
Specialized techniques for embedded programming e.g. debouncing of switches, resistive ladder switches, rotary encoders, etc.
Software architecture for embedded systems, software design, software integration and/or system programming
Build environments - makefile, cmake
Basic FPGA/ ASIC design, basic DSP
Embedded developers working on commercial IoT devices usually need experience with some of the following: HMI programming, audio stacks (microphone, filters and DSP)
Other programming languages which can be complementary are Rust, Go, Python
This list comes largely from a StackOverflow thread on the topic.
5. What is the difference between an embedded engineer and a software engineer?
Like software engineers, embedded engineers code, debug, test and write the corresponding documentation. Unlike software engineers, embedded engineers work largely with hardware, and often need to develop or configure a custom operating system unique to the hardware and memory map of the device. Embedded Engineers must also consider safety. For example, the embedded system in charge of car’s brake system can not fail.
Check out what Roger DiPaolo, an embedded engineer with 35 years of experience, said in this Quora answer on the topic answer:
“Consider that the typical embedded system is a highly custom device. It’s not a standard platform where there is a wealth of pre-written code (libraries) that a developer can just “drop in” and write a few lines of glue code. Most embedded firmware is custom, meaning that on a typical embedded project a high percentage of the code is new code, meaning that more development time, and more developers are required.”
6. How does IoT relate to embedded systems?
Most Internet of Things (IoT) products are in fact embedded devices which are connected to the internet. IoT fans imagine a world where the internet and cloud resources process huge amounts of data collected by these devices, and use it to improve the services and devices.
With the growth of IoT, micro-controller firmware engineers, who specialize in C programming, know some assembly languages, and are adept at designing simple devices, will be in high demand.