PowerPoint-presentatie

advertisement
2007-2008 PEMSY1
http://www.voti.nl/hvu/PEMSY1
Wouter van Ooijen
Mail: [email protected]
Sheets en info:
www.voti.nl/hvu/PEMSY1
Onderwerp: Programmeren van een Embedded Systeem
Literatuur:
ARM system on chip architecture
S.B. Furber
Addison Wesley Longman
0-201-67519-6
Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology
1
2007-2008 PEMSY1
http://www.voti.nl/hvu/PEMSY1
2
instructie aan de hand van sheets
boek als ondersteuning
opgaves, in de les of thuis maken
ARM V3.2 bordje aanschaffen (€ 60), wordt in
volgende vak(ken) weer gebruikt
 tentamen




2007-2008 PEMSY1
http://www.voti.nl/hvu/PEMSY1
3
 inleiding embedded/real-time/microcontrollers
 eerste uitleg ARM assembly language
 oefeningen ARM assembler met de simulator
2007-2008 PEMSY1
http://www.voti.nl/hvu/PEMSY1
4
steeds meer transistoren op een chip...
losse transistor
analoge ICs
logica
micro processor
micro controller
programmeerbare
logica
‘super’
microprocessor
klant-specifieke
logica
uC als IP
2007-2008 PEMSY1
http://www.voti.nl/hvu/PEMSY1
5
meestal:
 ‘computer-achtig’ ding
 geschikt voor real-time
 geschikt voor embedded gebruik
 combinatie van processor, ROM, RAM, I/O, ...
 compact
 goedkoop
 zuinig
2007-2008 PEMSY1
http://www.voti.nl/hvu/PEMSY1
 ergens in,
deel van een geheel
 vaste functie,
dus niet vrij programmeerbaar
6
2007-2008 PEMSY1
niet:
 snel
 zo snel mogelijk
 interactief, batch
wel:
 op tijd!
http://www.voti.nl/hvu/PEMSY1
7
2007-2008 PEMSY1
http://www.voti.nl/hvu/PEMSY1
nut
responstijd
8
2007-2008 PEMSY1
http://www.voti.nl/hvu/PEMSY1
ultra-goedkoop
chinees, inclusief de documentatie
lastig verkrijgbaar
general-purpose
PIC, Atmel, 8051, 68HC
high-end
ARM, PowerPC
special purpose
DSP, ethernet, USB, analoog, ...
9
2007-2008 PEMSY1






IP
kale chip
chip in behuizing
module
PCB
box (bv PLC)
http://www.voti.nl/hvu/PEMSY1
10
2007-2008 PEMSY1
http://www.voti.nl/hvu/PEMSY1
bijna altijd cross-development:
 jij werkt op een PC
 daar draait je editor, compiler,
assembler, linker
 loader of programmer om te laden
 evt. In-Circuit Debugger
 luxer: ICE
 primitiever: burn and crash
11
2007-2008 PEMSY1
http://www.voti.nl/hvu/PEMSY1
C (of een andere HLL): grof
 makkelijk en snel
 reduceert de ontwikkelkosten
Assembler: nauwkeurig
 moeilijker, specifiek, meer werk
 reduceert de hardware kosten
12
2007-2008 PEMSY1
http://www.voti.nl/hvu/PEMSY1
13
 vaak het meeste in C
 kritische delen soms in assembler
 kennis van assembler is nuttig voor efficient
gebruik van een controller, ook in C !
 het zal je maar gebeuren:
een bug in je compiler...
2007-2008 PEMSY1
http://www.voti.nl/hvu/PEMSY1
CISC
 doe zo veel mogelijk per instructie
 codeer instructies compact
RISC
 voer zoveel mogelijk instructies uit
 codeer instructies simpel
14
2007-2008 PEMSY1








http://www.voti.nl/hvu/PEMSY1
1983 : een opvolger voor the BEEP
uit pure noodzaak: RISC, klein
Acorn RISC Machine
zuinig (veel MIPS per Watt)
krachtig
beschikbaar als chip, maar ook als IP
interne of externe bus
MAC
15
2007-2008 PEMSY1
http://www.voti.nl/hvu/PEMSY1
ARM
Advanced RISC Machines
• load store architecture
• fixed length 32-bit instructions
• 3-address instruction formats
• many instructions execute in one cycle
• instructions are conditionally executed
16
2007-2008 PEMSY1
http://www.voti.nl/hvu/PEMSY1
17
registers en geheugen
R0
0000 0000
R1
0000 0001
R2
0000 0002
R3
0000 0003
R4
0000 0004
R5
0000 0005
R6
0000 0006
R7
0000 0007
R8
0000 0008
R9
0000 0009
R10
…….
R11
FFFF FFFB
R12
FFFF FFFC
R13 = SP
FFFF FFFD
R14 = LR
FFFF FFFE
R15 = PC
FFFF FFFF
registers
ARM processor
geheugen
chip
2007-2008 PEMSY1
18
http://www.voti.nl/hvu/PEMSY1
ARM User Programming model
31
0
r0
r1
r2
r3
r4
r5
r6
r7
31
0
r8
r9
r10
r11
r12
r13
r14
r15 (PC)
0
31
CPSR
Status register
NZCV
r13: stack pointer
r14: link register
2007-2008 PEMSY1
http://www.voti.nl/hvu/PEMSY1
Data Movement – load a constant value
LDR destination, =value
• Examples:
– LDR
r0, =10
– LDR
r1, =’a’
– LDR
r2, =buffer
 Let op: het boek gebruikt ADR R2, buffer
 Geen # betekent: er volgt een label
 Dit is geen ‘echte’ ARM instructie
 Destination moet een register zijn
19
2007-2008 PEMSY1
http://www.voti.nl/hvu/PEMSY1
LDR R0, =value
R0
0000 0000
R1
0000 0001
R2
0000 0002
R3
0000 0003
R4
0000 0004
R5
0000 0005
R6
0000 0006
R7
0000 0007
R8
0000 0008
R9
0000 0009
R10
…….
R11
FFFF FFFB
R12
FFFF FFFC
R13 = SP
FFFF FFFD
R14 = LR
FFFF FFFE
R15 = PC
FFFF FFFF
registers
geheugen
20
2007-2008 PEMSY1
http://www.voti.nl/hvu/PEMSY1
Data Movement – load from a register
MOV destination, source
• Examples:
– MOV
– MOV
– MOV
r0, r1
r1, r2
r2, r3
21
2007-2008 PEMSY1
http://www.voti.nl/hvu/PEMSY1
MOV R0, R1
R0
0000 0000
R1
0000 0001
R2
0000 0002
R3
0000 0003
R4
0000 0004
R5
0000 0005
R6
0000 0006
R7
0000 0007
R8
0000 0008
R9
0000 0009
R10
…….
R11
FFFF FFFB
R12
FFFF FFFC
R13 = SP
FFFF FFFD
R14 = LR
FFFF FFFE
R15 = PC
FFFF FFFF
registers
geheugen
22
2007-2008 PEMSY1
http://www.voti.nl/hvu/PEMSY1
Data Movement – load from memory
LDR destination, [ source_pointer ]
• Examples:
– LDR
r1, [ r3 ]
23
2007-2008 PEMSY1
http://www.voti.nl/hvu/PEMSY1
LDR R0, [ R1 ]
R0
R1
0000 0000
000 0004
0000 0001
R2
0000 0002
R3
0000 0003
R4
0000 0004
R5
0000 0005
R6
0000 0006
R7
0000 0007
R8
0000 0008
R9
0000 0009
R10
…….
R11
FFFF FFFB
R12
FFFF FFFC
R13 = SP
FFFF FFFD
R14 = LR
FFFF FFFE
R15 = PC
FFFF FFFF
registers
geheugen
24
2007-2008 PEMSY1
http://www.voti.nl/hvu/PEMSY1
Data Movement – save to memory
STR destination, [ destination_pointer ]
• Examples:
– STR
r1, [ r3 ]
25
2007-2008 PEMSY1
http://www.voti.nl/hvu/PEMSY1
STR R0, [ R1 ]
R0
R1
0000 0000
FFFF FFFC
0000 0001
R2
0000 0002
R3
0000 0003
R4
0000 0004
R5
0000 0005
R6
0000 0006
R7
0000 0007
R8
0000 0008
R9
0000 0009
R10
…….
R11
FFFF FFFB
R12
FFFF FFFC
R13 = SP
FFFF FFFD
R14 = LR
FFFF FFFE
R15 = PC
FFFF FFFF
registers
geheugen
26
2007-2008 PEMSY1
http://www.voti.nl/hvu/PEMSY1
27
Data processing Instructions
• Largest group of instructions, all sharing the same instruction format.
• Contains:
–
–
–
–
Arithmetic operations
Comparisons (no results - just set condition codes)
Logical operations
Data movement between registers
• Remember, this is a load / store architecture
– These instruction only work on registers, NOT memory.
• They each perform a specific operation on one or two operands.
– First operand always a register - Rn
2007-2008 PEMSY1
http://www.voti.nl/hvu/PEMSY1
Arithmetic Operations
• Operations are:
–
–
–
–
–
–
ADD
ADC
SUB
SBC
RSB
RSC
operand1 + operand2
operand1 + operand2 + carry
operand1 - operand2
operand1 - operand2 + carry -1
operand2 - operand1
operand2 - operand1 + carry - 1
• Syntax:
– <Operation> Rd, Rn, Operand2
• Examples
– ADD r0, r1, r2
– SUBGT r3, r3, #1
– RSBLES r4, r5, #5
28
2007-2008 PEMSY1
http://www.voti.nl/hvu/PEMSY1
29
Logical Operations
• Operations are:
–
–
–
–
AND
EOR
ORR
BIC
operand1 AND operand2
operand1 EOR operand2
operand1 OR operand2
operand1 AND NOT operand2 [ie bit clear]
• Syntax:
– <Operation> Rd, Rn, Operand2
• Examples:
– AND
– BICEQ
– EORS
r0, r1, r2
r2, r3, #7
r1,r3,r0
2007-2008 PEMSY1
http://www.voti.nl/hvu/PEMSY1
ADD R3, R1, R2
R0
0000 0000
R1
0000 0001
R2
0000 0002
R3
R4
R5
+
0000 0003
0000 0004
0000 0005
R6
0000 0006
R7
0000 0007
R8
0000 0008
R9
0000 0009
R10
…….
R11
FFFF FFFB
R12
FFFF FFFC
R13 = SP
FFFF FFFD
R14 = LR
FFFF FFFE
R15 = PC
FFFF FFFF
registers
geheugen
30
2007-2008 PEMSY1
http://www.voti.nl/hvu/PEMSY1
copieer de files uit empty.zip
 in een lege directory
 let op: geen spaties in de pathname 
 dubbel-klik op de .ppr file
 edit je main.s
 build (ctrl-F9)
 start debugger (F9)
31
2007-2008 PEMSY1
http://www.voti.nl/hvu/PEMSY1
.global main
LABEL1:
LABEL2:
X:
Y:
Z:
.word 10
.word 11
.word 12
.word 13
.word 14
.align
@ begin main
main:
@ hier komt je code
@ einde main
klaar:
b klaar
32
2007-2008 PEMSY1
http://www.voti.nl/hvu/PEMSY1
na starten van de debugger zet je onder file >
target settings:
 Target = Simulator
(als je netjes afsluit blijft zou dit moeten blijven staan)
33
2007-2008 PEMSY1
http://www.voti.nl/hvu/PEMSY1
(evt. kan je breakpoints zetten of verwijderen)
 run
als het goed is kom je nu op een breakpoint
aan het begin van main
34
2007-2008 PEMSY1
http://www.voti.nl/hvu/PEMSY1
Loop nu instructie voor instructie door je
programma heen (step)
Let op wat er veranderd in de regsiters en
(uiteindelijk) in het geheugen
35
2007-2008 PEMSY1
http://www.voti.nl/hvu/PEMSY1
Maak de registers en een stuk geheugen
zichtbaar
36
2007-2008 PEMSY1
http://www.voti.nl/hvu/PEMSY1
37
2007-2008 PEMSY1
http://www.voti.nl/hvu/PEMSY1
- Doe twee stappen,
- kijk in R1 waar in het geheugen getal_1
terecht is gekomen
- Laat je geheugen venster daarheen wijzen
38
2007-2008 PEMSY1
http://www.voti.nl/hvu/PEMSY1
Doen – thuis lezen
lees
3.1 t/m blz 52
3.2 t/m blz 58 halverwege
39
2007-2008 PEMSY1
http://www.voti.nl/hvu/PEMSY1
40
Doen - hier oefenen
1.
Schrijf en test een programma dat de waarden in R0 en R1 verwisselt.
Je hebt een extra register nodig.
2.
Schrijf en test een programma dat de waarden in de geheugenlocaties
X en Y optelt, en het resultaat in geheugenlocatie Z zet.
3.
Schrijf en test een programma dat de waarden in de geheugenlocaties
LABEL1 en LABEL2 verwisselt.
Let goed op het verschil tussen een label en de inhoud van het geheugen op
de plek van dat label.
Download