Une image / un lien ci-dessous est fourni (tel quel) pour télécharger la présentation
Politique de téléchargement : le contenu du site vous est fourni TEL QUEL pour votre information et votre usage personnel ; il ne peut être vendu, concédé sous licence ni partagé sur d’autres sites sans l’accord de son auteur.Le contenu vous est fourni TEL QUEL, pour votre information et votre usage personnel uniquement.Téléchargez la présentation en cliquant sur ce lien.Lors du téléchargement, si vous ne parvenez pas à télécharger une présentation, l’éditeur a peut-être supprimé le fichier de son serveur.Pendant le téléchargement, si vous ne parvenez pas à obtenir une présentation, le fichier a peut-être été supprimé par l’éditeur.
F I N
Plus de contenu associé
Transcription de la présentation
IS1200 Datorteknik Föreläsning 4 Programutveckling, Intro till lab 1 Kursboken, kapitel 1, 4, 5 och 8 IS1200 Datorteknik, föreläsning 4
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 av Objekt-modul(er) -> Laddmodul • Laddning av Laddmodul till Minne • Exekvering (körning) av program • Simulering av program • Felsökning (debugging) av program IS1200 Datorteknik, föreläsning 4
EditeringExempel på C-kod #include “minfil.c” /* inkludera filer */ #define START_TIME 0x5957 /* makrodefinition */ int current_time = START_TIME; /* global initierad variabel */ int a, b, c; /* globala oinitierade variabler */ int sum (int par1, int par2) /* function definition */ { int tmp; /* lokal variabel i sum */ tmp = par1 + par2; return (tmp); } main () /* huvudprogram, main */ { int talA, talB, talC; /* lokala variabler i main */ /* själva programkoden i huvudprogrammmet */ ... talC = sum( talA, talB ); /* anrop av function */ ... } IS1200 Datorteknik, föreläsning 4
EditeringExempel på C-kod, lab1-ide’ #include “minfil.c” /* inkludera fil */ #define START_TIME 0x5957 /* makrodefinition */ #define TRUE 1 /* TRUE = 1 */ int current_time = START_TIME; /* global initierad variabel */ extern void puttime (int* time); /* underprogram, function, procedure, method */ extern void tick (int* time); extern void delay (int millisek); extern int hexasc (int hexval); main () /* huvudprogram, main */ { while (TRUE) /* forever */ { puttime (¤t_time); /* skriv ut aktuell tid i fönster */ tick (¤t_time); /* uppdatera current_time */ delay (1000); /* vänta 1000 millisekunder */ } } IS1200 Datorteknik, föreläsning 4
Pekare och adress(så där i förbifarten) int a; /* reservera plats */ int b=17; /* och initiera */ int* pek1; /* pekare till en int */ int* pek2 = &b; /* initiera */ /* &kalle utläses som ”adressen till kalle” */ a = *pek2; /* a tilldelas det värde som pek2 pekar på */ /* avreferering – dereferencing */ IS1200 Datorteknik, föreläsning 4
C-program Text-fil EditeringRedigering av C-kod fil.c, kan redigeras med en editor IS1200 Datorteknik, föreläsning 4
Ass-program Text-fil C-program Text-fil Kompilering: översätter C-kod till Assembler-kod Kommando: ”compile” fil.c (med debugger: ”compile -d” fil.c) fil.c kan redigeras med en editor kompilering / översättning fil.s kan redigeras med en editor IS1200 Datorteknik, föreläsning 4
EditeringExempel på Assembler-kod .include ”../minfil.s" .data .align 2 # nästa adress delbar med 4 mytime: .word 0x5957 .text .global main # måste tas med (gemener) # .global behövs ej för puttime, tick, delay main: movia r4, mytime # ”main:” måste finnas med movia r16, puttime callr r16 movia r4, mytime call tick movia r4, 1000 call delay br main puttime: ret # tom subrutin tick: ret # tom subrutin delay: ret # tom subrutin .end # sluta översätt IS1200 Datorteknik, föreläsning 4
Exempel på objekt-modulfil.obj Detta är en binär fil. Den är obegriplig om man öppnar den med en vanlig editor. Information i filen: .text Varje instruktion kodas i maskinkod, det vill säga binär kod Varje symbolisk adress ges ett värde. Symboliska namn som ej kan ges värde lokalt bokförs i en symboltabell som används och kompletteras vid länkningen. .data information om vilka variabelplatser som ska reserveras, för initieradevariabler krävs att värdet finns lagrat .bss för oinitieradevariabler räcker det att ange namn och storlek (Block Started by Symbol) Påminnelse om .global som stod i assembler-filen: De symboler som deklararerats som global vet man ska användas vid länkningen, och man förbereder arbetet genom att placera dessa i symboltabellen IS1200 Datorteknik, föreläsning 4
Länkning; sätter ihopObject-modul(er) till Laddmodul Object-modul ”Text-fil” Ladd-modul ”Text-fil” Kommando: ”link” fil.o (med debugger: ”link -d” fil.o) fil.o innehåller binär programkod men alla adresser finns inte med fil.o Länkning fil.elf innehåller binär programkod som kan kopieras till minnet och köras (relokerbar?) fil.elf IS1200 Datorteknik, föreläsning 4
Object-modul ”Text-fil” Object-dump Text-fil Ladd-modul ”Text-fil” Länkning av Nios-program gerextrafil: fil.dump - en listning Kommando: ”link” fil.o Man bör kunna få fram en extra fil fil.objdump fil.o fil.objdump fil.elf IS1200 Datorteknik, föreläsning 4
Object-modul ”Text-fil” Object-dump Text-fil Ladd-modul ”Text-fil” Sym-table Text-fil Länkning av Nios-program gerextrafil: fil.nm - namelist Kommando: ”link” fil.o Med extra flagga (-nm?) bör man kunna få fram en till extra fil fil.nm fil.o fil.nm fil.objdump fil.elf IS1200 Datorteknik, föreläsning 4
Exempel på fil.nm(endast vissa delar) … 00800204 T main 0080234c t puttime 00800238 t tick 0080023c t delay ... 00800264 D _data 00803584 d mytime IS1200 Datorteknik, föreläsning 4
Object-modul ”Text-fil” Object-modul ”Text-fil” Object-modul ”Text-fil” Object-modul ”Text-fil” Ladd-modul ”Text-fil” filn.o fil1.o fil2.o fil3.o Länkning - kombinerar fleraObject-moduler till Laddmodul Kommando: ”link” fil1.o fil2.o fil3.o … filn.o . . . Länkning fil.elf, vilket namn? fil1.elf (sista i kommandot som ska innehålla ”main:”) IS1200 Datorteknik, föreläsning 4
Object-modul ”Text-fil” Object-modul ”Text-fil” Object-modul ”Text-fil” Object-modul ”Text-fil” Ladd-modul ”Text-fil” lib2.o lib1.o fil2.o fil1.o in-länkning av biblioteksfiler Kommando: ”link” lib2.o, lib1.0, ... fil2.o, fil1. o Biblioteksfiler . . . Länkning fil.elf, vilket namn? fil1.elf (sista i kommandot som ska innehålla ”main:”) IS1200 Datorteknik, föreläsning 4
Ladd-modul ”fil.elf” Minne LaddningLaddmodul laddas till minnet fil.elf ”Load (and run/go)” Var i minnet ? (nära 0x800000) IS1200 Datorteknik, föreläsning 4
+4 PC Minne Körning / ExekveringProgrammet körs av CPU:n Var i minnet ? Länkaren väljer Körning / Exekvering Mus-kommando: Run As Nios II Hardware (utan debugger/simulator) IS1200 Datorteknik, föreläsning 4
+4 PC Minne DebuggingProgrammet körs av CPU:n Var i minnet ? Länkaren väljer Kommando: ./fil.gdb Debugging Önskemål: Starta program på vald adress (skriv till PC) Stoppa program Stegvis exekvering en instruktion i taget (S = Step Into) Exekvera en hel subrutin (Step Over) Undersöka innehåll i register och minne (och variabler) Brytpunkter; införa - ta bort Exekvera fram till nästa brytpunkt (Resume) IS1200 Datorteknik, föreläsning 4
Fil-administration Alternativ 1: Många filer som kompileras separat och länkas ihop till en laddmodul Alternativ 2: Många filer som kombineras med ”include”-satser tillEn enda ”jättefil” som kompileras och länkas ihop till en laddmodul IS1200 Datorteknik, föreläsning 4
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 Separatkompilering Fördelar ? Dela upp arbetet i delar ! Snabb (del-) kompilering ! Nackdel ? Långt kommando vid länkning! IS1200 Datorteknik, föreläsning 4
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 ! Kort kommando vid länkning ! Nackdel ? Onödigt arbete (tid) vid kompilering ! IS1200 Datorteknik, föreläsning 4
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” Vår labmiljö ! Allt jobb ”döljs” bakom ”Run As ...” IS1200 Datorteknik, föreläsning 4
Vår labmiljö ! Programutveckling med NiosII EDS Embedded Design Suite HELT ANNORLUNDA IS1200 Datorteknik, föreläsning 4
# huvudprogram a: .word 0 b: .word 0 res: .word 0 … .global main .global sum main: copy reg4, a copy reg5, b call sum copy res, reg2 /* Main File */ int a, b, res extern int sum (int a, int b); … res = sum (a,b); /* Function File */ int sum (int x, int y) /* ”public */ { return (x + y); } # subroutine .global sum … sum: add reg2, reg4, reg5 return Blandad kodC-kod och Assembler-kod IS1200 Datorteknik, föreläsning 4
Memory Map - Minnesbild • Adressrymd • Hur stor är adressrymden • Vilka adresser används och till vad • RWM, ROM, IO etc IS1200 Datorteknik, föreläsning 4
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 IS1200 Datorteknik, föreläsning 4
+2 PC SP Nios-II: Kartbild av minnetNya adresser ht 2007 ! 7 0 0x800000 adress 0 Vad finns här ? code data RWM stack Vad finns här ? Vad finns här ? 0xFFFFFF adress 2n -1 IS1200 Datorteknik, föreläsning 4
Mall för macropseudo-instruction .macro CLR reg # case sensitive ! MOVI \reg, 0x0 # not case sensitive !? .endm Effekten av detta är att man kan använda en ny instruktion, CLR rA, för att nollställa register rA Utmaning: Skriv ett macro för BTST dreg, sreg, index som gör BitTeST på en bit i register sreg dvs skriver 1 till dreg om utpekad bit är 1 eller skriver 0 till dreg om utpekad bit är 0 ”index” anger index för den bit som ska testas (0—31) IS1200 Datorteknik, föreläsning 4
Var ska macro infogas? Definitionen av varje makro ska finnas i texten, innan det används. Egna makron ska stå i början av filen innan koden som använder makrona och sen kommer koden för själva programmet Egna makron är case sensitive Varning för att ”överta” andras makron IS1200 Datorteknik, föreläsning 4
HEXASC IN-parameter i r4 4 bitar = en hexadecimal siffra ? 7 bitar = ASCII för en hexadecimal siffra UT-parameter i r2 IS1200 Datorteknik, föreläsning 4
HEXASC Bin --> ASCII = hex 0000 --> 011 0000 = 0 0001 --> 011 0001 = 1 0010 --> 011 0010 = 2 0011 --> 011 0011 = 3 0100 --> 011 0100 = 4 0101 --> 011 0101 = 5 0110 --> 011 0110 = 6 0111 --> 011 0111 = 7 1000 --> 011 1000 = 8 1001 --> 011 1001 = 9 1010 --> 100 0001 = A 1011 --> 100 0010 = B 1100 --> 100 0011 = C 1101 --> 100 0100 = D 1110 --> 100 0101 = E 1111 --> 100 0110 = F Algoritm? För dessa kan man göra så här ... För dessa kan man göra så här ... IS1200 Datorteknik, föreläsning 4
IN-parameter i r4 TICK Finns nu given i C-kod 4 st NBCD-kodade siffror minne 31 15 0 7 0 - + Adressen, TIME, till den plats i minnet där aktuell tid finns lagrad IS1200 Datorteknik, föreläsning 4