Title: Compilers, assemblers, linkers, loaders, and programming issues For embedded Systems
1Compilers, assemblers, linkers, loaders, and
programming issuesFor embedded Systems
- Chris Gregg
- January 29, 2009
2is programming for an embedded system different?
- Speed
- Size
- Correctness
- Portability
- Real-Time or not
- Other Hardware Considerations
3How does one actually program an embedded system?
- Has this changed over the years? Has there been
significant progress? - How does Ford program their Fuel Injection System
computer? - How does GE program their Microwave Ovens (and
was this different 30 years ago?) - How does Nikon program their digital SLR cameras?
- How does Apple/RIM/Microsoft program their
iPhone/Blackberry/SmartPhone? - How does a hobbyist program a Pic microprocessor?
- How does NASA program (and reprogram) the Mars
Rover? - How did James Gosling at Sun want his set-top
boxes programmed? - (How was the original 128K Macintosh programmed?)
4Programming Languages
Machine Code
Fixed Rom, Ram, Firmware
Assembly Code
Higher Level Languages
Compiled C, nesC, C, Ada, Forth, etc.
Interpreted (?) Perl, Python, Javascript
Markup HTML, XML
Java
All Eventually End up as Machine Code
5So youve chosen C. Lets Go!
(Not so fast.)
- What does a programmer need to know about
programming for an embedded system? - Shed better know about the hardware.
- Purpose
- How data flows (to include getting the program
onto the system, I/O), how to interface with
sensors, actuators, etc. - Whether there is an operating system, and how it
runs programs - Limitations memory, speed, upgradability
(firmware?) - How are hardware errors handled? (think Mars
Rover) - Plan on debugging hardware issues
6So youve chosen C. Lets Go!
(Not so fast.)
- What does a programmer need to know about
programming for an embedded system? - Shed better know about the software tools
related to programming for the specific hardware. - Is there a compiler/linker/assembler?
(hopefully!) - How is the memory addressed, what bit-level
knowledge of the hardware is necessary, how does
one access pins, etc.? - How will debugging be managed?
- How will testing be done?
- What licensing needs to be organized (this can be
tricky!) - Does the software need to be portable? (using C
is probably going to help yousee the second
point above).
7The Embedded Software Development Process
Barr, M. Massa, A. Oram, A. (ed.) Programming
Embedded Systems in C and C, 2nd Edition.
O'Reilly Associates, Inc., 2006 , p.55
8The Tools
- Compiler Translates human readable code into
assembly language or opcodes for a particular
processor (or possibly into machine-independent
opcodes a la Java). Produces an object file. - Assembler Translates assembly language into
opcodes (it is really a compiler, too). Also
produces an object file. - Linker Organizes the object files, necessary
libraries, and other data and produces a
relocatable file. - Locator Takes the relocatable file and
information about the memory of the system and
produces an executable. - (By the way gcc takes care of all of these
functions at once)
9The Tools Embedded System Specifics
- All of the tools run on the host computer, not
the embedded computer. - Compiler Has to know about the specific hardware
(except in very trivial cases). Should be able
to optimize for size. - Assembler Produces startup code not inserted
automatically as in general purpose computers
(i.e., the programmer needs to compile it
independently). - Linker Needs the correct libraries (open source
c libraries, such as newlib, are available). - Locator Needs programmer input for information
about memory.
Bottom Line There can be a lot of extra work
for the programmer, although certain systems
(e.g. Pic programming) tools can automate most of
it.
10Moving the program onto the embedded system
- Remember, the program is written (and possibly
run in an emulator) on a host computer, but it
still needs to get onto the embedded system. - Methods
- Build/burn the program into the hardware
(firmware or other flash memory) - Bootloader a bootloader resides on the embedded
system and facilitates loading programs onto the
system. - Debug Monitor The debug monitor is a more robust
program on an embedded system that helps with
debugging and other chores, and can include a
bootloader as well.
11Debugging
- Debugging embedded systems can be facilitated
with a Debug Monitor, or through a remote
debugger on the host computer. A serial link is
normally set up, and the debugger acts more or
less like a general purpose debugger. - Emulators can be used to test the system without
utilizing the actual hardware (but this has many
caveats, and nothing beats testing on the real
system). - Software Simulators allow the programmer to debug
completely on the host system, which can be
quicker and can allow faster code turnaround. - When it comes down to it, an oscilloscope and a
multimeter can be your best friend for debugging.
12Final Thoughts
- Programming for embedded systems has come a long
way since the days of toggle switches, but it
still involves greater programmer involvement in
the hardware aspect of the system. - There are many software tools built for embedded
systems, and many embedded system hardware
designers include debugging tools with the
hardware. - You had probably learn C (and a fair amount of
assembly) to program embedded systems.
13Final Thoughts
- Is this a necessary topic for an Embedded Systems
class? - Yes
- Youve got to get your program onto the system
some how, and flipping toggle switches doesnt
put food on the table any more. - Hardware only does what you tell it to, via
software. - Discussion of the tradeoffs necessary to program
an embedded system versus a GP system is a
necessity.
146 Questions
- Discuss the steps needed to get a program from
source code to executable in an embedded system,
and the differences between similar steps on a
general purpose system. - What trade-offs are necessary when thinking about
how you are going to program for an embedded
system? - Why is C generally considered a better language
to program in for embedded systems than, say,
Java or Perl?
156 Questions
- Name three different ways you might debug the
code for your embedded system. - Why is it imperative that an embedded system
programmer know the details of the hardware that
she is programming for? Compare this to someone
writing a Java applet for a web site. - Talk about the role firmware plays in developing
software for an embedded system.
16Bibliography
- Barr, M. Massa, A. Oram, A. (ed.)Programming
Embedded Systems in C and C, 2nd Edition.
O'Reilly Associates, Inc., 2006 - Wolfe, M. How compilers and tools differ for
embedded systems. 2005. http//www.pgroup.com/lit
/pgi_article_cases.pdf - Gay, D. Levis, P. von Behren, R. Welsh, M.
Brewer, E. Culler, D. The nesC language A
holistic approach to networked embedded
systemsSIGPLAN Not., ACM, 2003, 38, 1-11 - Williams, B. Ingham, M. Chung, S. Elliott,
P.Model-based programming of intelligent
embedded systems and robotic space
explorersProceedings of the IEEE, 2003, 91,
212-237