720 likes | 844 Views
2G1502 Datorteknik allmän kurs. Föreläsning 4 Programutveckling Något om busar. Litteraturhänvisningar. Kursboken avsnitt 1.5 avsnitt 8.1-8.3 avsnitt 4.6 delar av avsnitt 5.2 eventuellt 9.3 och 9.4. Steg i programutveckling. Editering av program i C-kod (liknande)
E N D
2G1502 Datorteknik allmän kurs Föreläsning 4 Programutveckling Något om busar 2G1502, föreläsning 4 för E vt 2003
Litteraturhänvisningar • Kursboken avsnitt 1.5 • avsnitt 8.1-8.3 • avsnitt 4.6 • delar av avsnitt 5.2 • eventuellt 9.3 och 9.4 2G1502, föreläsning 4 för E vt 2003
Steg i programutveckling • Editering av program i C-kod (liknande) • Kompilering av C-kod till Assemlerkod • Editering av programkod i assembler • Assemblering av Ass.kod till Objekt-modul • Länkning:Objekt-modul(er) -> Laddmodul • Laddning av Laddmodul till Minne • Exekvering (körning) av program 2G1502, föreläsning 4 för E vt 2003
EditeringExempel på C-kod /* typexempel på program skrivet i c-kod */ #include (nios.h) #define plussa = sum /* macrodefinition */ int TIME = 0x5959; /* globala initierade variabler */ int a, b, c; /* globala oinitierade variabler */ int sum (int par1, par2) /* functions definition */int tmp; /* lokal variabel */{ tmp = par1 + par 2; return (tmp) } main () int talA talB, talC; /* lokala variabler i main */ { /* själva programkoden i huvudprogrammmet /* ... talC = plussa (talA, talB) /* anrop av function */ printf(…) ... } 2G1502, föreläsning 4 för E vt 2003
C-program Text-fil EditeringRedigering av C-kod fil.c, kan redigeras med en editor 2G1502, föreläsning 4 för E vt 2003
Ass-program Text-fil C-program Text-fil Kompilering; översätter C-kod till Assembler-kod Kommando: icomp fil.c fil.c, kan redigeras med en editor kompilering / översättning fil.asm, kan redigeras med en editor (fil.s) 2G1502, föreläsning 4 för E vt 2003
EditeringExempel på Assembler-kod .include "nios.s" .data TIME: .word 0x5959 .text .global main .global puttime, tick, delay main: start: movia %o0, TIME bsr puttime nop movia %O0, TIME bsr tick nop movia %o0, 1000 bsr delay nop br start nop puttime:lret nop tick: lret nop delay: lret nop .end 2G1502, föreläsning 4 för E vt 2003
Object-modul ”Text-fil” Ass-program Text-fil Assemblering; översätterAss-kod till objekt-modul Kommando: iasm fil.asm fil.asm Assemblering / översättning fil.obj, relokerbar ? 2G1502, föreläsning 4 för E vt 2003
Exempel på objekt-modulfil.obj Denna fil kan inte öpnas med en vanlig editor. Det är rimligt att diskutera vilken information som måste finnas i en fil.obj …(liksom i en fil.lda) SVAR: All information som behövs för att länka ihop denna modul med andra objektmoduler för att kunna skapa en ladd-modul Exempel på information .data information om vilka variabelplatser som ska reserveras för oinitierade variabler räcker det att ange namn och storlek för initierade variabler krävs även värdet .text Varje instruktion kodas i maskinkod dvs hexadecimal eller binär kod Varje symbolisk adress ges ett relativt värde. Symboliska namn som ej kan ges värde lokalt bokförs i en ”global” symboltabell som kompletteras vid länkningen. Koden görs relokerbar dvs ... .global De symboler som deklararerats som global vet man ska användas vid länkningen, och man förbereder arbetet genom att placera dessa i en speciell symboltabell 2G1502, föreläsning 4 för E vt 2003
Object-modul ”Text-fil” Ladd-modul ”Text-fil” Länkning; ”knådar”Object-modul(er) till Laddmodul fil.obj Kommando: ilink fil.obj Länkning fil.load 2G1502, föreläsning 4 för E vt 2003
Object-modul ”Text-fil” Object-dump Text-fil Ladd-modul ”Text-fil” Länkning; ”knådar”Object-modul(er) till dump-info Kommando: ilink fil.obj fil.obj Extra fil fil.dump fil.load 2G1502, föreläsning 4 för E vt 2003
Exempel på fil.dump(endast alla rader) F4OH.load: file format elf32-nios Disassembly of section .text: 00040000 <main>: 40000: 01 98 pfx %hi(0x20) 40002: 88 36 movi %o0,0x14 40004: 00 98 pfx %hi(0x0) 40006: 88 6c movhi %o0,0x4 40008: 0f 88 bsr 40028 <puttime> 4000a: 00 30 nop 4000c: 01 98 pfx %hi(0x20) 4000e: 88 36 movi %o0,0x14 40010: 00 98 pfx %hi(0x0) 40012: 88 6c movhi %o0,0x4 40014: 0b 88 bsr 4002c <tick> 40016: 00 30 nop 40018: 1f 98 pfx %hi(0x3e0) 4001a: 08 35 movi %o0,0x8 4001c: 00 98 pfx %hi(0x0) 4001e: 08 6c movhi %o0,0x0 40020: 07 88 bsr 40030 <delay> 40022: 00 30 nop 40024: ed 87 br 40000 <na_ext_ram> 40026: 00 30 nop (forts.) (forts.) 00040028 <puttime>: 40028: cf 7f lret 4002a: 00 30 nop 0004002c <tick>: 4002c: cf 7f lret 4002e: 00 30 nop 00040030 <delay>: 40030: cf 7f lret 40032: 00 30 nop Disassembly of section .data: 00040034 <_data>: 40034: 59 59 ld %i1,[%o2] ... 2G1502, föreläsning 4 för E vt 2003
Object-modul ”Text-fil” Object-dump Text-fil Ladd-modul ”Text-fil” srec-dump Text-fil Länkning; ”knådar”Object-modul(er) till srec-fil Kommando: ilink fil.obj fil.obj En till Extra fil fil.srec fil.dump fil.load 2G1502, föreläsning 4 för E vt 2003
Fil i srec-format lämplig att dumpa via serieport till måldator. Exempel på fil i srec-format S00C000046344F482E7372656307 S219040000019888360098886C0F880030019888360098886C0B4A S2190400158800301F9808350098086C07880030ED870030CF7F64 S20E04002A0030CF7F0030CF7F003097 S208040034595900000D S804040000F7 2G1502, föreläsning 4 för E vt 2003
Exempel på srec-formattaget från fil.srec S00C000046344F482E7372656307 S219040000019888360098886C0F880030019888360098886C0B4A S2190400158800301F9808350098086C07880030ED870030CF7F64 S20E04002A0030CF7F0030CF7F003097 S208040034595900000D S804040000F7 5 fält Record Type: S0, S2, S8 Record Length: 2 char (1 byte) tells number of char on line excluding type and length Address:2-, 3-, or 4-byte spec of address (type tells size of address) Data: Checksum: 8-bit field: 1’s complement of sum of all except Type S0: Header S2: data with 3-byte address S8: Termination of S2-records Checksumman F7 kan fås ur inversen av 04+04+00+00=08 inv blir F7 0000 1000 = 1111 0111 2G1502, föreläsning 4 för E vt 2003
Object-modul ”Text-fil” Object-dump Text-fil Ladd-modul ”Text-fil” srec-dump Text-fil Sym-table Text-fil Länkning; ”knådar”Object-modul(er) till Laddmodul Kommando: ilink fil.obj fil.obj En till Extra fil fil.nm fil.srec fil.dump fil.load 2G1502, föreläsning 4 för E vt 2003
Exempel på fil.nm(endast vissa rader) … 00040000 A na_ext_ram 00040000 A nasys_data_mem 00040000 A nasys_program_mem 00040000 T main 00040000 t start 00040028 T puttime 0004002c T tick 00040030 T delay … 00040034 D _data 00040034 d TIME ... 2G1502, föreläsning 4 för E vt 2003
Object-modul ”Text-fil” Object-dump Text-fil Ladd-modul ”Text-fil” srec-dump Text-fil Sym-table Text-fil Debugger Scrift-fil Länkning; ”knådar”Object-modul(er) till Laddmodul Kommando: ilink -d fil.obj En till Extra fil fil.obj fil.gdb fil.nm fil.srec fil.dump fil.load 2G1502, föreläsning 4 för E vt 2003
Object-modul ”Text-fil” Object-modul ”Text-fil” Object-modul ”Text-fil” Object-modul ”Text-fil” Ladd-modul ”Text-fil” filn.obj fil1.obj fil2.obj fil3.obj Länkning; ”knådar”Object-modul(er) till Laddmodul . . . Länkning fil.load, vilket namn? fil1.load Kommando: ilink fil1.obj fil2.obj fil3.obj … filn.obj 2G1502, föreläsning 4 för E vt 2003
Object-modul ”Text-fil” Object-modul ”Text-fil” Object-modul ”Text-fil” Object-modul ”Text-fil” Ladd-modul ”Text-fil” lib1.obj lib2.obj fil1.obj fil2.obj in-länkning av biblioteksfiler Biblioteksfiler . . . Länkning fil.load, vilket namn? fil1.load eller filn.load eller ??? Kommando: ilink fil1.obj … filn.obj, lib1.obj, lib2.obj 2G1502, föreläsning 4 för E vt 2003
Object-modul ”Text-fil” Object-modul ”Text-fil” Object-modul ”Text-fil” Object-modul ”Text-fil” Ladd-modul ”Text-fil” Ladd-modul ”fil.srec” filn.obj fil3.obj fil1.obj fil2.obj . . . Länkning fil1.load fil1.srec 2G1502, föreläsning 4 för E vt 2003
Ladd-modul ”fil.srec” Minne LaddningLaddmodul laddas till minnet fil.srec Laddning Kommando: iload fil.load Var i minnet ? 2G1502, föreläsning 4 för E vt 2003
+2 PC Minne Körning / ExekveringProgrammet körs av CPU:n Var i minnet ? Körning / Exekvering Kommando: ??? iloadrun fil.srec 2G1502, föreläsning 4 för E vt 2003
+2 PC Minne DebuggingProgrammet körs av CPU:n Var i minnet ? Kommandon: ? Debugging Starta program på viss adress Stoppa program Stegvis exekvering en instruktion i taget Undersöka innehåll i register och minne (och variabler) Brytpunkter; införa - ta bort RESET medför nollställ PC (och sudda RWM !!!) CLEAR medför nollställ PC (RWM suddas ej) 2G1502, föreläsning 4 för E vt 2003
Fil-administration • Alternativ 1: Många filer som separatkompileras och länkas ihop till en laddmodul • Alternativ 2: Många filer som kombineras med ”include”-satser tillEn enda jättefil som kompileras 2G1502, föreläsning 4 för E vt 2003
Object-modul ”Text-fil” Object-modul ”Text-fil” Object-modul ”Text-fil” Object-modul ”Text-fil” Ass-program Text-fil Ass-program Text-fil Ass-program Text-fil Ass-program Text-fil Ladd-modul ”Text-fil” C-program Text-fil C-program Text-fil C-program Text-fil C-program Text-fil Fördel? Dela upp arbetet i delar Snabb (del-) kompilering Nackdel? Långa kommandon 2G1502, föreläsning 4 för E vt 2003
Object-modul ”Text-fil” Ass-program Text-fil Ladd-modul ”Text-fil” C-program Text-fil C-program Text-fil C-program Text-fil C-program Text-fil ”include” Fördel? Dela upp arbetet i delar Nackdel? Onödigt arbete (tid) vid kompilering 2G1502, föreläsning 4 för E vt 2003
Object-modul ”Text-fil” Ass-program Text-fil Ass-program Text-fil Ass-program Text-fil Ass-program Text-fil Ladd-modul ”Text-fil” ”include” 2G1502, föreläsning 4 för E vt 2003
Pascal-program Text-fil JAVA-program Text-fil Object-modul ”Text-fil” Object-modul ”Text-fil” Object-modul ”Text-fil” Object-modul ”Text-fil” Ass-program Text-fil Ass-program Text-fil Ass-program Text-fil Ass-program Text-fil Ladd-modul ”Text-fil” C-program Text-fil 2G1502, föreläsning 4 för E vt 2003
; huvudprogram a: .word 0 b: .word 0 res: .word 0 … .global main .global sum main: copy reg0, a copy reg1, b bsr sum nop copy res, reg /* Main File */ Int a, b, res int sum (inta, intb) external; … res = sum (a,b); /* Function File */ int sum (int x, int y) external { return x + y; } ; subroutine .global sum … sum: add reg0, reg1 return Blandad kodC-kod och Assembler-kod 2G1502, föreläsning 4 för E vt 2003
Object-modul ”Text-fil” Object-modul ”Text-fil” Ass-program Text-fil Ass-program Text-fil Ladd-modul ”Text-fil” res=sum(a,b) int sum(x,y) function huvudprogram Kompilering Assemblering Länkning 2G1502, föreläsning 4 för E vt 2003
Object-modul ”Text-fil” Object-modul ”Text-fil” Ass-program Text-fil Ladd-modul ”Text-fil” sum: save ... res=sum(a,b) huvudprogram subrutin Kompilering Assemblering Länkning 2G1502, föreläsning 4 för E vt 2003
Object-modul ”Text-fil” Object-modul ”Text-fil” Ass-program Text-fil Ladd-modul ”Text-fil” bsr sum nop int sum(x,y) function huvudprogram Kompilering Assemblering Länkning 2G1502, föreläsning 4 för E vt 2003
Object-modul ”Text-fil” Object-modul ”Text-fil” Ladd-modul ”Text-fil” sum: save ... bsr sum nop subrutin huvudprogram Assemblering Länkning 2G1502, föreläsning 4 för E vt 2003
Memory Map - Minnesbild • Adressrymd • Hur stor är adressrymden • Vilka adresser används och till vad • RWM, ROM, IO etc 2G1502, föreläsning 4 för E vt 2003
RWM-minne (RAM-minnet) • Hur stort (fysiskt) RWM-minne finns det • På vilka adresser finns RWM • Var finns det egna programmet • Var finns de egna data • Var finns den egna stacken • Finns det något mer i RWM, och vad 2G1502, föreläsning 4 för E vt 2003
+2 PC SP Kartbild av minnet 7 0 0x40000 adress 0 code data RWM stack Vad finns här ? Vad finns här ? 0x7FFFF adress 2n -1 2G1502, föreläsning 4 för E vt 2003
Kartbild av minnet • Adress MEM / IO • 0 - 3FF boot_monitor_rom • 400-41F uart_0 • 40000-7FFFF ext_ram, 256 kByte 2G1502, föreläsning 4 för E vt 2003
Assembler-direktiv • .include ”fil.ext” ;infogar fil.ext • .dat a ;nu kommer datareservationer • .text ;programkod • .global main ;main blir synlig globalt • .align 2 ;nästa adress ska vara delbar med 2 • .align 4 ;nästa adress ska vara delbar med 4 • B: .string ”hej 17” ;här lagras ASCII • TAL: .byte 0x01 ;reservera 1 byte värd 0x01 • .equ VecBase (0x0007FF00) ;def. symbol namn 2G1502, föreläsning 4 för E vt 2003
Föreläsning 4Innehåll, rubriker del 2 • Bus Data Transfer, Read och Write • Memory Read, Memory Write • Adressering, adressavkodare • I/O-enheter • Parallellport • Serieport 2G1502, föreläsning 4 för E vt 2003
Viktiga delar i en dator CPU BUS I/O MEM 2G1502, föreläsning 4 för E vt 2003
FETCH (update PC) (decode) EXECUTE Programexekveringi två steg 2G1502, föreläsning 4 för E vt 2003
Viktiga delar vidBus Data Transfer MASTER BUS SLAVE 2G1502, föreläsning 4 för E vt 2003
Bus Data TransferMemory Read • Master, t.ex. CPU • Slave, t.ex. Memory • Master levererar Adress • Master levererar Rd-Request • Slave levererar Data • Slave levererar en Rd-Acknowledge 2G1502, föreläsning 4 för E vt 2003
Bus Data TransferMemory Read Address Rd Data RdAck Vad händer om RdAck uteblir ? 2G1502, föreläsning 4 för E vt 2003
Bus Data TransferMemory Write • Master, t.ex. CPU • Slave t.ex. Memory • Master levererar Adress • Master levererar Data • Master levererar Wr-Request • Slave levererar en Wr-Acknowledge 2G1502, föreläsning 4 för E vt 2003
Bus Data TransferMemory Write Address Wr Data WrAck Vad händer om WrAck uteblir ? 2G1502, föreläsning 4 för E vt 2003
Två SLAVE kan man ha !På olika adresser ! MASTER BUS SLAVE SLAVE 2G1502, föreläsning 4 för E vt 2003
Två minnen kan man ha !På olika adresser ! CPU BUS ? ? MEM MEM Adress ditten Adress datten Adress-avkodare 2G1502, föreläsning 4 för E vt 2003
Flera Slave kan man ha !På olika adresser ! CPU BUS ? ? I/O MEM Adress ditten Adress datten Adress-avkodare 2G1502, föreläsning 4 för E vt 2003