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

Digital- och datorteknik

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

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

Assemblerprogrammering, ARM-Cortex M4 del 3

Digital- och datorteknik

Undantag, avbrott. Avsnitt 7. Undantag, avbrott

Tentamen med lösningsförslag

Datorsystemteknik Föreläsning 7DAVA14

Polling (cyklisk avfrågning) Avbrott

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

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

Tentamen med lösningsförslag

GPIO - General Purpose Input Output

Assemblerprogrammering för ARM del 2

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

Tentamen med lösningsförslag

Assemblerprogrammering - fördjupning

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

F5: Högnivåprogrammering

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

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

Programmering av inbyggda system. Kodningskonventioner. Viktor Kämpe

BDM12 Användarbeskrivning. Introduktion

A-del motsvarande KS1

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

Datorteknik ERIK LARSSON

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

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

Institutionen för elektro- och informationsteknologi, LTH

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

LABORATION. Datorteknik Y

Lösningar till tentamen i EIT070 Datorteknik

TSEA28 Datorteknik Y (och U)

Outline. Datorsystemtekni. Kravspecifikation. Kravspecifikation (forts.)

Digital- och datorteknik

Institutionen för elektro- och informationsteknologi, LTH

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

Maskinorienterad programmering

Maskinorienterad Programmering LP3-2017/2018

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

Kontrollskrivning Mikrodatorteknik CDT S2-704

Enkla datatyper minne

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

Tentamen med lösningsförslag

Övningsuppgifter STYRNING - i Mikrodatorteknik för U2 2010

TSEA28 Datorteknik Y (och U)

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

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

LABORATION. Datorteknik Y

Maskinorienterad Programmering IT2, LP2-2016/2017

Övning2 Datorteknik, HH vt12 - Programmering

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

TENTAMEN Datorteknik (DO2005) D1/E1/Mek1/Ö1

GPIO - General Purpose Input Output

Tentamen i EIT070 Datorteknik

Assemblerprogrammering för ARM del 1

Assemblerprogrammering för ARM del 1

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

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

Datorarkitekturer med operativsystem ERIK LARSSON

Laboration 2 i Datorteknik- Assemblerprogrammering II

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

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

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

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

Lösningar till tentamen i EIT070 Datorteknik

En något mer detaljerad bild av en processor. De tre delarna i processorn är: Nere 3ll vänster finns e' antal register som används för a' lagra data.

En något mer detaljerad bild av en processor. De tre delarna i processorn är: Nere 3ll vänster finns e' antal register som används för a' lagra data.

LEU240 Mikrodatorsystem

Stack och subrutiner Programmeringskonventionen

TSEA28 Datorteknik Y (och U)

Programexempel för FLEX

Maskinorienterad Programmering LP2-2017/2018

TSEA28 Datorteknik Y (och U)

Lathund. C för inbyggda system

Tentamen den 14 januari 2015 Datorarkitekturer med operativsystem, EDT621, 7,5 poäng

Assemblerprogrammering för ARM del 3

TDDIU81. Processer och trådar. Andreas Dahlberg, Jonathan Doherty, Tony Magnusson, Patrik Ottosson, Rasmus Siljedahl

Lathund. C för inbyggda system

TDIU01 - Programmering i C++, grundkurs

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

F4: Assemblerprogrammering

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

Institutionen för elektro- och informationsteknologi, LTH

3. Mikroprogrammering II

Datorarkitekturer med operativsystem ERIK LARSSON

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

Tentamen med lösningsförslag

DAT 015 Maskinorienterad programmering 2010/2011. Uppbyggnad_och_funktion.pdf

SVAR TILL TENTAMEN I DATORSYSTEM, VT2013

TSEA28 Datorteknik Y (och U)

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 6 STM32F4xx Cortex M4 programming manual Kap 2.3 Exception model SCB, sidor 206-227 Undantagshantering och interna avbrott 1

Undantagshantering Undantagshantering är det sammanfattande begreppet för när normal 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-processorns load/store- instruktioner optimerats genom att inte kunna 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 Högsta 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 Lägre prioritet 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 avbruten processorstatus) ( restore context ) Å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 ( save context ), 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 ) { 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

SysTick med avbrott... Algoritm: STK_CTRL = 0 STK_LOAD = STK_VAL = 0 STK_CTRL = 7 Återställ SysTick CountValue Nollställ räknarregistret Starta om räknaren Blockerande ty programmet kan inte göra något annat än vänta... Avbrott genereras då COUNTFLAG=1 Icke-blockerande ty programmet kan fortsätta med att exekvera parallell kod Undantagshantering och interna avbrott 16

EXEMPEL: Avbrott från SysTick Skapa en fördröjningsfunktion med en global variabel i form av ett meddelande. Visa hur ett testprogram kan använda funktionen för att åstadkomma fördröjning i en bunden programslinga utan att blockeras. Testprogrammet ska tända en diodramp under den tid fördröjningen varar. Vi löser på tavlan... void init_app( void ) { /* Initiera port D... */ *((void (**)(void) ) 0x2001C03C ) = systick_irq_handler; } #define DELAY_COUNT 10000 void main(void) { init_app(); *GPIO_ODR_LOW = 0; delay( DELAY_COUNT ); *GPIO_ODR_LOW = 0xFF; while(1) { if( systick_flag ) break; /* Parallell kod... */ } *GPIO_ODR_LOW = 0; } Undantagshantering och interna avbrott 17