Upload
vonhi
View
222
Download
1
Embed Size (px)
Citation preview
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 ©Programmieren
Agenda
□ Ziel der Vorlesung
□ C Program → Speicher-Abbild
□ LPC 2148 Speicher-Abbild
□ Scatter Loading
□ Initialisierung & C Library
□ Tool Chain und File Formate
Sicheres ©Programmieren
Ziel der Vorlesung
Agenda : Ziel der VorlesungC Program → Speicher-AbbildLPC 2148 Speicher-AbbildScatter LoadingInitialisierung & C LibraryTool Chain und File Formate
Sicheres ©Programmieren
Ziel der Vorlesung
□ Verständnis wie ein C Programm im Embedded Mikrocontroller Arbeitsspeicher aufgeteilt wird
□ Program Initialisierung + C Library
Sicheres ©Programmieren
C Program → Speicher-Abbild
Agenda : Ziel der VorlesungC Program → Speicher-AbbildLPC 2148 Speicher-AbbildScatter LoadingInitialisierung & C LibraryTool Chain und File Formate
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
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
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
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
Sicheres ©Programmieren
LPC 2148 Speicher-Abbild
Agenda : Ziel der VorlesungC Program → Speicher-AbbildLPC 2148 Speicher-AbbildScatter LoadingInitialisierung & C LibraryTool Chain und File Formate
Sicheres ©ProgrammierenLPC 2148 Speicher-Abbild I
On Chip Speicher
Sicheres ©ProgrammierenLPC 2148 Speicher-Abbild II
Speicher ↔ Adressen [2]
[2] LPC214x User Manual
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
Sicheres ©Programmieren
Scatter Loading
Agenda : Ziel der VorlesungC Program → Speicher-AbbildLPC 2148 Speicher-AbbildScatter LoadingInitialisierung & C LibraryTool Chain und File Formate
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
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
Sicheres ©Programmieren
Initialisierung & C Library
Agenda : Ziel der VorlesungC Program → Speicher-AbbildNXP 2148 Speicher-AbbildScatter LoadingInitialisierung & C LibraryTool Chain und File Formate
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
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
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
Sicheres ©Programmieren
Tool Chain und File Formate
Agenda : Ziel der VorlesungC Program → Speicher-AbbildNXP 2148 Speicher-AbbildScatter LoadingReset & InitialisierungTool Chain und File Formate
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
Sicheres ©ProgrammierenToolchain und File Formate II
Ausführbare Program Generierung mit ARM Tools
Sicheres ©Programmieren
Fragen oder Anregungen ?