EE458 - Embedded Systems Lecture 3 – Embedded Devel. Outline References

advertisement
EE458 - Embedded Systems
Lecture 3 – Embedded Devel.
●
Outline
–
–
●
Developing for Embedded Systems
C File Streams
References
–
–
RTC: Chapter 2
File Streams man pages
1
Developing for Embedded
Systems
Cross-platform Development Environment
2
Developing for Embedded
Systems
●
●
●
Software available on the host system
typically includes a cross-compiler, a linker,
and a source-level debugger.
Software on the target might include a
dynamic loader, a link loader, a
, and
a debug agent.
One or more connections allow downloading
of program images and debugging.
3
Developing for Embedded
Systems
●
●
Embedded systems development requires
much greater knowledge of the target
architecture and the compile and link
processes than does development for a
general purpose OS (GPOS).
How is the image transferred? How and
where is the image loaded at runtime? How
do we
the program running on the
target?
4
Developing for Embedded
Systems
●
On the host system:
–
A compiler or assembler is used to convert
source code to object code (.o files).
–
The make program may be used to control the
compile and linking processes.
–
A
is used to combine object files into an
executable image file.
5
Developing for Embedded
Systems
The different tools
that are used on the
host to create an
executable image.
6
Developing for Embedded
Systems
●
●
●
Each object file created by the compiler
contains a “Symbol Table” and a “
”.
The Symbol Table maps variable and
function names to their relative address
locations.
The
contains a list of all
addresses that reference symbols in the
Symbol Table.
7
Developing for Embedded
Systems
The Symbol and Relocation Tables
8
Developing for Embedded
Systems
●
●
The linker uses these two tables to convert
all relative address references to the actual
addresses assigned to the symbols.
When creating an executable
all
references are resolved so that each symbol
has an absolute memory address.
9
Developing for Embedded
Systems
●
●
RTEMS images and object files are in the
format (Executable and Linking Format)
that is described in the text.
The binary instructions, binary data, symbol
table, relocation table, and debug information
are organized and contained in different
sections of the file.
10
Developing for Embedded
Systems
●
The readelf command displays section types
and (edited for readability):
$ i386-rtems-readelf -a hello.exe
ELF Header:
Magic:
7f 45 4c 46 01 01 01 00 00 ...
Class:
ELF32
Data:
2's complement, little endian
Section Headers:
[Nr] Name Type
[ 1] .text PROGBITS
[ 4] .data PROGBITS
[ 6] .bss NOBITS
Addr
00100000
00117599
0011a300
Size
017584
002d67
002aec
ES Flg
00 WAX
00 WA
00 WA
11
Developing for Embedded
Systems
●
●
Sections of the image can be mapped to
particular areas of memory by using
MEMORY and commands in a
linker script.
The developer must, of course, know the
types of memory available (ROM, RAM,
Flash) and the address of each type in order
to write a proper linker script.
12
Developing for Embedded
Systems
Target System Memory Map
13
Developing for Embedded
Systems
●
●
The GNU linker is ld (i386-rtems-ld for
RTEMS development). (See “info ld” for
additional information.)
Since we are developing for the PC (whose
architecture is well known) we will not have
to write special . (You would
need to create linker scripts when porting
RTEMS to a new BSP.)
14
C File Streams
●
●
●
Now, on to a completely new topic.
RTEMS does not provide implementations of
the C++ iostream classes (cin, cout, cerr)
Input and output is performed using the
traditional (or FILE) streams.
15
C File Streams
●
Here is some example code demonstrating
I/O with FILE streams:
#include <stdio.h>
int total = 12000;
FILE *myfile =
fopen(“output.txt”, “w”);
fprintf(myfile, “Sum is %d\n”, total);
fclose(myfile);
16
C File Streams
●
●
The fopen() routine associates a FILE
stream with a filename. The first argument is
the filename. The second argument is the
mode: “r”, “w”, “a”, “r+”, “w+” or “a+”. See the
fopen man page for details. (man 3 fopen)
Three streams are automatically opened:
stdin, stdout, .
#include <stdio.h>
fprintf(stdout, “Sum is %d\n”, total);
17
C File Streams
●
The fprintf() routine (man 3 printf) writes
variables to a FILE stream in accordance
with a format specifier. The format specifier
is a char string that contains ordinary text
and conversion specifiers. Conversion
specifiers begin with a .
fprintf(stdout, “Name: %s %s\n”,
fname, lname);
fprintf(stdout, “Age: %d\n”, age);
printf(“Volt=%f, Current=%f\n”, v, i);
18
C File Streams
●
The fscanf() routine (man 3 scanf) is used
to read variables from a FILE stream in
accordance with a format specifier. The
of the variable is used as an
argument to fscanf():
fscanf(stdin, “ %s %s”, fname, lname);
fscanf(stdin, “ %d”, &age);
// Note %lf for double %f for float
scanf(“ %lf %lf”, &v, &i);
19
C File Streams
●
●
●
The fputc()/putc()/putchar() routines can be
used to write a single character to a stream.
The fgetc()/getc()/getchar() routines can be
used to read a single char from a stream.
sprintf() prints to a char array instead of to a
stream. It is useful for converting numbers to
. sscanf() can be used to read
variables from a char array.
20
C File Streams
●
●
C FILE streams are buffered. Output is not
written until the buffer is full or an input
routine (fscanf, fgetc, etc) is called. You can
flush the output buffer with .
When using the input routines (fscanf, fgetc,
etc) input is normally not returned to the
program until a newline is entered. (The
termios routines can be used to change this
behavior.)
21
Download