Nowadays, we are surrounded by embedded systems; products containing
digital computers and software running on those embedded computing
devices. Example
embedded systems are mobile telephones, DVD players, car radios,
automotive control electronics, airplanes, and medical systems.
Generally speaking, an embedded system is made up of hardware and
software. Embedded software can be sub-categorized into application
firmware (domain specific knowledge involved), middleware and system
software (Real Time OS or Embedded OS Kernel, Device Drivers) and
digital signal processing tracks.
Embedded hardware folks can be grouped into prototype
circuit design electrical engineers and custom chip designers (RTL for
FPGA IC for moderate volumes). An embedded engineer should have EE and/or CS
background although any graduate in science and technology can learn
the tools and skills of the trade.
The embedded system software must be designed on a platform
different from the platform on which the system is intended to be
deployed. Cross platform development means that, for example, the
development of embedded software for Fujitsu F2MC 16 bits
micro-controller can be done on a system running Linux Operating system
on a 64 bit Wintel desktop PC.
Similarly, the development of some firmware code for Embedded Linux
could be done on a Microsoft Windows System. That implies cross
platform development tools (such as cross compilers) and
emulation/demonstration boards are needed and those used to be
expensive.
Taking the traditional approach it could cost more than $50,000 for
a fully equipped embedded system labs.
Another way
With new products and free software nowadays make it possible to build
an embedded system laboratory for less than $1000. The lab could be for
both academic and continuing professional education purposes. What
follows is a collection of resources, some free, some online, and all
inexpensive.
Required Skills for an Embedded
Software Engineer: A Sample Syllabus
The resources described here will, I feel, go a long way toward
qualifying a student embedded software engineer with a basic skill set
that includes the following subjects:
1) Set Theory, Boolean
Algebra and Demorgan's Law
2) Discrete Mathematics (for
DSP folks)
3) Basic Electrical and
Electronics Engineering
4) Electrical circuits,
schematic, assembling and soldering of an electronic circuit
5) Fundamentals of Control
Engineering and Linear Systems
6) C Programming and Data
Structures, ANSI C and MISRA C
7) Computer Operating
Systems:Linux, eCos, uC/OS II, etc..
8) Real Time Systems Concepts
9) Digital Logic and Circuits
and I/O interfacing
10) Object Oriented Concepts
and its application in software design
11) Object Oriented Programming
Language (preferably C++)
12) Concepts of Software
Engineering and Product Life Cycle Models
There are advanced topics which embedded system design engineer
should know too. Following are the examples of advanced topics the
student should master with the help of the resoources listed here:
1) Hardware Software
Co-Design
2) Object Oriented Design
Patterns and Reusable Frameworks for Embedded Software
3) GUI Design
4) Software Architecture
5) Model Driven Architecture
and Code generation
6) Embedded Communication
Technologies
However, since the scope of this article is on how to set up an
embedded laboratory, the rest of this discussion will be focused on
building lab resources to cover most needs of an embedded system
course. This proposed sub-$1000 laboratory will be able to provide
hands-on resources laboratory for training in all aspects of embedded
engineering.
Shopping List
To set up a hands on laboratory with less than $1000, an assumption is
made that there are two desktop PC workstations with either the Linux
and/or Microsoft Windows operating systems with USB and UART serial
ports. The under $1000 shopping list in Table 1 below includes the following
tools and building blocks for designing and implementing embedded
software and hardware.
 |
| Table
1. Price Lists of items to be purchased |
Now we have acquired adequate educational kit to train future
embedded software engineers how to design embedded software on 8 bits
micro-controllers, 32 bits micro-processors with memory cache, 32 bits
Digital signal processors and automatic code generation using Matlab
Simulink.
Engineers can experiment RTOS environment on 8 bits and 32 bits
microprocessors by using freeRTOS, uCOS II and Embedded Linux on those
demonstration boards and SBC (Single Board Computers)[4]
Moreover, freely download-able 8085/8086 Simulators[26] can be installed to refresh PC
assembly language accompanying computer architecture courses.
Similarly, some basic electronic courses can be run with AIM-spice
simulator [12], freely
available from University of Berkeley. The free Micro-controller
simulators such as MicroDev can be useful for student learners also.[22].
The hands on laboratory projects could be created as derivative work
based on the sample projects provided by the product vendors. The
certificate level courses in Embedded systems design can be a good
starting place to design courses.[45]
 |
| Figure
1. A sample setup for an embedded system laboratory |
Sample Laboratory Set Up
Using the embedded system development gear in Figure 1, above, a sample lab set up
is relatively strait forward.
First, used one of the available desktops, Windows can be configured
to serve as the workstation by installing the microcontollers and DSP
available with the starter kits, development boards and evaluation kits
show in Table 1, earlier.
Thus populated, it can support DSP simulators and IDES such as Code
Composer Studio for Texas Instruments MSP430 Micro-Controllers and
Digital Signal Processors; Freescale's Code Warrior Studio for the HC08
Micro-controllers and the Keil 8051 IDE for 8051 based
micro-controllers.
The need for a digital oscilloscope can be solved by PC based
oscilloscopes from a lot of vendors. And for low frequency applications
(<20000) you can turn your PC sound card into a handy and
inexpensive oscilloscope with freely available software from off the
Web and a simple USB connection.
There are a lot of vendors that provide such a USB connected PC
based digital oscilloscope capability, such as, for example, the USB
BITSCOPE 310, which is suitable for most of the embedded applications
except video.
On the second workstation, to set up the development environment for
Embedded Linux you will need to install cross compilation tools (from
native x86 processor on which PC is running) as well as an ARM based
Linux SBU (single board computer) board.
To facilitate SoC (System on a chip) design environment on FPGA
boards there are a number of free VHDL tools, such as Signs [5], which can be installed.
Texts
Following is a list of the texts I found it useful for embedded
software engineers, some of which are available in electronic form, as
well as a number of electronic books which can be downloaded for
learning purposes. For some book reviews of these and other useful
books go to the Embedded SIG, the Association of Computing Machineries
(ACM), as well as the Jack Ganssle's book review for embedded
engineering texts.[27]
(1) Programming Embedded
Systems in C and C++ , by Michael Barr, O'Reilly
(2) Building Embedded
Linux
Systems, by Karim Yaghmour, O'Reilly
(3) The Scientist and
Engineer's Guide
to Digital Signal Processing, by Steven W. Smith
(4) C++
GUI Programming with Qt
3 by Jasmin Blanchette, Mark Summerfield; Prentice Hall.
(5) Numerical Recipes in C and
C++: The
Art of Scientific Computing, William H. Press, Saul A. Teukolsky,
William T. Vetterling, and Brian P. Flannery. Cambridge University
Press
On line references and resources
Following are the URLs of papers, articles, information and software
and other resources I have found useful:
[1] "How to become an Embedded Geek"
by Jack Ganssle
[2] Setting
up an Embedded System Lab at home
http://ti.tuwien.ac.at/ecs/research/projects/scdl/download/rr-55-2006.pdf
[3] Texas
Instruments MSP430 microprocessor based demonstration boards for
less than $20
[4] Free Real Time Operating System for
micro-controllers; there is RTOS port for MSP430.
[5] Signs " Free
VHDL Hardware Development IDE for simulation, compilation,
synthesis.
[6] A free VHDL simulation tool
[7] FPGA e-Lab, a Technique to
Remote Access a Laboratory to Design and Test by
Reza Hashemian, Jason Riddley
[8] Inexpensive student-assembled
FPGA / micro-controller board
[9] PIC24 Microcontroller and
dsPIC33 Digital Signal Controller
Development
Board
[10] Cyclone II FPGA
Starter Development Kit
[11] Explorer
16 for PIC24 Microcontroller and dsPIC33 Digital Signal Controller
(DSC) families
[12] Free Mixed Signal Emulator AIM-spice
[13] Scoping
out palm-sized USB oscilloscope
[14] http://technews.acm.org/articles/2004-6/0802m.html
[15] http://fie.engrng.pitt.edu/fie2002/papers/1349.pdf
[16]
http://www.arl.wustl.edu/%7Etodd/sproull_fpl_05.pdf
[17] http://www.cems.uwe.ac.uk/%7Engunton/vhdl/vhd.html
[18]
http://www.eetimes.com/news/design/resources/opensourcelinks.html
[19] http://www.best-microcontroller-projects.com
[20] Free Embedded C programming
course
[21] Linux Source Code for different
platforms Cross Reference
[22] MicroDev, an IDE for
logic devices such as micro-controllers and microprocessors
[23] Introduction
to Misra C on Embedded.com
[24] New C standard
eBook
[25] CSDP
(Certified Software Development Professional), IEEE for Generic
Software Engineers
[26] 8086 Simulator
as teaching aid to 8086 Assembly Language and Computer Architecture
[27] Book Reviews of
Embedded Texts by Jack Ganssle
[28] What
is an Embedded System by Rational IBM
[29] MATLAB Student
Version
[30] Eagle Layout Editor Freeware (up
to double layer PCB)
[31] PC based Oscilloscope from Bitscope
[32] PC based Oscilloscope from
TiePie
[33] Free Code Warrior IDE (C compiler) for
code on the Freescale HC08 less than 2KB
[34] Getting
Started and Evaluating Microsoft Embedded OSes
[35] Keil IDE and C51 C compiler
Evaluation Software for less than 2KB code
[36] EdSim51 - Free 8051 Simulator
[37] Embedded
MCU from Fujitsu Microcontroller
[38] University of Colorado Embedded Systems Research
[39] C/C++
Programmer's Guide to Embedded Systems
[40] http://www.opersys.com/ulxembsys-course.html
[41] Essential C,
Computer Science Library, Stanford University
[42] Embedded C++ or C++
for Embedded Systems
[43] Embedded
Software Engineering: The State of the Practice, by Bas Graaf,
Marco Lormans, Hans Toetenel, Delft University of Technology
[44] University of California
Irvine Extension
Certificate in Embedded Software Engineering
[45] Association of Computing
Machines Embedded SIG
[46] Doxygen for documentation
http://www.doxygen.org
[47] Graphviz tool to accompany Doxygen
http://www.graphviz.org
[48] Cygwin to make Unix development on
Microsoft Windows http://www.cygwin.org
[49] MinGw to make make utility work on
Microsoft Windows
Aung Kyaw Soe is
an Embedded Software Design Engineer with a Master of Embedded Systems
Design from Technical University of Eindhoven, the Netherlands and a
graduate of the National University of Singapore, Singapore. He can be
reached at aung.aungkyawsoe@gmail.com.