Maskinorienterad programmering

Relevanta dokument
Maskinorienterad programmering

Programmering av inbyggda system

Maskinorienterad programmering

F8: Undantagshantering

Svar till Övning3 Datorteknik, HH vt12 Avbrott och timers

Assemblerprogrammering del 3

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

Digital- och datorteknik

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

Undantag, avbrott. Avsnitt 7. Undantag, avbrott

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

Assemblerprogrammering, ARM-Cortex M4 del 3

GPIO - General Purpose Input Output

Digital- och datorteknik

Tentamen med lösningsförslag

Assemblerprogrammering för ARM del 2

Demonstration och konsultation Arbetsbokens avsnitt 7 Händelsestyrt processbyte Förberedande inför laboration 4

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

Assemblerprogrammering - fördjupning

Datorsystemteknik Föreläsning 7DAVA14

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.

F5: Högnivåprogrammering

F5: Högnivåprogrammering

Polling (cyklisk avfrågning) Avbrott

Tentamen med lösningsförslag

Programmering av inbyggda system. Kodningskonventioner. Viktor Kämpe

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

A-del motsvarande KS1

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

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

Maskinorienterad Programmering LP3-2017/2018

Digital- och datorteknik

Maskinorienterad programmering

Outline. Datorsystemtekni. Kravspecifikation. Kravspecifikation (forts.)

TSEA28 Datorteknik Y (och U)

I DAG fo 4. Printerport v3 med READY o DAV. Avbrott. Hur bra blev det egentligen????

Datorteknik ERIK LARSSON

Maskinorienterad Programmering IT2, LP2-2016/2017

Institutionen för elektro- och informationsteknologi, LTH

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

BDM12 Användarbeskrivning. Introduktion

Lösningar till tentamen i EIT070 Datorteknik

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

Institutionen för elektro- och informationsteknologi, LTH

TSEA28 Datorteknik Y (och U)

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

Assemblerprogrammering för ARM del 1

Datorteknik. Föreläsning 4. Polling och avbrott. Institutionen för elektro- och informationsteknologi, LTH. Mål

Tentamen med lösningsförslag

Undantagstyper. Maskinorienterad Programmering 2010/2011. MC68HC12, Stencil Assemblerprogrammering.pdf CPU12 Reference Guide

TDIU01 - Programmering i C++, grundkurs

Maskinorienterad Programmering LP2-2017/2018

Svar till tentamen den 16 december 2013 Datorarkitekturer med operativsystem, EDT621, 7,5 poäng

Assemblerprogrammering för ARM del 3

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

Enkla datatyper minne

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

TSEA28 Datorteknik Y (och U)

Assemblerprogrammering för ARM del 1

En Von Neumann-arkitektur ( Von Neumann-principen i föreläsning 1) innebär:

Tentamen med lösningsförslag

Kontrollskrivning Mikrodatorteknik CDT S2-704

F2: Motorola Arkitektur. Assembler vs. Maskinkod Exekvering av instruktioner i Instruktionsformat MOVE instruktionen

3. Mikroprogrammering II

Ett program som frågar regelbundet om något skall utföras. Exempelvis om spänningen på ett batteri sjunkit under en viss nivå.

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

Stack och subrutiner Programmeringskonventionen

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

F4: Assemblerprogrammering

Operative system. LRU-algoritm (2 p) Svar: 7 fel. c) Optimal algoritm (2 p) Svar: 6 fel

LABORATION. Datorteknik Y

SVAR TILL TENTAMEN I DATORSYSTEM, VT2013

Övning2 Datorteknik, HH vt12 - Programmering

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

Datorarkitekturer med operativsystem ERIK LARSSON

TSEA28 Datorteknik Y (och U)

DAT 015 Maskinorienterad programmering 2010/2011. Uppbyggnad_och_funktion.pdf

Lågnivåprogrammering. Föreläsning 2 Lågnivåprogrammering. Binära tal. En enkel modell av datorns inre

Lathund. C för inbyggda system

Datorarkitekturer med operativsystem ERIK LARSSON

Övningsuppgifter STYRNING - i Mikrodatorteknik för U2 2010

Datorarkitekturer med operativsystem ERIK LARSSON

System S. Datorarkitektur - en inledning. Organisation av datorsystem: olika abstraktionsnivåer. den mest abstrakta synen på systemet

Maskinorienterad programmering

Programmering av inbyggda system 2014/2015

GPIO - General Purpose Input Output

LEU240 Mikrodatorsystem

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

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

Institutionen för elektro- och informationsteknologi, LTH

Laboration 2 i Datorteknik- Assemblerprogrammering II

INGENJÖRSHÖGSKOLAN INGENJÖRSHÖGSKOLAN

Programexempel för FLEX

Microprocessor / Microcontroller. Industrial Electrical Engineering and Automation

Lathund. C för inbyggda system

Assemblerprogrammering för ARM del 1

Tentamen i EIT070 Datorteknik

Per Holm Lågnivåprogrammering 2014/15 24 / 177. int och double = = 2, 147, 483, 647

c a OP b Digitalteknik och Datorarkitektur 5hp ALU Design Principle 1 - Simplicity favors regularity add $15, $8, $11

Lösningar till tentamen i EIT070 Datorteknik

Transkript:

Undantagshantering och interna avbrott ARM Cortex-M4 exceptions, programmering av undantagshantering Ur innehållet: Faults Software traps Avbrott från interna enheter, Systick Läsanvisningar: Arbetsbok kap 7 STM32F4xx Cortex M4 programming manual Kap 2.3 Exception model SCB, sidor 206-227 Undantagshantering och interna avbrott 1

Undantagshantering Maskinorienterad programmering Undantagshantering är det sammanfattande begreppet för när normel sekventiell exekvering inte kan, eller ska, fortsätta. Detta är föranlett av någon exceptionell händelse i systemet. Ett inledande exempel på undantagshantering: Vi vet att ARM-processor inte kan referera word (4 bytes) på en udda address. Men vi kan enkelt skriva ett program som gör det, vad händer då? @ exception_unhandled.asm start: LDR R0,=0x20001001 LDR R0,[R0] NOP void main(void) { int *ip, i; ip = (int *) 0x20001001; i = *ip; } Undantagshantering och interna avbrott 2

Undantagshantering - "exception" Med undantag menar vi här en rad olika typer av händelser: RESET (återstart): power on (kallstart ) warm reset (varmstart FAULT: Exekveringsfel kan inte fortsätta TRAP: Programmerat avbrott, initierat av maskininstruktion INTERRUPT: Hårdvarusignalerat avbrott Undantagshantering och interna avbrott 3

Undantagstyper De olika undantagstyperna har en naturlig, fallande prioritet RESET: power on (kallstart) warm reset (varmstart) NMI: Non Maskable Interrupt FAULT: Hard fault generellt fel Memory management fault fel användning av minne Bus fault exvis obefintligt minne Usage fault exvis unaligned TRAP: SVC- instruktion BPKT-instruktion... INTERRUPT: INTERNA: SysTick Watchdog Periferikretsar... EXTERNA: IO-pinnar kan konfigureras som avbrottsingångar EXTI (External Interrupt) modul Undantagshantering och interna avbrott 4

Exekvering vid undantag main 5 main 4 RESET-hantering 4 1 3 Undantagshantering 1 0x04 0x00 RESET-vektor Initialvärde för MSP 1. Återstart (Reset aktiverad) 2. Ladda MSP (Main Stack Pointer) från adress 0x00 3. Ladda RESET-vector från adress 0x04 4. RESET-hantering exekveras i Thread mode 5. Systemets huvudprogram startas 2 3 R13 (MSP) Undantagsvektor 1. Något undantag inträffar Pågående instruktion utförs klart Vektortabellen adresseras 2. Den specifika undantagsvektorn hämtas 3. Undantagshantering i Handler Mode 4. Återgång efter undantagshantering 2 Undantagshantering och interna avbrott 5

Vektortabellen Anger position för de olika undantagsvektorerna. De 16 första positionerna är samma för alla Cortex-M4. Resten av tabellen är specifik för den aktuella microcontrollern. Undantagshantering och interna avbrott 6

Undantagshantering - detaljerna Inträdet hanteras automatiskt av processor. Utträdet initieras och handhas av programvaran (undantagsrutinen) Utträde: Återställ PC från LR. Det speciella EXC_RETURN värdet som då hamnar i PC avkodas. Registerinnehåll återställls då från stacken varvid PC får rätt återhoppsadress. Inträde: Spara aktuell processorstatus, dvs. Spara registerinnehåll på stacken Sätt nytt speciellt innehåll i LR (EXC_RETURN) baserat på processorstatus Ändra processorstatus för undantagshantering Sätt undantagsnummer i PSR Placera undantagsvektor i PC Undantagshantering och interna avbrott 7

Relokering av vektortabellen Vektortabellen startar på address 0 i minnet (Alltid RO-minne)...... men kan relokeras så att vektorerna hamnar i RWM, exempelvis: #define SCB_VTOR (unsigned long *)0xE000ED08) *SCB_VTOR = 0x2001C000; EXEMPEL: Initiera avbrottsvektor usage fault void usage_fault_handler( void );... *((void (**)(void) ) 0x2001C018 ) = usage_fault_handler; Undantagshantering och interna avbrott 8

Återgång från avbrott Värdet i LR (EXC_RETURN) anger detaljerna för återställning av stack och PC efter avbrott Flyttal aktiverat Flyttal ej aktiverat Åter till handler mode använd main stack 0xFFFFFFE1 0xFFFFFFF1 Åter till thread mode använd main stack 0xFFFFFFE9 0xFFFFFFF9 Åter till thread mode använd process stack 0xFFFFFFED 0xFFFFFFFD Kan återvända från avbrott med följande instruktioner då PC laddas med det magiska värdet 0xFFFF_FFFX LDR PC,.. LDM/POP då PC ingår i registerlistan BX LR mest vanligt, typiskt retur från en subrutin Om inga ytterligare avbrott avvaktar: återställs stack och tillstånd baserat på EXC_RETURN Om avbrott avvaktar: återställning av stack/tillstånd fördröjs ( tail-chaining ) avvaktande avbrott betjänas Undantagshantering och interna avbrott 9

Avbrottsprioritet Flera avbrott, pending, active och prioriteter Avbrott 2 har högre prioritet, ytterligare context switch Avbrott 2 har lägre prioritet, tail-chained interrupt Undantagshantering och interna avbrott 10

Speciella register Speciella register används för att ange: Om flyttalsprocessor ska aktiveras Vilken stack som används Vilken exekverings-mode som används Om avbrott ska betjänas EXEMPEL: void setcontrol( unsigned int val) { asm( " MSR CONTROL,R0\n" ); } Undantagshantering och interna avbrott 11

Maskera undantag I undantagsrutinen kan man tillfälligt höja den egna prioriteten till högsta nivå genom att sätta prioritetsmasken i PRIMASK till 1. void disable_interrupt( void ) attribute ((naked)); void disable_interrupt( void ) { asm( " CPSID I\n" ); } Undantagsrutinen måste då också återställa prioritetsmasken till 0 innan återgång. I annat fall kommer alla framtida avbrott att blockeras. Undantagshantering och interna avbrott 12

Processorns olika tillstånd Handler (undantagshantering)/thread mode (normal exekvering), sköts automatiskt av processorn. För att underlätta konstruktion av operativsystem finns också: Privileged/Non-privileged state, kan programmeras. I Non-priveleged state fungerar priviligierade instruktioner som NOP. privileged (kernel, supervisor) Main stack/process stack kan programmeras, processorn använder olika fysiska register (MSP eller PSP) som stackpekare. Operativsystemets programvara (kernel) exekveras med alla resurser tillgängliga (priviligierat). undantag kernel startar process Applikationsprogrammet exekveras i en begänsad miljö (icke priviligierat), övervakad av kernel. non privileged (task, process) Undantagshantering och interna avbrott 13

Stacken i avbrottsfunktionen Ej aktiverad flyttalsenhet Före avbrott Processorn fyller automatiskt ut med 4 bytes om detta skulle krävas för att SP ska innehålla adress på adress jämnt delbar med 8. Detta indikeras med att bit9 i PSR sätts till 1. Undantagshantering och interna avbrott 14

Interna avbrott Undantagshantering och interna avbrott 15

EXEMPEL: Avbrott från SysTick Skapa en fördröjningsfunktion som räknar ner en global variabel ( meddelande ). Visa hur ett testprogram kan använda funktionen för att åstadkomma time out i en bunden programslinga. Testprogrammet ska tända en diodramp under den tid time-out varar. Vi löser på tavlan... void main(void) { init_app(); *((void (**)(void) ) 0x2001C03C ) = systick_irq_handler; *GPIO_ODR_LOW = 0; delay( DELAY_COUNT ); *GPIO_ODR_LOW = 0xFF; while(1) { if( delay_count == 0) break; /* Här finns den kod som väntar på time-out */ } *GPIO_ODR_LOW = 0; } Undantagshantering och interna avbrott 16