Though embedded system itself is a specialisation, the industry expects you to have super specialisations within the field like embedded ‘C’ programming, exploring controller-specific features under embedded ‘C,’ RTOS porting and application development, and special networking protocols along with the fundamentals. In addition, there are certain other skills which are categorised as ‘must-haves.’ Knowledge of ‘C’ programming and operating system concepts, and exposure to microcontrollers and basic electronics are typical examples.
In addition to the basic electronics that I discussed in the microcontrollers article last month, knowledge of KEIL compiler and designing concept (both analogue and digital) would be an advantage for any aspiring candidate.
From my interaction with different industry spokespersons, I inferred that communication gap among team members could create a roadblock in any given project. A lot of it has to do with the specific jargon used by the different groups such as the software engineers and the hardware engineers; both also find it difficult to communicate with application domain experts. To avoid this hazard, your employer may want to judge your overall knowledge base and communication skills at the interview table. The necessary foundations of both the hardware building blocks and the software tools are equally important to learn as you embark on your journey.
Additionally, try to understand the basics of any one of the representative application domains of your choice so that, in future, you can take up the challenge of embedded system development in any application area.
How to begin?
From an application perspective, knowledge of embedded ‘C,’ processor cores, communication protocols like SPI and i2c, network protocols, interfacing with analogue and digital signals, and RTOS is invaluable for those who will design and develop embedded systems.
—Sanjay Mittal, director, Yogasa Systems
The best way of starting work on embedded systems is to work on the evaluation boards of popular micro-controllers or processors. Understand the system. Then try to write the software that works on these boards. In due course you can reveal the architecture of the system as well as the utilisation of software tools. Even if you do not have access to an evaluation board, you can get preliminary idea of embedded software development by experimenting with the code on any desktop computer. After gaining the necessary knowledge of the hardware to write the firmware, you will be in a position to be a member of any embedded system project team.
The first and foremost thing you need to know is the categorisation of embedded systems based on their functionality. All embedded systems may be bucketed under some broad categories like standalone system, real-time systems, network information appliances and mobile devices. Each of them is unique with respect to inputs, outputs and custom-built hardware architecture. Some exposure to different architectures (advantages and philosophy) and their comparative study (RISC vs CISC) are must. Try to deal with the building blocks of the hardware like processors, RAMs, ROMs, clock circuitry to generate clock signal, input/output devices, sensors and transducers, ADCs and DACs, DMA controllers, timers and power supply units.
Now you have to make the embedded system communicate with the external world. Always keep in mind that embedded software development involves cross-platform development as the software is initially developed on a host system and then the executable image is transferred to the target system. The know-how of board details and specifications and other hardware tools (digital multimeters, logic analysers and oscilloscopes), system clock and fuse bits, Linux and various distributions, operating system development suite (API calls), cross-platform development tools (overall GNU Project), Free Software Foundation (FSF) philosophy, ROM emulator, EPROM programmer, etc may be turnkey for this purpose.
Learn now to make the system work. At this point of execution, you have to write a program for the embedded system. As compared to writing application software, writing embedded software is a different ball-game. You need to manipulate at bit level and use operands, operations, comments and mnemonics to carry out specific functionalities such as remote control. In this process, you may get acquainted with a number of productivity tools (makefiles), debuggers (gdb and kgdb) and profilers (gprof) of industrial importance.
While dealing with the instruction set, try to customise yourself for the industry. Sharpen your skill sets by learning to use Gedit as a programmers editor, work with ‘make’ files and configure Gtkterm for serial data handling (UART) and understanding the AVR instruction set, embedded ‘C’ programming, variable scopes, qualifiers (volatile) and modifiers, program structures, pre-processor directives and determination of endianness (byte/bit ordering) of processors. Implementation knowledge of basic data structures like stacks and queues using above concepts may provide you an extra edge.
The instruction set is ready—what’s next? Let’s explore controller-specific features under the programming environment. At this point you need to know the aspects related to configuring ports and controlling their status. You have to assimilate memory and device interfacing, reading and writing EPROM as well as use of supported communication protocols and network protocols like SPI and i2c to get control over the system.
Try to dig a little deeper. Approach the critical parameters like interrupts, timers and boot loader in a realistic way, which I had already explained last month.