Programallokering. Programtyper. Att placera program i flashrespektive. Program i FLASH-minne. Program i RAM-minne



Relevanta dokument
LEU240 Mikrodatorsystem Att placera program i FLASHrespektive

LEU240 Mikrodatorsystem

Kontrollskrivning Mikrodatorteknik CDT S2-704

Att använda pekare i. C-kod

A-del motsvarande KS1

F8: Undantagshantering

Digital- och datorteknik

Digital- och datorteknik

Digital- och datorteknik

Datorteknik. Tomas Nordström. Föreläsning 6. För utveckling av verksamhet, produkter och livskvalitet.

AVR 3 - datorteknik. Avbrott. Digitala system 15 hp. Förberedelser

Programräknaren visar alltid på nästa instruktion som skall utföras. Så fort en instruktion har hämtats så visar programräknaren på nästa instruktion.

Digital- och datorteknik

Avbrottshantering. Övningsuppgifter

Maskinorienterad programmering

Ansvarig lärare: Olof Andersson, Telefon (besöker skrivsalen)

CE_O3. Nios II. Inför lab nios2time

Dataminne I/O Stack 0x005D 0x3D SP low byte 0x005E 0x3E SP high byte

BDM12 Användarbeskrivning. Introduktion

Avbrottshantering. Övningsuppgifter Lösningsförslag Uppgift (Reservation för diverse fel!)

Systemkonstruktion LABORATION REALTIDSPROGRAMMERING

Laboration 4: Knappstuds Drivrutiner för att eliminera störningar.

Maskinorienterad programmering

EDA480/EDA485 - Maskinorienterad programmering, tentamen 2006-xx-xx 1(7)

F5: Högnivåprogrammering

F5: Högnivåprogrammering

Stack och subrutiner Programmeringskonventionen

CPU. Carry/Borrow IX. Programräknare

LABORATION. Datorteknik Y

Övningsuppgifter STYRNING - i Mikrodatorteknik för U2 2010

Projektlaboration 4, synkronisering av klockan

Maskinorienterad programmering

Arduinokurs. Kurstillfälle 4

Undantag, avbrott. Avsnitt 7. Undantag, avbrott

Föreläsningsanteckningar 3. Mikroprogrammering II

Assemblerprogrammering del 2

Programmering av inbyggda system. Kodningskonventioner. Viktor Kämpe

Innehållsförteckning. Figur- och tabellförteckning. Figure 1 Blockschema över hårdvaran...4 Figure 2 Blockschema över programet...

Vad händer när man kör ett program? Program och processer. Funktionsanrop. Avsluta programmet

Grundläggande C-programmering del 2 Pekare och Arrayer. Ulf Assarsson

Assemblerprogrammering för ARM del 2

Agenda. Arrayer deklaration, åtkomst Makron Flerdimensionella arrayer Initiering Strängar Funktioner och arrayer. Övningar nu och då

LABORATION. Datorteknik Y

(Lösningsförslag finns sist i denna fil.)

Mål. Datorteknik. Repetition av avbrott. Innehåll. Mätning och styrning. Datorer för mätning och styrning. timer. Datorsystem A/D. Analog insignal D/A

Grundläggande C-programmering del 2 Pekare och Arrayer. Ulf Assarsson

Programexempel för FLEX

Lösningar till tentamen i EIT070 Datorteknik

Generell säkerhet. Loggning - Hur mycket ska man logga? Inloggningsrutinerna i Unix. Loggning fortsättning

Modbus Seriell Kommunikation

Digital- och datorteknik

Realtidsprogrammering. En introduktion Implementering (med exempel från PIC)

Datorprojekt, del 1. Digitala system 15 p

Instruktioner för uppdatering av enheter med ISP

Effektpedal för elgitarr

Enkla datatyper minne

Digitala projekt rapport

General Purpose registers ALU I T H S V N Z C SREG. Antag att vi behöver skriva in talet 25 till register R18

3. Mikroprogrammering II

Institutionen för elektro- och informationsteknologi, LTH

Datorteknik. Föreläsning 5. Realtidssystem och realtidsprogrammering. Institutionen för elektro- och informationsteknologi, LTH.

Mål. Datorteknik. Innehåll. Innehåll (forts) Hur ser ett program ut? Hur skapas maskinkoden?

TSEA28 Datorteknik Y (och U)

Det finns många flaggor till g++,

6 Lågnivåprogrammering

Att läsa en manual. Exempel Timern ECT_16B8C. Läs den allmänna beskrivningen (Overview) Vi ser att grundfunktionen är en räknare med prescaler

Laborationens mål är att få displayen att visa timmar, minuter och sekunder samt att kunna ställa klockan.

LABORATION DATORTEKNIK Y DATORTEKNIK D

Översikt Introduktion DST 1. Nicholas Wickström. IDE, Högskolan i Halmstad. N. Wickström

7) Beskriv tre sätt att överföra parametrar mellan huvudprogram och subrutin.

Enchipsdatorer med tillämpningar LABORATION 7, ROBOT

Elektroteknik MF1016 föreläsning 9 MF1017 föreläsning 7 Mikrodatorteknik

Assemblerprogrammering del 3

Datorsystemteknik DAVA14 Föreläsning 10

Digitala Projekt(EITF40) - Larm

Polling (cyklisk avfrågning) Avbrott

Manual. Abelko M-Bus Device Creator (MBDC)

Lösningar till tentamen i EIT070 Datorteknik

Institutionen för elektro- och informationsteknologi, LTH

Laboration 3 HI1024, Programmering, grundkurs, 8.0 hp

Datorteknik. Föreläsning 3. Assembler, stack och subrutiner, programmeringskonventionen. Institutionen för elektro- och informationsteknologi, LTH

Datorsystemteknik Föreläsning 7DAVA14

DBG identifierar därefter sig genom utskrift av namn och version. Se även "Disposition av adressrum" nedan. Följande kommandon accepteras av DBG

Programmering i maskinspråk (Maskinassemblering)

Fö 5+6 TSEA81. Real-time kernel + Real-time OS

Studera databladen för LCD på sid 4, 5, 7, 8, 14, 18, 19, 20 och 23. Datablad finns på kurshemsidan.

TENTAMEN. Datorteknik. D1/E1/Mek1/Ö Hjälpmedel: Häfte "ARM-instruktioner", A4-format, 17 sidor. Maxpoäng:

Programmera i C Varför programmera i C när det finns språk som Simula och Pascal??

Tentamen med lösningsförslag

#include <pic.h> #include <sys.h> char LEFT,RIGHT,MOTORHASTIGHET;

Ett enkelt program i C++, hello.cpp. #include <iostream> int main() { std::cout << "Hello World\n"; return 0; } C++, Övning 1

Övning 6. Parallellport, timer

Extrauppgifter för CPU12

Laboration 5. Temperaturmätning med analog givare. Tekniska gränssnitt 7,5 p. Förutsättningar: Uppgift: Temperatur:+22 C

Mål. Datorteknik. Introduktion. Innehåll. Verklig situation - pappaledighet. Introduktion (forts)

Datorteknik 2 (AVR 2)

grundläggande C++, funktioner m.m.

Lathund för spel med karta

Institutionen för elektro- och informationsteknologi, LTH

Transkript:

Programallokering Att placera program i flashrespektive RAM-minne Program i FLASH-minne Bara lokala variabler Globala oinitierade variabler Globala initierade variabler Program med avbrott Program i RAM-minne Bara lokala variabler Globala oinitierade variabler Globala initierade variabler Program med avbrott Programtyper Kräver skrivbar stack Kräver skrivbart bss segment Kräver skrivbart data segment Kan göras helt självgående tack vara Resetvektorn Kan ej göras helt självgående RAM är skrivbart Kräver att avbrottsvektorer relokeras till RAM 1

Standardkonfiguration för projekt Typ av applikation Projektets startup-fil Namn på laddfil Switchar Standardbibliotek Skapa mapfil Länkarskript Konstantsegment (kräver inget minne) Startupsegment Kodsegment Segment för konstant initierad data Initierad data Oinitierad data Länkarkonfigurering Länkarskript Assemblatorkonfigurering Kompilatorkonfigurering Definedirektiv Segmentgrupper Minnesallokering Relokerade avbrottsvektorer Alla segment i den ordning de står Start av RAM 2

Systemets startup-fil Sätt stackpekare Initiera serieport för simulator Initiera C-bibliotek som finns med i XCCinstallationen Gå till applikation Systemets startup-fil forts. Kolla efter hårdvara Initiera inte om hårdvara utan använd initiering i debugger Anropa rutin i debugger Skapa från rutiner i debugger 3

Enkelt program för RAM med bara lokala variabler och inga avbrott h-fil med symboliska namn på alla processorregister Pekarmakron Lokala variabler Startupfil för enkelt program för RAM med bara lokala variabler och inga avbrott Vad behåller vi? Initiering av stack Uppsättning av C-bibliotek Flytta till längst upp i RAM, dvs 0x3FFF Anrop av applikation Vad tar vi bort? Serieportsinitiering för simulator Anrop av rutiner i debugger Vad lägger vi till? MC12 använder initiering av PLL i debugger. Vi måste skriva egen itiering Egen initiering av serieport om vi behöver sådan - Rutiner för outchar, tstchat och inchar 4

Systemets startup-fil forts. Registerdefinitioner Stack längt upp i RAM Initiera PLL Initiera C-bibliotek Gå till applikation Systemets startup-fil forts. Sätt PLL-frekvens till 16 MHz Vänta på låst PLL Välj PPL-klockan som referens för bussklockan SYNR 1 PLLCLK 2 OSCCLK REFDV 1 OBS 5

Länkarskript för RAM-applikation utan relokerade avbrottsvektorer Allt i en följd Project/Settings Egen startup-fil. Glöm inte att inkludera filen i projektet Länkarskript Skapa listfil Behåll assemblerfil 6

Vad visar mapfilen? 1(3) Start- och slutadress för grupp I gruppen ingående segment Start- och slutadress för segment Vad visar mapfilen? 2(3) Start för segment Slut för segment Segmentstorlek Innehåll från initiering av C-bibliotek 7

Vad visar mapfilen? 3(3) Från initiering av C-bibliotek Nå i h Några register- och bitmanipuleringsfunktioner i C 8

Läsning från register Exempel: läsning av resultatregistret ATD0DR4L indata *((unsigned char *)(0x0099)); Användande av pekarmakro och symboliskt registernamn indata REG8(ATD0DR4L); Att skriva till register Exampel: activera ATD0 genom att sätta bit ADPU in registret ATD0CTL2 *((unsigned char *)(0x0082)) 0x80; Användande av pekarmakro och symboliskt registernamn REG8(ATD0CTL2) 0x80; Komplettera med symboliskt bitnamn REG8(ATD0CTL2) ADPU; 9

Att testa registerbitar Exampel: vänta på Conversion Complete Flag 5 (CCF5) ; while! REG8 ATD0STAT1 &CCF5 Sätta registerbitar Enstaka bitar Exampel: Aktivera digital it ingång 3 iatd0 REG8(ATD0DIEN) IEN3; Multipla bitar Exampel: Sätt Fast Clear Flag och aktivera ATD REG8(ATD0CTL2) ADPU AFFC; 10

Att sätta registerbitar utan att påverka övriga bitar Exempel: välj 8 bitars upplösning genom att sätta bit 7 i ATD0: kontrollregister 4 REG8(ATD0CTL4) Alternativt REG8(ATD0CTL4) SRES8; REG8(ATD0CTL4) SRES8; Att nollställa registerbitar Exempel: välj datarepresentation utan tecken i ATD0:s resultatregister genom att nollställa bit 6 i ATD0:s kontrollregister 5 REG8(ATD0CTL5) REG8(ATD0CTL5)& ~DSGN ; Alternativt REG8(ATD0CTL5)& ~DSGN; OBS ~ inte! 11

Enkelt program för RAM med globala oinitierade variabler Global oinitierad variabel Samma startupfil som tidigare Samma skriptfil som tidigare 12

Vad visar mapfilen? 1(3) Adresser något förändrade Vad visar mapfilen? 2(3) Något mindre Något större Oförändrat 13

Vad visar mapfilen? 3(3) Ny, oinitierad variabel i bss Enkelt program för RAM med globala initierade variabler Global initierad variabel 14

Samma startupfil som tidigare Samma skriptfil som tidigare Vad visar mapfilen? _temp har flyttat från bss till data 15

Enkelt program för FLASH med bara lokala variabler Kod som via länkarskript placeras på adress 0xFF0E i FLASH för att göra FLASH-minnet läsbart Vad måste vi ändra i startup-filen? Ingenting! Filen påverkar bara initiering av TOS i RAM 16

Länkarskript för applikation med bara lokala variabler i FLASH-minne Bara lokal kod Ingen plats krävs för variabler Vi borde kunna nöja oss med ett text-segment men XCC kräver att alla segment är med Lägg övriga segment på ett bra sätt för framtida applikationer Lägg bss i RAM för att vara skrivbar Lägg övriga segment i FLASH Skriv inte över avbrottsvektorerna Länkarskript för applikation med bara lokala variabler i flashminne forts. Till RAM Till FLASH Till RAM Till FLASH Undvik avbrottsvektorerna och unsecure 17

Vad visar mapfilen? 1(3) I RAM I FLASH Vad visar mapfilen? 2(3) Nytt 18

Vad visar mapfilen? 3(3) Nytt Enkelt program för flashminne med oinitierade globala variabler Global oinitierad variabel 19

Samma startuppfil Samma länkarskript Vad visar mapfilen? Oinitierad variabel i bss 20

Enkelt program för flashminne med initierade globala variabler Global initierad variabel Vad visar mapfilen? Initierad variabel i data Men data ligger ju i FLASH och är inte skrivbart??? 21

Hur gör vi datasegmentet skrivbart? data-segmentet kan inte ligga i RAM från början då det innehåller initierade variabler vars värden måste finnas med i programkoden Slutsats! Vårt program måste kopiera data-segmentet till RAM XCC:s C-bibliotek innehåller rutiner för detta så vi behöver bara ge en flagga till länkaren. Vi behöver inte ändra i programkoden men i den assemblerade och länkade koden så måste alla referenser till de initierade variablerna nu gå till adresserna för deras kopior i RAM. Detta sker automatiskt Project/Settings Kopiera data-segment till RAM 22

Vad visar mapfilen? 1(3) data-segment i FLASH Kopia av datasegment i RAM Vad visar mapfilen? 2(3) Ingen förändring Kopian av datasegmentet syns inte men ligger direkt ovanför bss-segmentet 23

Vad visar mapfilen? 3(3) Ingen förändring Program i flash med avbrott Byt ut fördröjning mot avbrott från realtidsklockan Initiera avbrott Avbrott från realtidsklocka Resetvektor Låt resetvektorn peka på _start i startup-filen Skriv avbrottsrutin för realtidsklockan 24

Program i flash med avbrott forts. Initiera RTI Vänta på avbrott Program i flash med avbrott forts. Interruptrutin Avbrottsvektor för RTI med pekare till avbrottsrutin Resetvektor med pekare till avbrottsrutin 25

Skriptfil 1(2) Skriptfil 2(2) Avbrottsvektor för RTI Resetvektor Avbrottsvektor för RTI Resetvektor 26

Samma startupfil som tidigare då vi inte har några relokerade avbrottsvektorer Vad visar mapfilen? 1(3) Avbrottsvektorer för RTI Avbrottsvektorer för RESET 27

Vad visar mapfilen? 2(3) Avbrottsvektor för RTI Avbrottsvektor för RESET Vad visar mapfilen? 3(3) Avbrottsvektor för RTI Avbrottsvektor för RESET 28

Mer generell avbrottshantering i flash Lägg med alla avbrottsvektorer Låt de avbrott vi inte använder peka på en tom dummy-rutin Mer generell avbrottshantering i flash forts. Avbrottsvektorer Skapa minnessegment Utfyllnad på reserverade adresser Namn på avbrottsrutiner Resetvektor 29

Mer generell avbrottshantering i flash forts. Dummy-rutin Mer generell avbrottshantering i flash forts. Omdirigering till dummyrutin Omdirigera inte det avbrott vi skall använda Resetvektorn skall inte omdirigeras och saknas därför här 30

Länkarskript för avbrottshantering i flash Länkarskript för avbrottshantering i flash forts. Avbrottsvektortabell Avbrottsvektoradresser 31

Samma startupfil som tidigare då vi inte har några relokerade avbrottsvektorer som skulle behöva plats i RAM Vad visar mapfilen? 1(3) avbrottsvektorer 32

Vad visar mapfilen? 2(3) Avbrottsvektorsegment Vad visar mapfilen? 3(3) Avbrottsrutin Avbrottsvektorer 33

Avbrottshantering i RAM Vi behöver Ett program i flashminne som mappar om avbrottsvektorerna till RAM Detta program kan sedan om det skrivs tillräckligt generellt användas av alla senare RAMapplikationer med avbrott RAM-applikationer som använder de ommappade avbrottsvektorerna Ommappning av avbrottsvektorer Låt de verkliga avbrottsvektorerna peka, inte på en avbrotts- eller en dummyrutin, utan på var sin rutin som gör ett hopp till en adress i RAM Vi förfinar det ytterligare genom att inte låta rutinen ange vart vi skall hoppa utan vi låter den läsa vart den skall hoppa från en adress i RAM där vi kan skriva in adressen till vår avbrottsrutin Vi gör en ny relokerad avbrottsvektortabell i RAM 34

Ommappning av avbrottsvektorer Ny avbrottsvektortabell Ser ut som den tidigare avbrottsvektortabellen men med nya funktionsnamn till relokeringsfunktionerna Ommappning av avbrottsvektorer forts. Rutin för läsning av avbrottsrutinens adress från ommappad avbrottsvektortabell i RAM Den relokerade avbrotts- vektortabellens t startadress t Läser den adress som hoppet skall ske till från minnesadressen x+offset = REL_IRQ_START+offset 0x3F80 i stället för den verkliga avbrottssvektortabellens startadress 0xFF80 Olika för olika avbrott 35

Ingen startupfil t då vi bara gör ett bakgrundsprogram utan stack och utan anrop till huvudprogram. Ingen initiering av stack etc Samma länkarskript som för den generella avbrottshanteringen a i flash Vad visar mapfilen? 1(3) init, bss och datasegment saknas (egentligen är de tomma) Relokeringsfunktioner Avbrottsvektorer 36

Vad visar mapfilen? 2(3) Relokeringsfunktioner Tomma segment Vad visar mapfilen? 3(3) Avbrottsvektorsegment Relokeringsfunktioner Avbrottsvektorer 37

Program med enstaka avbrott i RAM Detta är ett nytt program som använder relokeringen Nästan samma program som det i FLASH-minne Ingen Resetvektor då detta program inte blir fristående Adressen till vår avbrottsrutin skall skrivas in till rätt ommappade avbrottsvektor Skriptfilen skall placera programmet i RAM-minne Program eller stack får inte störa den ommappade avbrottsvektortabellen. TOS måste ligga på en adress som är lägre än den ommappade avbrottsvektortabellens startadress (REL_IRQ_START), välj 0x3F7F Program med enstaka avbrott i RAM forts. Programkod Adress till ommappad avbrottsvektor 38

Program med enstaka avbrott i RAM forts. Programkod forts. Skriv adress till avbrottsrutin till avbrottets adress i den ommappade avbrottsvektortabellen Program med avbrott i RAM Skriptfil Den ommappade avbrottsvektortabellen placeras inte i RAMminnet av länkaren så den behöver inte vara med i skriptet Adresserna till våra avbrottsrutiner skriver vi till vår ommappade avbrottsvektortabell via vårt C- program Inkludera inte ommappad avbrottsvektortebell 39

Program med avbrott i RAM forts. Startupfil Ändra Top Of Stack (TOS) till 0x3F7F Vad visar mapfilen? 1(3) 40

Vad visar mapfilen? 2(3) Vad visar mapfilen? 3(3) Avbrottsrutin 41

Generellt program med avbrott i RAM På samma sätt som i flash tar vi med hela avbrotts- vektortabellen, t här ommappad Den ommappade avbrottsvektortabellen måste tas med i skriptfilen Startup-filen påverkas inte (TOS nedanför relokerade avbrottsvektorer) Låt oanvända avbrott omdirigeras till en tom dummyrutin Generellt program med avbrott i RAM forts. Programkod Ingen #define av avbrottsvektoradress 42

Generellt program med avbrott i RAM forts. Programkod forts. Ingen initiering av avbrottsvektor Avbrottsrutin Dummyrutin Generellt program med avbrott i RAM forts. Programkod forts. Omdirigering till dummyrutin Dirigera inte om den avbrottsvektor som används 43

Generellt program med avbrott i RAM forts. Programkod forts. Relokerad avbrottsvektortabell Generellt program med avbrott i RAM forts. Skriptfil Ommappade avbrottsvektorer Ommappad avbrottsvektortabell 44

Vad visar mapfilen? 1(3) Relokerade avbrottsvektorer Vad visar mapfilen? 2(3) Segment för relokerade avbrottsvektorer 45

Vad visar mapfilen? 3(3) Avbrottsrutin Relokerade avbrottsvektorer 46