Presentation laddar. Vänta.

Presentation laddar. Vänta.

2 June 2015 2G1518, föreläsning 4, ht2006 (D2)1 2G1518 Datorteknik Föreläsning 4 Programutveckling, Intro till lab 1 Kursboken, kapitel 1, 4, 5 och 8 ht.

Liknande presentationer


En presentation över ämnet: "2 June 2015 2G1518, föreläsning 4, ht2006 (D2)1 2G1518 Datorteknik Föreläsning 4 Programutveckling, Intro till lab 1 Kursboken, kapitel 1, 4, 5 och 8 ht."— Presentationens avskrift:

1 2 June G1518, föreläsning 4, ht2006 (D2)1 2G1518 Datorteknik Föreläsning 4 Programutveckling, Intro till lab 1 Kursboken, kapitel 1, 4, 5 och 8 ht 2006 – vt 2007 (period 2-3) För D-2

2 2 June G1518, föreläsning 4, ht2006 (D2)2 F1F2F3F4F5F6F7F8F9F10Ö2Ö1Ö3Ö4Ö5LAB-1LAB-2Hemlab-1Ö6Ö7LAB-3Hemlab-2Ö8Hemlab-3Ö9TentamenÖ10 Assemblerkod 4 stegs pipeline Nios2time Nios2io C-kod Nios2int Cache-minnen CPU-scheduling 2G1518 Datorteknik

3 2 June G1518, föreläsning 4, ht2006 (D2)3 Litteraturhänvisningar Kursboken avsnitt 4.5 och 4.6 avsnitt avsnitt 1.5

4 2 June G1518, föreläsning 4, ht2006 (D2)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

5 2 June G1518, föreläsning 4, ht2006 (D2)5 Editering Exempel 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 */ 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 */... }

6 2 June G1518, föreläsning 4, ht2006 (D2)6 Laboration nios2time Utskrift av tid varje sekund 59:57 59:58 59:59 00:00 00:01.

7 2 June G1518, föreläsning 4, ht2006 (D2)7 Editering Exempel 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 */ }

8 2 June G1518, föreläsning 4, ht2006 (D2)8 Pekare och adress (så där i förbifarten) inta;/* reservera plats */ intb=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*/

9 2 June G1518, föreläsning 4, ht2006 (D2)9 Editering Redigering av C-kod C-program Text-fil fil.c, kan redigeras med en editor

10 2 June G1518, föreläsning 4, ht2006 (D2)10 Kompilering: översätter C-kod till Assembler-kod C-program Text-fil Ass-program Text-fil kompilering / översättning fil.c, kan redigeras med en editor fil.s, kan redigeras med en editor Kommando: n2compile fil.c (med debugger: n2compile -d fil.c)

11 2 June G1518, föreläsning 4, ht2006 (D2)11 Editering Exempel på Assembler-kod.include ”minfil.s".data.align2# nästa adress delbar med 4 TIME:.word0x5957.text.globalmain# måste tas med (gemener).globalputtime, tick, delay# behövs ej main:moviar4, TIME moviar16, puttime callrr16 moviar4, TIME calltick moviar4, 1000 calldelay brmain puttime:ret# tom subrutin tick:ret# tom subrutin delay:ret# tom subrutin.end# sluta översätt

12 2 June G1518, föreläsning 4, ht2006 (D2)12 Assemblering; översätter Ass-kod till objekt-modul Ass-program Text-fil Object-modul ”Text-fil” Assemblering / översättning fil.s fil.o, (relokerbar ?) Kommando: n2asm fil.s (med debugger: n2asm -d fil.s)

13 2 June G1518, föreläsning 4, ht2006 (D2)13 Exempel på objekt-modul fil.obj Detta är en binär fil. Den är obegriplig om man öppnar den med en vanlig editor. Information i filen:.textVarje 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..datainformation om vilka variabelplatser som ska reserveras, för initierade variabler krävs att värdet finns lagrat.bssför oinitierade variabler 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

14 2 June G1518, föreläsning 4, ht2006 (D2)14 Länkning; sätter ihop Object-modul(er) till Laddmodul Object-modul ”Text-fil” Ladd-modul ”Text-fil” Länkning fil.o fil.elf fil.elf innehåller binär programkod som kan kopieras till minnet och köras (relokerbar?) fil.o innehåller binär programkod men alla adresser finns inte med Kommando: n2link fil.o (med debugger: n2link -d fil.o)

15 2 June G1518, föreläsning 4, ht2006 (D2)15 Länkning av Nios-program ger extrafil: fil.dump - en listning Object-modul ”Text-fil” Ladd-modul ”Text-fil” fil.o fil.elf Kommando: n2link fil.o Object-dump Text-fil Extra fil fil.objdump

16 2 June G1518, föreläsning 4, ht2006 (D2)16 Exempel på fil.objdump (endast vissa delar) fil.elf: file format elf32-littlenios2 Disassembly of section.text: fc :.text.globalmain.globalputtime, tick, delay main:moviar4, TIME 200fc:010000b4 movhir4, : addir4,r4,612 moviar16, puttime 20104:040000b4 movhir16, :84004b04 addir16,r16,300 callrr c:803ee83a callrr16 moviar4, TIME 20110:010000b4 movhir4, : addir4,r4,612 calltick 20118: call20130 moviar4, c: movhir4, :2100fa04 addir4,r4,1000 calldelay 20124: call20134 brmain 20128:003ff406 br200fc c : puttime:ret 2012c:f800283a ret : tick:ret 20130:f800283a ret : delay:ret 20134:f800283a ret

17 2 June G1518, föreläsning 4, ht2006 (D2)17 Object-modul ”Text-fil” Ladd-modul ”Text-fil” fil.obj fil.c.o Kommando: n2link fil.obj Object-dump Text-fil En till Extra fil fil.srec srec-dump Text-fil fil.objdump Länkning av Nios-program ger extrafil: fil.srec

18 2 June G1518, föreläsning 4, ht2006 (D2)18 Fil i srec-format lämplig att dumpa via serieport till måldator. Exempel på (del av) fil i srec-format S00B00006A77642E D4... S B B00843AE83E80BF S B FD S FA F43F003A2800F8A3 S A2800F83A2800F804FDFFDE150200DF30... S DF S S A059

19 2 June G1518, föreläsning 4, ht2006 (D2)19 Exempel på srec-format taget från fil.srec 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 (skip carry?) S0: Header S2: data with 3-byte address S8: Termination of S2-records Checksumman 59 kan fås ur inversen av A0=A6, inv blir = S00B00006A77642E D4 S B B00843AE83E80BF S A2800F83A2800F804FDFFDE150200DF30 S DF S S A059

20 2 June G1518, föreläsning 4, ht2006 (D2)20 Object-modul ”Text-fil” Ladd-modul ”Text-fil” fil.o fil.elf Kommando: n2link fil.obj Object-dump Text-fil En till Extra fil fil.srec srec-dump Text-fil fil.objdump fil.nm Sym-table Text-fil Länkning av Nios-program ger extrafil: fil.nm - namelist

21 2 June G1518, föreläsning 4, ht2006 (D2)21 Exempel på fil.nm (endast vissa delar) … fc T main c t puttime t tick t delay D _data d TIME # 0x264=612.

22 2 June G1518, föreläsning 4, ht2006 (D2)22 Object-modul ”Text-fil” Ladd-modul ”Text-fil” fil.o fil.elf Kommando: n2link -d fil.o Object-dump Text-fil En till Extra fil fil.srec srec-dump Text-fil fil.objdumpfil.nm Sym-table Text-fil Debugger Script-fil fil.gdb Kompilering+länkning av Nios-prog med flagga -d ger extrafil: fil.gdb

23 2 June G1518, föreläsning 4, ht2006 (D2)23 Länkning - kombinerar flera Object-moduler till Laddmodul Ladd-modul ”Text-fil” Länkning Object-modul ”Text-fil” fil1.o Object-modul ”Text-fil” fil2.o Object-modul ”Text-fil” fil3.o Object-modul ”Text-fil” filn.o... Kommando: n2link fil1.o fil2.o fil3.o … filn.o fil.elf, vilket namn? fil1.elf (sista i kommandot som ska innehålla ”main:”)

24 2 June G1518, föreläsning 4, ht2006 (D2)24 in-länkning av biblioteksfiler Ladd-modul ”Text-fil” Länkning fil.elf, vilket namn? fil1.elf (sista i kommandot som ska innehålla ”main:”) Object-modul ”Text-fil” lib2.o Object-modul ”Text-fil” lib1.o Object-modul ”Text-fil” fil2.o Object-modul ”Text-fil” fil1.o... Biblioteksfiler Kommando: n2link lib2.o, lib1.0,... fil2.o, fil1. o

25 2 June G1518, föreläsning 4, ht2006 (D2)25 Laddning Laddmodul laddas till minnet Ladd-modul ”fil.elf” Minne Load (and run/go) fil.elf Var i minnet ? (nära 0x20000) Kommando: nios2-download -g fil.elf GO LOAD

26 2 June G1518, föreläsning 4, ht2006 (D2)26 Minne Körning / Exekvering Programmet körs av CPU:n Körning / Exekvering Var i minnet ? Länkaren väljer Kommando: nios2-download –g fil.elf (utan debugger/simulator) PC +4 GO

27 2 June G1518, föreläsning 4, ht2006 (D2)27 Minne Debugging Programmet körs av CPU:n Debugging Kommando:./fil.gdb PC +4 Önskemål: Starta program på vald adress (skriv till PC) Stoppa program Stegvis exekvering en instruktion i taget (S = Step) Exekvera en hel subrutin (N = Next) Undersöka innehåll i register och minne (och variabler) Brytpunkter; införa - ta bort Exekvera fram till nästa brytpunkt (C = Continue) Var i minnet ? Länkaren väljer

28 2 June G1518, föreläsning 4, ht2006 (D2)28 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 till En enda ”jättefil” som kompileras och länkas ihop till en laddmodul

29 2 June G1518, föreläsning 4, ht2006 (D2)29 C-program Text-fil Ass-program Text-fil Object-modul ”Text-fil” C-program Text-fil Ass-program Text-fil Object-modul ”Text-fil” Ladd-modul ”Text-fil” C-program Text-fil Ass-program Text-fil Object-modul ”Text-fil” C-program Text-fil Ass-program Text-fil Object-modul ”Text-fil” Fördelar ? Dela upp arbetet i delar ! Snabb (del-) kompilering ! Nackdel ? Långt kommando vid länkning! Separatkompilering

30 2 June G1518, föreläsning 4, ht2006 (D2)30 C-program Text-fil Ass-program Text-fil Object-modul ”Text-fil” C-program Text-fil Ladd-modul ”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 !

31 2 June G1518, föreläsning 4, ht2006 (D2)31 C-program Text-fil Ass-program Text-fil Object-modul ”Text-fil” C-program Text-fil Ladd-modul ”Text-fil” C-program Text-fil C-program Text-fil ”include” Vår labmiljö ! Ingen textfil genereras Kompilering direkt till objekt-modul

32 2 June G1518, föreläsning 4, ht2006 (D2)32 Ass-program Text-fil Object-modul ”Text-fil” Ladd-modul ”Text-fil” ”include” Ass-program Text-fil Ass-program Text-fil Ass-program Text-fil

33 2 June G1518, föreläsning 4, ht2006 (D2)33 JAVA-program Text-fil Ass-program Text-fil Object-modul ”Text-fil” C-program Text-fil Ass-program Text-fil Object-modul ”Text-fil” Ladd-modul ”Text-fil” Ass-program Text-fil Object-modul ”Text-fil” Pascal-program Text-fil Ass-program Text-fil Object-modul ”Text-fil” Separatkompilering med blandad kod

34 2 June G1518, föreläsning 4, ht2006 (D2)34 Blandad kod C-kod och Assembler-kod /* Function File */ int sum (int x, int y) /* ”public */ { return (x + y); } /* Main File */ int a, b, res extern int sum (int a, int b); … res = sum (a,b); # 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 # subroutine.global sum … sum: add reg2, reg4, reg5 return

35 2 June G1518, föreläsning 4, ht2006 (D2)35 res=sum(a,b) Ass-program Text-fil Object-modul ”Text-fil” int sum(x,y) Ass-program Text-fil Object-modul ”Text-fil” Ladd-modul ”Text-fil” huvudprogram function Länkning Assemblering Kompilering

36 2 June G1518, föreläsning 4, ht2006 (D2)36 res=sum(a,b) Ass-program Text-fil Object-modul ”Text-fil” sum: push... Object-modul ”Text-fil” Ladd-modul ”Text-fil” huvudprogram subrutin Länkning Assemblering Kompilering

37 2 June G1518, föreläsning 4, ht2006 (D2)37 call sum Object-modul ”Text-fil” int sum(x,y) Ass-program Text-fil Object-modul ”Text-fil” Ladd-modul ”Text-fil” huvudprogram function Länkning Assemblering Kompilering

38 2 June G1518, föreläsning 4, ht2006 (D2)38 call sum... Object-modul ”Text-fil” Object-modul ”Text-fil” Ladd-modul ”Text-fil” huvudprogram Länkning Assemblering sum: push... subrutin

39 2 June G1518, föreläsning 4, ht2006 (D2)39 Memory Map - Minnesbild  Adressrymd  Hur stor är adressrymden  Vilka adresser används och till vad  RWM, ROM, IO etc

40 2 June G1518, föreläsning 4, ht2006 (D2)40 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

41 2 June G1518, föreläsning 4, ht2006 (D2)41 Nios-II: Kartbild av minnet adress 0 adress 2 n RWM data code stack 0x x?FFFF PC +2 SP Vad finns här ?

42 2 June G1518, föreläsning 4, ht2006 (D2)42 Nios: Kartbild av minnet Hex-AdressMEM / IO 0 - 7FFboot_monitor_rom Fuart_ FFFFext_ram, 256 kByte

43 2 June G1518, föreläsning 4, ht2006 (D2)43 Assembler-direktiv, exempel.include ”fil.ext”# infogar fil.ext.data# nu kommer datareservationer.text# programkod.global main# main blir synlig globalt (”public”).align 3# nästa adress ska vara delbar med 2 3 B:.string ”hej 17”# lagra ASCII-sträng C:.ascii”tjoho”# lagra ASCII D:.asciz”plusnul”# ASCII avslutad med NUL TAL:.byte 0x01# reservera 1 byte med värde 0x01.equ ExcBase,0x20020# def. symbol namn TIME:.word 0x5957# 32 bitar med värde

44 2 June G1518, föreläsning 4, ht2006 (D2)44 2G1518 Datorteknik Laboration 1 Nios assembler

45 2 June G1518, föreläsning 4, ht2006 (D2)45 Mall för macro pseudo-instruction.macroCLR reg MOVI\reg, 0x0.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

46 2 June G1518, föreläsning 4, ht2006 (D2)46 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

47 2 June G1518, föreläsning 4, ht2006 (D2)47 Huvudprogram loop:moviar4,TIME# parameter callPUTTIME# anrop, alt 1 moviar4, TIME# parameter moviar16, TICK# adress callrr16# anrop, alt 2 moviar4,1000# parameter callDELAY# anrop brloop# ovillk. hopp

48 2 June G1518, föreläsning 4, ht2006 (D2)48 HEXASC ? 4 bitar = en hexadecimal siffra 7 bitar = ASCII för en hexadecimal siffra IN-parameter i r4 UT-parameter i r2

49 2 June G1518, föreläsning 4, ht2006 (D2)49 HEXASC Bin --> ASCII = hex > = > = > = > = > = > = > = > = > = > = > = A > = B > = C > = D > = E > = F Algoritm? För dessa kan man göra så här...

50 2 June G1518, föreläsning 4, ht2006 (D2)50 TICK 4 st NBCD-kodade siffror IN-parameter i r4 minne Adressen, TIME, till den plats i minnet där aktuell tid finns lagrad -+-+

51 2 June G1518, föreläsning 4, ht2006 (D2)51 TICK Exempel på räkning NBCD NBCD NBCD NBCD = TIME = 00: = 00: = 00: = 01: = 09: = 10: = 59: = 00:00

52 2 June G1518, föreläsning 4, ht2006 (D2)52 PUTTIME 4 st NBCD-kodade siffror IN-parameter i r4 minne 7 0 Skriv ut i ordning 1 2 : 3 4 Skriv ett tecken: plocka fram 4 bitar -> HEXASC -> PUTCHAR PUTCHAR = nr_uart_txchar Adressen, TIME, till den plats i minnet där aktuell tid finns lagrad -+-+

53 2 June G1518, föreläsning 4, ht2006 (D2)53 DELAY förslag till flödesschema N := startN := N - 1N = 0 ? IN-hopp UT-hopp JA NEJ K := msekK := K - 1K = 0 ? IN-hopp UT-hopp JA NEJ IN-parameter i r4 inner loop outer loop tuning value

54 2 June G1518, föreläsning 4, ht2006 (D2)54 Assembler-direktiv, exempel.include ”fil.ext”#infogar fil.ext.data#nu kommer datareservationer.text#nu kommer programkod.global main#main blir synlig globalt.align 2#nästa adress ska vara delbar med 2 2.align 4#nästa adress ska vara delbar med 2 4 TIME:.word 0x5957#reservera 1 word med värde.equ MyVal, 0x5957#def. symbol namn KOLON:.byte ’:’#ascii för kolon lagras

55 2 June G1518, föreläsning 4, ht2006 (D2)55 Tillgängliga ass-rutiner Rutiner för serieport #skriv ett tecken”PUTCHAR” call nr_uart_txchar# skriver ut från r4 #läs ett tecken”GETCHAR” call nr_uart_rxchar# läser in till r4 Vid anrop av nr_uart_txchar och nr_uart_rxchar ska r5 innehålla adress till porten dvs i vårt fall 0x860 (uart0)

56 2 June G1518, föreläsning 4, ht2006 (D2)56 Programexempel - subrutin ta fram sum av val1 och val2 # Exempel på C-kod torde kunna vara... int val1, val2, result; /* variabler */... int sum (int val1, int val2); /* prototyp */... result = sum ( val1, val2); /* anrop */

57 2 June G1518, föreläsning 4, ht2006 (D2)57 Programexempel - subrutin ta fram sum av val1 och val2 # int val1, val2, result; # kan översättas till (av kompilator).data.align2#adress multipel av 2 2 val1:.word0 val2:.word0 result:.word0...

58 2 June G1518, föreläsning 4, ht2006 (D2)58 anrop av sum (val1, val2) inparametrar på stack #result = sum ( val1, val2) kan översättas till.text moviar5, val2# adress till val2 i r5 ldwr5, 0(r5) # värde val2 till r5 från minnet pushr5# val2 läggs på stacken moviar4, val1# adress till val1 i r4 ldwr4, 0(r4)# värde val1 till r4 från minnet pushr4# val1 läggs på stacken movia r1, sum# subrutin-adress till ett register callrr1# anropa subrutin moviar1, result# adress till result i r1 stwr2, 0(r1)# returvärde i r2 kopieras till minnet

59 2 June G1518, föreläsning 4, ht2006 (D2)59 Programexempel - subrutin ta fram sum av val1 och val2 int sum (int val1, int val2); { int tmp; tmp = val1 + val2; return (tmp); } kan översättas till (kompileras till)

60 2 June G1518, föreläsning 4, ht2006 (D2)60 int sum (int val1, int val2) inparametrar på,stack sum:popr2# kopiera val1 till r2 popr8# kopiera val2 till r8 addr2, r2, r8# addera va2 till r2 foo:ret# PC := r31


Ladda ner ppt "2 June 2015 2G1518, föreläsning 4, ht2006 (D2)1 2G1518 Datorteknik Föreläsning 4 Programutveckling, Intro till lab 1 Kursboken, kapitel 1, 4, 5 och 8 ht."

Liknande presentationer


Google-annonser