Warning: count(): Parameter must be an array or an object that implements Countable in /customers/9/c/6/vlsiegypt.com/httpd.www/home/wp-includes/post-template.php on line 259

How to be an Embedded System Design Engineer?


From time to time, I am asked by young enthusiastic engineers the same question: “How can I an embedded engineer?” I will summarize the needed skills for a freshman to enter the embedded engineering field.

From time to time, I am asked by young enthusiastic engineers the same question: “How can I an embedded engineer?” I will summarize the needed skills for a freshman to enter the embedded engineering field.


What is an Embedded System?

Before plotting a learning track, let’s define an embedded system. An embedded system is a tightly coupled Hardware(HW) + Software (SW) system to perform a dedicated system.

On average, a person meets around

100 embedded devices daily.

Like any computer system, the architecture of an embedded system is:

Figure 1: Embedded System Layered Architecture

• Hardware

• Firmware/Drivers

• Operating System

• Middleware

• Application

As shown in figure 1, the middleware and operating system are optional layers. The needed knowledge for embedded engineering is vast. It depends on which layer the engineer will focus on as well as the application domain.


Basic Learning Track

The prerequisites for any embedded engineer are to understand what is meant by computer architecture and operating systems. These 2 topics are covered in most Egyptian universities, so I will skip them. In addition, to cover all layers, I suggest the following track.

Figure 2: Basic Learning Track

C Programming

By C programming I neither mean embedded C nor do I mean C for embedded. We have to discriminate between the language and where it is used. C itself is environment independent.

Adding some extensions does not make it a new language. The problem with C is its flexibility and that it is poorly tutored both in universities and in training centers. You should focus on C language, data structures and algorithms as well as on how to write elite and bug free code. 2 good references I always point out are:

• C Programming by Example

• Writing Bug Free C Code

Real-Time Operating System

An operating system is a piece of software that manages HW and SW in the system. The real-time adds the sense of correct timing as well as correct functionality. The goal is to learn how to do multitasking programming over RTOS. Multitasking programming is a very common programming method used heavily in embedded systems.

The de facto for learning RTOS is

μC/OS-II written by Jean J. Labrosse.

www.embedded-tips.blogspot.com has a complete free μC/OS-II with plenty of labs you can develop and test on your PC without the need of a development board.


ARM Architecture and Peripherals

Figure 3: ARM Cortex M3 Core and CPU

ARM is the dominant processor in the embedded industry. Its market share is around 75%. I highly recommend the ARM CortexM3 core. Many of the SoC manufacturers have adopted it. A good reference for the Cortex M3 core is “The Definitive Guide to the ARM Cortex M3”. After wards, going to the SoC is recommended. Famous SoC’s are NXP LPC, ST STm32, and TI Luminary Sterallis. For those who can’t purchase a development board, they can use QEMU to experience how to develop on Cortex M3 core and how to write different drivers for different peripherals. Again a quick introduction can be found in www.embeddedtips.blogspot.com about the ARM Cortex M3 and the ST STm32 Soc.


Figure 4: STm32 SoC Block Diagram

SW Engineering

Embedded SW development is like any SW development, it needs to follow a disciplined process. An Embedded

SW engineer should be familiar with:

• Requirements Engineering

• Design

• Implementation

• Testing

• Configuration Management

Plenty of references are available online. For those who are interested in courses, the Software Engineering

Competence Center, there are really good courses to cover these topics.


Amr Ali

Embeddded Systems Engineer

Related posts:


  • Fatal error: Uncaught Error: Call to undefined function ereg() in /customers/9/c/6/vlsiegypt.com/httpd.www/home/wp-content/themes/VLSIEgypt/functions.php:28 Stack trace: #0 /customers/9/c/6/vlsiegypt.com/httpd.www/home/wp-content/themes/VLSIEgypt/functions.php(44): commenter_link() #1 /customers/9/c/6/vlsiegypt.com/httpd.www/home/wp-includes/comment-template.php(1810): custom_comments(Object(stdClass), Array, 1) #2 /customers/9/c/6/vlsiegypt.com/httpd.www/home/wp-includes/class-wp-walker.php(147): Walker_Comment->start_el('', Object(stdClass), 1, Array) #3 /customers/9/c/6/vlsiegypt.com/httpd.www/home/wp-includes/comment-template.php(1777): Walker->display_element(Object(stdClass), Array, '5', 0, Array, '') #4 /customers/9/c/6/vlsiegypt.com/httpd.www/home/wp-includes/class-wp-walker.php(373): Walker_Comment->display_element(Object(stdClass), Array, '5', 0, Array, '') #5 /customers/9/c/6/vlsiegypt.com/httpd.www/home/wp-includes/comment-template.php(2126): Walker->paged_walk(Array, '5', 0, 0, Array) #6 /customers/9/c/6/vlsi in /customers/9/c/6/vlsiegypt.com/httpd.www/home/wp-content/themes/VLSIEgypt/functions.php on line 28