24
Sicheres © Programmieren Sicheres C Programmieren in Embedded Systemen ARM I (ARM7TMDI [1] ) Wintersemester 2010 - 2011 Dipl. Ing. (FH) Ebrecht Roland, Infineon Technologies AG M.Eng (Electronic Systems) Güller Markus, Infineon Technologies AG Dipl. Inf. (FH) Klein Sebastian, Fujitsu Technology Solutions GmbH [1] ARM Cores

Sicheres C Programmieren in Embedded Systemengueller/Kapitel_4_ARM/Sicheres C Programmieren in... · Sicheres C Programmieren in Embedded Systemen Author: mgueller Created Date: 11/6/2010

  • Upload
    vonhi

  • View
    222

  • Download
    1

Embed Size (px)

Citation preview

Page 1: Sicheres C Programmieren in Embedded Systemengueller/Kapitel_4_ARM/Sicheres C Programmieren in... · Sicheres C Programmieren in Embedded Systemen Author: mgueller Created Date: 11/6/2010

Sicheres ©Programmieren

Sicheres C Programmieren in Embedded Systemen

ARM I (ARM7TMDI [1]) Wintersemester 2010 - 2011

Dipl. Ing. (FH) Ebrecht Roland,Infineon Technologies AG

M.Eng (Electronic Systems) Güller Markus,Infineon Technologies AG

Dipl. Inf. (FH) Klein Sebastian,Fujitsu Technology Solutions GmbH

[1] ARM Cores

Page 2: Sicheres C Programmieren in Embedded Systemengueller/Kapitel_4_ARM/Sicheres C Programmieren in... · Sicheres C Programmieren in Embedded Systemen Author: mgueller Created Date: 11/6/2010

Sicheres ©Programmieren

Agenda

□ Ziel der Vorlesung

□ C Program → Speicher-Abbild

□ LPC 2148 Speicher-Abbild

□ Scatter Loading

□ Initialisierung & C Library

□ Tool Chain und File Formate

Page 3: Sicheres C Programmieren in Embedded Systemengueller/Kapitel_4_ARM/Sicheres C Programmieren in... · Sicheres C Programmieren in Embedded Systemen Author: mgueller Created Date: 11/6/2010

Sicheres ©Programmieren

Ziel der Vorlesung

Agenda : Ziel der VorlesungC Program → Speicher-AbbildLPC 2148 Speicher-AbbildScatter LoadingInitialisierung & C LibraryTool Chain und File Formate

Page 4: Sicheres C Programmieren in Embedded Systemengueller/Kapitel_4_ARM/Sicheres C Programmieren in... · Sicheres C Programmieren in Embedded Systemen Author: mgueller Created Date: 11/6/2010

Sicheres ©Programmieren

Ziel der Vorlesung

□ Verständnis wie ein C Programm im Embedded Mikrocontroller Arbeitsspeicher aufgeteilt wird

□ Program Initialisierung + C Library

Page 5: Sicheres C Programmieren in Embedded Systemengueller/Kapitel_4_ARM/Sicheres C Programmieren in... · Sicheres C Programmieren in Embedded Systemen Author: mgueller Created Date: 11/6/2010

Sicheres ©Programmieren

C Program → Speicher-Abbild

Agenda : Ziel der VorlesungC Program → Speicher-AbbildLPC 2148 Speicher-AbbildScatter LoadingInitialisierung & C LibraryTool Chain und File Formate

Page 6: Sicheres C Programmieren in Embedded Systemengueller/Kapitel_4_ARM/Sicheres C Programmieren in... · Sicheres C Programmieren in Embedded Systemen Author: mgueller Created Date: 11/6/2010

Sicheres ©ProgrammierenC Program → Speicher-Abbild I

Genereller Überblick

char bGlobal;

char bGlobIni=0x31;

..

void main(void)

{

..

char rgbLocal[32];

char *pHeap;

pHeap = malloc(10);

..}

CODESEGMENT oder TEXTSEGMENTProgrammcode in ausführbarer Form

DATENSEGMENT Variable der Speicherkl. extern, static

Initialisiert oder uninitialisiert

STACK SEGMENT (dynamisch)Variablen der Speicherklasse auto

[oder Prozessor Register]

HEAP SEGMENT (dynamisch)Freier Speicher

Page 7: Sicheres C Programmieren in Embedded Systemengueller/Kapitel_4_ARM/Sicheres C Programmieren in... · Sicheres C Programmieren in Embedded Systemen Author: mgueller Created Date: 11/6/2010

Sicheres ©ProgrammierenC Program → Speicher-Abbild II

ARM – ELF Format

char bGlobal;

char bGlobIni=0x31;

const char bC=0x32;

..

void main(void)

{

..

char rgbLocal[32];

char *pHeap;

pHeap = malloc(10);

..}

CODESEGMENT oder TEXTSEGMENTProgrammcode in ausführbarer Form

DATENSEGMENT Variable der Speicherkl. extern, static

Initialisiert oder uninitialisiertSpeicherkl. const bedeutet Read Only

STACK SEGMENT (dynamisch)Variablen der Speicherklasse auto

[oder Prozessor Register]

HEAP SEGMENT (dynamisch)Freier Speicher

RW SECTION .data DATA RW

ZI SECTION .bss ZERO RW

RO SECTION .text CODE RO

ZI SECTION STACK ZERO RW

ZI SECTION HEAP ZERO RW

□ ELF ordnet Sektionen nach Attribute → Zuerst RO dann RW dann ZI

□ Innerhalb eines Attributes kommen Code vor Daten

Page 8: Sicheres C Programmieren in Embedded Systemengueller/Kapitel_4_ARM/Sicheres C Programmieren in... · Sicheres C Programmieren in Embedded Systemen Author: mgueller Created Date: 11/6/2010

Sicheres ©ProgrammierenC Program → Speicher-Abbild III

Typisches Laufzeit Speicher Abbild

RO DATA (.constdata)RO CODE (.text)

RW DATA (.data)

ZI DATA (STACK)

ZI DATA (HEAP)

ZI DATA (.bss)

0x00000000

Stack Top__initial_sp

Heap Base

Page 9: Sicheres C Programmieren in Embedded Systemengueller/Kapitel_4_ARM/Sicheres C Programmieren in... · Sicheres C Programmieren in Embedded Systemen Author: mgueller Created Date: 11/6/2010

Sicheres ©ProgrammierenC Program → Speicher-Abbild IV

Memory Map FileExecution Region ER_IROM1 (Base: 0x00000000, Size: 0x000002f4, Max: 0x00010000, ABSOLUTE)

Base Addr Size Type Attr Idx E Section Name Object

0x00000000 0x00000108 Code RO 3 RESET startup.o

0x00000108 0x00000000 Code RO 41 * .ARM.Collect$$$$00000000 mc_4.l(entry.o)(mc_4.l)

0x0000011c 0x00000004 Code RO 45 .ARM.Collect$$$$00002712 mc_4.l(entry2.o)(mc_4.l)

0x00000120 0x000000a4 Code RO 8 .text serial.o

0x000001c4 0x000000a4 Code RO 24 .text main.o

0x00000268 0x00000030 Code RO 48 .text mc_4.l(init.o)(mc_4.l)

0x00000298 0x0000001c Code RO 52 i.__scatterload_copy mc_4.l(handlers.o)(mc_4.l)

0x000002b4 0x00000004 Code RO 53 i.__scatterload_null mc_4.l(handlers.o)(mc_4.l)

0x000002b8 0x00000018 Code RO 54 i.__scatterload_zeroinit mc_4.l(handlers.o)(mc_4.l)

0x000002d0 0x00000004 Data RO 26 .constdata main.o

0x000002d4 0x00000020 Data RO 50 Region$$Table anon$$obj.o

Execution Region RW_IRAM1 (Base: 0x40000000, Size: 0x000001c8, Max: 0x00008000, ABSOLUTE)

Base Addr Size Type Attr Idx E Section Name Object

0x40000000 0x00000020 Data RW 27 .data main.o

0x40000020 0x00000020 Zero RW 25 .bss main.o

0x40000040 0x00000188 Zero RW 1 STACK startup.o

Page 10: Sicheres C Programmieren in Embedded Systemengueller/Kapitel_4_ARM/Sicheres C Programmieren in... · Sicheres C Programmieren in Embedded Systemen Author: mgueller Created Date: 11/6/2010

Sicheres ©Programmieren

LPC 2148 Speicher-Abbild

Agenda : Ziel der VorlesungC Program → Speicher-AbbildLPC 2148 Speicher-AbbildScatter LoadingInitialisierung & C LibraryTool Chain und File Formate

Page 11: Sicheres C Programmieren in Embedded Systemengueller/Kapitel_4_ARM/Sicheres C Programmieren in... · Sicheres C Programmieren in Embedded Systemen Author: mgueller Created Date: 11/6/2010

Sicheres ©ProgrammierenLPC 2148 Speicher-Abbild I

On Chip Speicher

Page 12: Sicheres C Programmieren in Embedded Systemengueller/Kapitel_4_ARM/Sicheres C Programmieren in... · Sicheres C Programmieren in Embedded Systemen Author: mgueller Created Date: 11/6/2010

Sicheres ©ProgrammierenLPC 2148 Speicher-Abbild II

Speicher ↔ Adressen [2]

[2] LPC214x User Manual

Page 13: Sicheres C Programmieren in Embedded Systemengueller/Kapitel_4_ARM/Sicheres C Programmieren in... · Sicheres C Programmieren in Embedded Systemen Author: mgueller Created Date: 11/6/2010

Sicheres ©ProgrammierenLPC 2148 Speicher-Abbild III

Segmente ↔ Adressen

RO DATA (.constdata)RO CODE (.text)

RW DATA (.data)

ZI DATA (STACK)

ZI DATA (HEAP)

ZI DATA (.bss)

0x00000000

Page 14: Sicheres C Programmieren in Embedded Systemengueller/Kapitel_4_ARM/Sicheres C Programmieren in... · Sicheres C Programmieren in Embedded Systemen Author: mgueller Created Date: 11/6/2010

Sicheres ©Programmieren

Scatter Loading

Agenda : Ziel der VorlesungC Program → Speicher-AbbildLPC 2148 Speicher-AbbildScatter LoadingInitialisierung & C LibraryTool Chain und File Formate

Page 15: Sicheres C Programmieren in Embedded Systemengueller/Kapitel_4_ARM/Sicheres C Programmieren in... · Sicheres C Programmieren in Embedded Systemen Author: mgueller Created Date: 11/6/2010

Sicheres ©ProgrammierenScatter Loading I

Einführung [3]

□ Scatter Loading ist ein Mechanismus um Code und Daten im Speicher zu kontrollieren

□ „Streut“ Embedded Physikalischen Speicher im linearen Adressraum

□ Scatter Loading definiert zwei Klassen von Speicherregionen

□ Lade Region– Beinhaltet Code und Daten nach Reset bzw Laden– Typischerweise im Flash oder ROM

□ Laufzeit Region (Execution Environment)– Beinhaltet Code und Daten während der Program

Ausführung

[3] Using Scatter-loading Description Files

Page 16: Sicheres C Programmieren in Embedded Systemengueller/Kapitel_4_ARM/Sicheres C Programmieren in... · Sicheres C Programmieren in Embedded Systemen Author: mgueller Created Date: 11/6/2010

Sicheres ©ProgrammierenScatter Loading II

Beispiel

Lade Speicher Abbild Laufzeit Speicher Abbild

Startup Code__main

ZI DATA .bss ZERO RWinitialisiert

(RO) CODE .text CODE RO

RW DATA .data DATA RW

kopiert

beijedemReset

lädt

einmalig

LoaderISP

(RO) CODE .text CODE RO

RW DATA .data DATA RW

ZI DATA STACK ZERO RW

Page 17: Sicheres C Programmieren in Embedded Systemengueller/Kapitel_4_ARM/Sicheres C Programmieren in... · Sicheres C Programmieren in Embedded Systemen Author: mgueller Created Date: 11/6/2010

Sicheres ©Programmieren

Initialisierung & C Library

Agenda : Ziel der VorlesungC Program → Speicher-AbbildNXP 2148 Speicher-AbbildScatter LoadingInitialisierung & C LibraryTool Chain und File Formate

Page 18: Sicheres C Programmieren in Embedded Systemengueller/Kapitel_4_ARM/Sicheres C Programmieren in... · Sicheres C Programmieren in Embedded Systemen Author: mgueller Created Date: 11/6/2010

Sicheres ©ProgrammierenC Library

Funktionen der C Library [4]

□ Initialisierung derLaufzeitumgebung und starten derApplikation (main)

□ Initialisierung von Stack und Heap

□ Initialisierung referenzierter Library Funktionen

□ Standard C Library versus MicroLib[4] Building an application with the C library

Page 19: Sicheres C Programmieren in Embedded Systemengueller/Kapitel_4_ARM/Sicheres C Programmieren in... · Sicheres C Programmieren in Embedded Systemen Author: mgueller Created Date: 11/6/2010

Sicheres ©ProgrammierenReset & Initialisierung I

Beispiel

Lade Speicher Abbild Laufzeit Speicher Abbild

Startup Code

__main

ZI DATA .bss ZERO RWinitialisiert

(RO) CODE .text CODE RO

RW DATA .data DATA RW

kopiert

beijedemReset

lädt

einmalig

LoaderISP

(RO) CODE .text CODE RO

RW DATA .data DATA RW

ZI DATA STACK ZERO RW

Page 20: Sicheres C Programmieren in Embedded Systemengueller/Kapitel_4_ARM/Sicheres C Programmieren in... · Sicheres C Programmieren in Embedded Systemen Author: mgueller Created Date: 11/6/2010

Sicheres ©Programmieren

User Code

Reset & Initialisierung IIMicroLib Start Sequenz

__scatterload•[Kopiert Non Root Code]•Kopiert RW Data•Reset ZI Data•Springt zu main

Reset Handler•MAM Setup•PLL Setup•Setup Stack•Springt zu __main

main()

C Library (MicroLib)

__main (Entry)

__rt_entry

Page 21: Sicheres C Programmieren in Embedded Systemengueller/Kapitel_4_ARM/Sicheres C Programmieren in... · Sicheres C Programmieren in Embedded Systemen Author: mgueller Created Date: 11/6/2010

Sicheres ©Programmieren

Tool Chain und File Formate

Agenda : Ziel der VorlesungC Program → Speicher-AbbildNXP 2148 Speicher-AbbildScatter LoadingReset & InitialisierungTool Chain und File Formate

Page 22: Sicheres C Programmieren in Embedded Systemengueller/Kapitel_4_ARM/Sicheres C Programmieren in... · Sicheres C Programmieren in Embedded Systemen Author: mgueller Created Date: 11/6/2010

Sicheres ©ProgrammierenToolchain und File Formate I

Ausführbare Program Formate

□ Es gibt verschiedene Formate wie die Segmente im Arbeitsspeicher von executable und von object Files beschrieben werden [5]

□ Die Keil ARM Werkzeuge generieren das ARM Executable Format (AXF) based on Executable and LinkableFormat (ELF)

[5] Comparison of executable file formats

Page 23: Sicheres C Programmieren in Embedded Systemengueller/Kapitel_4_ARM/Sicheres C Programmieren in... · Sicheres C Programmieren in Embedded Systemen Author: mgueller Created Date: 11/6/2010

Sicheres ©ProgrammierenToolchain und File Formate II

Ausführbare Program Generierung mit ARM Tools

Page 24: Sicheres C Programmieren in Embedded Systemengueller/Kapitel_4_ARM/Sicheres C Programmieren in... · Sicheres C Programmieren in Embedded Systemen Author: mgueller Created Date: 11/6/2010

Sicheres ©Programmieren

Fragen oder Anregungen ?