Top Banner
EE458 - Embedded Systems Lecture 3 – Embedded Devel. Outline Developing for Embedded Systems C File Streams References RTC: Chapter 2 File Streams man pages 1
21

EE458 - Embedded Systems Lecture 3 – Embedded Devel.richardson/courses/EE458_Real_Tim… · Lecture 3 – Embedded Devel. Outline – Developing for Embedded Systems – C File

Aug 08, 2020

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: EE458 - Embedded Systems Lecture 3 – Embedded Devel.richardson/courses/EE458_Real_Tim… · Lecture 3 – Embedded Devel. Outline – Developing for Embedded Systems – C File

EE458 - Embedded SystemsLecture 3 – Embedded Devel.

● Outline– Developing for Embedded Systems– C File Streams

● References– RTC: Chapter 2– File Streams man pages

1

Page 2: EE458 - Embedded Systems Lecture 3 – Embedded Devel.richardson/courses/EE458_Real_Tim… · Lecture 3 – Embedded Devel. Outline – Developing for Embedded Systems – C File

Developing for Embedded Systems

2

Cross-platform Development Environment

Page 3: EE458 - Embedded Systems Lecture 3 – Embedded Devel.richardson/courses/EE458_Real_Tim… · Lecture 3 – Embedded Devel. Outline – Developing for Embedded Systems – C File

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 monitor, and a debug agent.

● One or more connections allow downloading of program images and debugging.

3

Page 4: EE458 - Embedded Systems Lecture 3 – Embedded Devel.richardson/courses/EE458_Real_Tim… · Lecture 3 – Embedded Devel. Outline – Developing for Embedded Systems – C File

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 debug the program running on the target?

4

Page 5: EE458 - Embedded Systems Lecture 3 – Embedded Devel.richardson/courses/EE458_Real_Tim… · Lecture 3 – Embedded Devel. Outline – Developing for Embedded Systems – C File

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 linker is used to combine object files into an executable image file.

5

Page 6: EE458 - Embedded Systems Lecture 3 – Embedded Devel.richardson/courses/EE458_Real_Tim… · Lecture 3 – Embedded Devel. Outline – Developing for Embedded Systems – C File

Developing for Embedded Systems

6

The different toolsthat are used on thehost to create anexecutable image.

Page 7: EE458 - Embedded Systems Lecture 3 – Embedded Devel.richardson/courses/EE458_Real_Tim… · Lecture 3 – Embedded Devel. Outline – Developing for Embedded Systems – C File

Developing for Embedded Systems

● Each object file created by the compiler contains a “Symbol Table” and a “Relocation Table”.

● The Symbol Table maps variable and function names to their relative address locations.

● The Relocation Table contains a list of all addresses that reference symbols in the Symbol Table.

7

Page 8: EE458 - Embedded Systems Lecture 3 – Embedded Devel.richardson/courses/EE458_Real_Tim… · Lecture 3 – Embedded Devel. Outline – Developing for Embedded Systems – C File

Developing for Embedded Systems

8The Symbol and Relocation Tables

Page 9: EE458 - Embedded Systems Lecture 3 – Embedded Devel.richardson/courses/EE458_Real_Tim… · Lecture 3 – Embedded Devel. Outline – Developing for Embedded Systems – C File

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 image all references are resolved so that each symbol has an absolute memory address.

9

Page 10: EE458 - Embedded Systems Lecture 3 – Embedded Devel.richardson/courses/EE458_Real_Tim… · Lecture 3 – Embedded Devel. Outline – Developing for Embedded Systems – C File

Developing for Embedded Systems

● RTEMS images and object files are in the ELF 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

Page 11: EE458 - Embedded Systems Lecture 3 – Embedded Devel.richardson/courses/EE458_Real_Tim… · Lecture 3 – Embedded Devel. Outline – Developing for Embedded Systems – C File

Developing for Embedded Systems

● The readelf command displays section types and attributes (edited for readability):

$ i386-rtems-readelf -a hello.exeELF Header: Magic: 7f 45 4c 46 01 01 01 00 00 ... Class: ELF32 Data: 2's complement, little endian

Section Headers: [Nr] Name Type Addr Size ES Flg [ 1] .text PROGBITS 00100000 017584 00 WAX [ 4] .data PROGBITS 00117599 002d67 00 WA [ 6] .bss NOBITS 0011a300 002aec 00 WA

11

Page 12: EE458 - Embedded Systems Lecture 3 – Embedded Devel.richardson/courses/EE458_Real_Tim… · Lecture 3 – Embedded Devel. Outline – Developing for Embedded Systems – C File

Developing for Embedded Systems

● Sections of the image can be mapped to particular areas of memory by using MEMORY and SECTION 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

Page 13: EE458 - Embedded Systems Lecture 3 – Embedded Devel.richardson/courses/EE458_Real_Tim… · Lecture 3 – Embedded Devel. Outline – Developing for Embedded Systems – C File

Developing for Embedded Systems

13

Target System Memory Map

Page 14: EE458 - Embedded Systems Lecture 3 – Embedded Devel.richardson/courses/EE458_Real_Tim… · Lecture 3 – Embedded Devel. Outline – Developing for Embedded Systems – C File

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 linker scripts. (You would need to create linker scripts when porting RTEMS to a new BSP.)

14

Page 15: EE458 - Embedded Systems Lecture 3 – Embedded Devel.richardson/courses/EE458_Real_Tim… · Lecture 3 – Embedded Devel. Outline – Developing for Embedded Systems – C File

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 stdio (or FILE) streams.

15

Page 16: EE458 - Embedded Systems Lecture 3 – Embedded Devel.richardson/courses/EE458_Real_Tim… · Lecture 3 – Embedded Devel. Outline – Developing for Embedded Systems – C File

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

Page 17: EE458 - Embedded Systems Lecture 3 – Embedded Devel.richardson/courses/EE458_Real_Tim… · Lecture 3 – Embedded Devel. Outline – Developing for Embedded Systems – C File

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, stderr.#include <stdio.h>

fprintf(stdout, “Sum is %d\n”, total);

17

Page 18: EE458 - Embedded Systems Lecture 3 – Embedded Devel.richardson/courses/EE458_Real_Tim… · Lecture 3 – Embedded Devel. Outline – Developing for Embedded Systems – C File

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 % character.fprintf(stdout, “Name: %s %s\n”, fname, lname);

fprintf(stdout, “Age: %d\n”, age);

printf(“Volt=%f, Current=%f\n”, v, i);

18

Page 19: EE458 - Embedded Systems Lecture 3 – Embedded Devel.richardson/courses/EE458_Real_Tim… · Lecture 3 – Embedded Devel. Outline – Developing for Embedded Systems – C File

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 ADDRESS 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

Page 20: EE458 - Embedded Systems Lecture 3 – Embedded Devel.richardson/courses/EE458_Real_Tim… · Lecture 3 – Embedded Devel. Outline – Developing for Embedded Systems – C File

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 ASCII. sscanf() can be used to read variables from a char array.

20

Page 21: EE458 - Embedded Systems Lecture 3 – Embedded Devel.richardson/courses/EE458_Real_Tim… · Lecture 3 – Embedded Devel. Outline – Developing for Embedded Systems – C File

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 fflush().

● 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