4.Interrupts

Embed Size (px)

Citation preview

  • 8/13/2019 4.Interrupts

    1/56

  • 8/13/2019 4.Interrupts

    2/56

    Embedded Software Design, 2005, Pao-Ann Hsiung, National Chung Cheng University

    2

    Contents

    Microprocessor ArchitectureInterrupt Basics

    Shared-Data Problem

    Interrupt Latency

  • 8/13/2019 4.Interrupts

    3/56

    Embedded Software Design, 2005, Pao-Ann Hsiung, National Chung Cheng University

    3

    Microprocessor Architecture Assembly language = human-readable

    microprocessor instructions1 assembly instruction = 1 CPU instruction1 C statement = 1 or more CPU instructionsEvery family of microprocessors has adifferent assembly language

    Microprocessor registers:general-purpose: R1, R2, R3, special: program counter, stack pointer,

  • 8/13/2019 4.Interrupts

    4/56

    Embedded Software Design, 2005, Pao-Ann Hsiung, National Chung Cheng University

    4

    Assembly-Language InstructionsMOVE R3, R2

    MOVE R5, (iTemperature)MOVE R5, iTemperature

    ADD R7, R3NOT R4JUMP NO_ADD

    NO_ADD: MOVE (xyz), R1SUBTRACT R1, R5JCOND ZERO, NO_MORE

    Value of variable

    iTemperature frommemory

    Address of variableiTemperature in

    memory

    Unconditional Jump

    Conditional Jump

  • 8/13/2019 4.Interrupts

    5/56

    Embedded Software Design, 2005, Pao-Ann Hsiung, National Chung Cheng University

    5

    Assembly-Language InstructionsCALL ADD_EM_UP

    MOVE (xyz), R1

    ADD_EM_UP: ADD R1, R3 ADD R1, R4

    ADD R1, R5RETURN

  • 8/13/2019 4.Interrupts

    6/56

  • 8/13/2019 4.Interrupts

    7/56

    Embedded Software Design, 2005, Pao-Ann Hsiung, National Chung Cheng University

    7

    Context AwarenessSince embedded systems are closely

    relevant to the contexts, how can theseexternal events be noticed?

  • 8/13/2019 4.Interrupts

    8/56

    Embedded Software Design, 2005, Pao-Ann Hsiung, National Chung Cheng University

    8

    I/O InterruptsThe most common approach is to use

    interrupts .Interrupts cause the microprocessor in theembedded system

    to suspend doing whatever it is doing, andto execute some different code instead.

    Interrupts can solve the response problem,

    but not without some difficult programming,and without introducing some new problemsof their own.

  • 8/13/2019 4.Interrupts

    9/56

    Embedded Software Design, 2005, Pao-Ann Hsiung, National Chung Cheng University

    9

    Interrupt Hardware

  • 8/13/2019 4.Interrupts

    10/56

    Embedded Software Design, 2005, Pao-Ann Hsiung, National Chung Cheng University

    10

    Interrupt BasicsMicroprocessor detects interrupt request (IRQ)

    signal is assertedStops executing instructionsSaves on stack the address of nextinstructionJumps to interrupt service routine (ISR) andexecutes itReturns from ISRPops address from stack

    Continues execution of next instruction

  • 8/13/2019 4.Interrupts

    11/56

    Embedded Software Design, 2005, Pao-Ann Hsiung, National Chung Cheng University

    11

    Interrupt Service Routine (ISR)Do whatever needs to be done when the

    interrupt signal occursE.g.: character received at serial port chip

    read character from chipput it into memory

    Miscellaneous housekeeping:reset interrupt-detecting hardware in CPUenable processing interrupts of lower priorities

    Last instruction: RETURN or return from ISR

  • 8/13/2019 4.Interrupts

    12/56

    Embedded Software Design, 2005, Pao-Ann Hsiung, National Chung Cheng University

    12

    ISR vs. Procedure CallsTo execute ISRs, there is NO CALL

    instruction.The microprocessor does the callautomatically.

    An array, interrupt vector , of addresses isused to point to appropriate ISRs.

    ISRs must be loaded when the computer is

    turned on.Interrupts can be masked.The context need to be saved.

  • 8/13/2019 4.Interrupts

    13/56

    Embedded Software Design, 2005, Pao-Ann Hsiung, National Chung Cheng University

    13

    Interrupt Routines

  • 8/13/2019 4.Interrupts

    14/56

    Embedded Software Design, 2005, Pao-Ann Hsiung, National Chung Cheng University

    14

    Disabling InterruptsTwo ways:

    At Source : tell I/O chip to stop interrupting At Destination : inform CPU to ignore IRQs

    Selective disabling can be performedWrite a value in a special register

    Two types of interruptsMaskable : can be disabled, normal I/ONonmaskable : cannot be disabled, powerfailure, catastrophic event, etc.(ISR must not share data with task code!)

  • 8/13/2019 4.Interrupts

    15/56

    Embedded Software Design, 2005, Pao-Ann Hsiung, National Chung Cheng University

    15

    Disabling InterruptsPriority-based interrupt disabling/enabling

    Assign a priority to each IRQ

    Program specifies lowest acceptable priority

    All IRQ with lower priorities will be disabled All IRQ with higher priorities will be enabled

  • 8/13/2019 4.Interrupts

    16/56

    Embedded Software Design, 2005, Pao-Ann Hsiung, National Chung Cheng University16

    Some Common QuestionsHow do CPUs know where to find ISR ?

    At fixed location: e.g.: 8051 IRQ1: 0x0003In IVT (Interrupt Vector Table): addresses ofeach ISR

    How does CPU know where IVT is? At fixed location: e.g.: 80186: 0x00000Depends on CPU

    Can CPU be interrupted within an instruction ?Usually not

    Except: inst with large data movements

  • 8/13/2019 4.Interrupts

    17/56

    Embedded Software Design, 2005, Pao-Ann Hsiung, National Chung Cheng University17

    Some Common Questions (contd)2 IRQ at same time, which one to service?

    According to prioritiesCan an IRQ interrupt an ISR?

    Yes: default behavior on some CPUs

    Interrupt nesting:80x86 : all IRQs disabled automatically, ISRmust reenable interruptsOthers : automatic, high-priority IRQ caninterrupt low-priority ISR

  • 8/13/2019 4.Interrupts

    18/56

    Embedded Software Design, 2005, Pao-Ann Hsiung, National Chung Cheng University18

    Some Common Questions (contd)Interrupts signaled, while IRQs are disabled?

    Interrupts are remembered by microprocessor Serviced after IRQs are enabled, in priority-order (actually only deferred)

    IRQs disabled, forgot to enable?System halted

    CPU start up: interrupts enabled or disabled?Disabled

    ISR in C? Yes!

  • 8/13/2019 4.Interrupts

    19/56

    Embedded Software Design, 2005, Pao-Ann Hsiung, National Chung Cheng University19

    ISR in C?Non-standard keyword: interrupt (depends on

    CPU)void interrupt vHandleTimerIRQ (void) { }Compiler will automatically add code to saveand restore the contextCompiler will add RETURN at endC code of ISR must setup IVTC is a little slower than assembly, if speed isnot of concern, C can be used to write ISR!

  • 8/13/2019 4.Interrupts

    20/56

    Textbook: An Embedded Software Primer,David E. Simon, Addison Wesley

    20

    The Shared-Data Problem

  • 8/13/2019 4.Interrupts

    21/56

    Embedded Software Design, 2005, Pao-Ann Hsiung, National Chung Cheng University21

    A Powerful ISR DesignCan the ISR do everything you want?

    Yes, but this is very impractical.

    main(){

    int i;// setting up ISRs// do nothing but an empty loopwhile(1)

    i=i+0;}

    SampleISR()

    {

    newVal:= ReadADConverter()

    call StartNewConversion()

    }

    SampleISR()

    {

    newVal:= ReadADConverter()

    call StartNewConversion()

    }

  • 8/13/2019 4.Interrupts

    22/56

    Embedded Software Design, 2005, Pao-Ann Hsiung, National Chung Cheng University22

    A Practical ApproachThe ISR should do the necessary tasks

    moving data from I/O devices to the memory buffer orvice versahandling emergent signalssignaling the task subroutine code or the kernel

    The ISR needs to notify some other procedure to dofollow-up processing.

    Task Code ISR ISR

    Shared Variables

  • 8/13/2019 4.Interrupts

    23/56

    Embedded Software Design, 2005, Pao-Ann Hsiung, National Chung Cheng University23

    Accessing the Shared DataHowever, this may cause the shared data problem.

    ISR

    Task Code

    Interrupt

  • 8/13/2019 4.Interrupts

    24/56

    Embedded Software Design, 2005, Pao-Ann Hsiung, National Chung Cheng University24

    The Shared Data ProblemThe unexpected interrupt

    may cause two readings to be different,even though the two measured temperatureswere always the same.

    How can we improve on this?Compare these temperature measurementsdirectly!

  • 8/13/2019 4.Interrupts

    25/56

    Embedded Software Design, 2005, Pao-Ann Hsiung, National Chung Cheng University25

    Directly TestingThe new code

    ISR

    Task Code

    Testing

  • 8/13/2019 4.Interrupts

    26/56

    Embedded Software Design, 2005, Pao-Ann Hsiung, National Chung Cheng University26

    A Bug Harder to Be Detected The compiler translation

    Interruptible

  • 8/13/2019 4.Interrupts

    27/56

    Embedded Software Design, 2005, Pao-Ann Hsiung, National Chung Cheng University27

    Characteristics of Shared-Data Bug A bug that is very hard to find.

    It does not happen every time the code runs.The program may run correctly most of thetime.

    However, a false alarm may be set offsometimes.

    How can you trace back if the embedded

    system has already exploded?Remember the Therac-25 accidents?

    There were many shared variables!!!

  • 8/13/2019 4.Interrupts

    28/56

    Embedded Software Design, 2005, Pao-Ann Hsiung, National Chung Cheng University28

    Characteristics of Shared-Data Bug

    Whenever ISR and task code share data

    Be suspicious!!!

    Analyze the situation to locate any such bugs!!!

  • 8/13/2019 4.Interrupts

    29/56

    Textbook: An Embedded Software Primer,David E. Simon, Addison Wesley

    29

    Solving the Shared-Data

    Problem

  • 8/13/2019 4.Interrupts

    30/56

    Embedded Software Design, 2005, Pao-Ann Hsiung, National Chung Cheng University30

    Solving Shared-Data ProblemSolution : Disable interrupts before using

    shared data in task code, enable them after!C compilers have functions to disable andenable interrupts

    Processors have instructions to disable andenable interrupts

    Problem : Compilers not smart enough toautomatically add disable/enable instructionsaround shared code. Users must DO IT!

  • 8/13/2019 4.Interrupts

    31/56

    Embedded Software Design, 2005, Pao-Ann Hsiung, National Chung Cheng University31

    Solving Shared-Data Problem:Disabling Interrupts in C

  • 8/13/2019 4.Interrupts

    32/56

  • 8/13/2019 4.Interrupts

    33/56

    Embedded Software Design, 2005, Pao-Ann Hsiung, National Chung Cheng University33

    Atomic Instructions/Sections A More Convenient Way

    Use some atomic instructions supported bythe hardware.

    An instruction is atomic if it cannot be

    interrupted.The collection of lines can be atomic byadding an interrupt-disable instruction.

    A set of instruction that must be atomic for thesystem to work properly is often called acritical section .

  • 8/13/2019 4.Interrupts

    34/56

    Embedded Software Design, 2005, Pao-Ann Hsiung, National Chung Cheng University34

    Another Example A buggy program

    imprecise answer

    Interrupt

  • 8/13/2019 4.Interrupts

    35/56

    Embedded Software Design, 2005, Pao-Ann Hsiung, National Chung Cheng University35

    Interrupts with a Timer Bug:

    lSecondsSinceMidnight() interrupted!iSeconds, iMinutes, iHours changed byvUpdateTime()

    Wrong answer by lSecondsSinceMidnight()

  • 8/13/2019 4.Interrupts

    36/56

    Embedded Software Design, 2005, Pao-Ann Hsiung, National Chung Cheng University36

    Several Possible SolutionsDisable the interrupt

    A buggy solution- Interrupts will not be appropriately enabled.

    A buggy solution

    - Interrupts will not be appropriately enabled.

  • 8/13/2019 4.Interrupts

    37/56

    Embedded Software Design, 2005, Pao-Ann Hsiung, National Chung Cheng University37

    A Better CodeChanging the timing of return()

  • 8/13/2019 4.Interrupts

    38/56

    Embedded Software Design, 2005, Pao-Ann Hsiung, National Chung Cheng University38

    The Best WayThe nested interrupts

  • 8/13/2019 4.Interrupts

    39/56

    Embedded Software Design, 2005, Pao-Ann Hsiung, National Chung Cheng University39

    Another Potential SolutionDoing things in the ISR

  • 8/13/2019 4.Interrupts

    40/56

    Embedded Software Design, 2005, Pao-Ann Hsiung, National Chung Cheng University40

    Is the solution correct?Depends on if the microprocessors registersare large enough to hold a long integer lSecondsSinceMidnight() in assembly

    MOVE R1, (lSecondsToday)

    RETURN

    MOVE R1, (lSecondsToday)

    MOVE R2, (lSecondsToday+1)RETURN

    YES! ATOMIC

    NO! NOT ATOMIC

  • 8/13/2019 4.Interrupts

    41/56

    Embedded Software Design, 2005, Pao-Ann Hsiung, National Chung Cheng University41

    Solution without disabling interrupts

    (needsvolatilekeyword)

  • 8/13/2019 4.Interrupts

    42/56

    Embedded Software Design, 2005, Pao-Ann Hsiung, National Chung Cheng University42

    Compiler optimizations defeat the

    purpose of the solutionSolution :

    read twice lSecondsToday, if not changedthen no interrupt occurred between the reads

    Problems :

    After lReturn = lSecondsToday;, compilersaves lSecondsToday and assumes that it hasnot changed since the last read, thus using the

    saved value instead of newly reading itwhile loop is optimized out of existence!

  • 8/13/2019 4.Interrupts

    43/56

    Embedded Software Design, 2005, Pao-Ann Hsiung, National Chung Cheng University43

    The volatile Keyword Need to declare:

    static volatile long int lSecondsToday;

    Compiler will know that the variable is volatileand each reference is read from memory

    If this keyword is not supported, you can stillget the similar result by turning off thecompiler optimizations .

  • 8/13/2019 4.Interrupts

    44/56

    Textbook: An Embedded Software Primer,David E. Simon, Addison Wesley44

    Interrupt Latency

  • 8/13/2019 4.Interrupts

    45/56

    Embedded Software Design, 2005, Pao-Ann Hsiung, National Chung Cheng University45

    Interrupt LatencyHow fast does my system respond to each

    interrupt?Longest period of interrupt disabled time

    Total execution time of higher priorityinterrupts

    Time for microprocessor to stop execution ,

    switch context , start ISR executionExecute ISR till an initial response

    CPU

    docs

    Simulation, Estimation

  • 8/13/2019 4.Interrupts

    46/56

    Embedded Software Design, 2005, Pao-Ann Hsiung, National Chung Cheng University46

    To Reduce Interrupt LatenciesFactor 4: Initial response of ISR

    Write efficient codeFactor 3: Context switch

    Hardware dependent

    Factor 2: Exec of higher-priority ISRsWrite short ISRs!

    Factor 1: Disable interruptsTo solve shared-data problem,Shorten period

  • 8/13/2019 4.Interrupts

    47/56

    Embedded Software Design, 2005, Pao-Ann Hsiung, National Chung Cheng University47

    Make your ISRs shortFactory Control System

    A task to monitor a gas leak detector Call fire deptShut down affected factory part

    High priorityCall fire dept = several secondsDelays all other lower priority interruptsTherefore, remove telephone call from ISR

  • 8/13/2019 4.Interrupts

    48/56

    Embedded Software Design, 2005, Pao-Ann Hsiung, National Chung Cheng University48

    Disabling InterruptsSystem requirements:

    Disable interrupts for 125 microseconds toread 2 shared temperature variables

    Disable interrupts for 250 microseconds toget time from shared variables

    Respond within 625 microseconds to special

    signals, ISR takes 300 microseconds toexecute

  • 8/13/2019 4.Interrupts

    49/56

    Embedded Software Design, 2005, Pao-Ann Hsiung, National Chung Cheng University

    49

    Worst Case Interrupt Latency

  • 8/13/2019 4.Interrupts

    50/56

    Embedded Software Design, 2005, Pao-Ann Hsiung, National Chung Cheng University

    50

    Worst Case Interrupt LatencyDesign Change :NetworkEnhancement

  • 8/13/2019 4.Interrupts

    51/56

    Embedded Software Design, 2005, Pao-Ann Hsiung, National Chung Cheng University

    51

    Alternatives to Disabling InterruptsTwo variable sets

  • 8/13/2019 4.Interrupts

    52/56

    Embedded Software Design, 2005, Pao-Ann Hsiung, National Chung Cheng University

    52

    Two Variable SetsThis simple mechanism solves the shared-

    data problem, because the ISR will neverwrite into the set of temperatures that the taskcode is reading.

    However, the while-loop may be executedtwice before it sets off the alarm.

  • 8/13/2019 4.Interrupts

    53/56

    Embedded Software Design, 2005, Pao-Ann Hsiung, National Chung Cheng University

    53

    A Queue ApproachThe shared-data problem is also eliminated.

  • 8/13/2019 4.Interrupts

    54/56

    Embedded Software Design, 2005, Pao-Ann Hsiung, National Chung Cheng University

    54

    A Queue Approachmain()

  • 8/13/2019 4.Interrupts

    55/56

    Embedded Software Design, 2005, Pao-Ann Hsiung, National Chung Cheng University

    55

    A Queue ApproachHowever, this code is very fragile.

    Either of these seemingly minor changes cancause bugsIn task code (main):

    Reversing the following order could cause shareddata bug

    Read data firstUpdate iTail pointer second

    If the following statement is non-atomic, shareddata bug could occur

    iTail += 2;

  • 8/13/2019 4.Interrupts

    56/56

    Embedded Software Design, 2005, Pao-Ann Hsiung, National Chung Cheng University

    56

    Shared Data in Therac-25 Software