Download de presentatie
De presentatie wordt gedownload. Even geduld aub
GepubliceerdGeert Smeets Laatst gewijzigd meer dan 10 jaar geleden
1
slide 1Programmatuur voor real-time controleYolande Berbers RTPReal-Time Programmatuur laag-niveau programmeren uit hoofdstuk 15 van Alan Burns, Andy Wellings, "Real-time systems and programming languages", 1997, Addison Wesley
2
RTP slide 2Programmatuur voor real-time controleYolande Berbers overzicht n mechanismen voor hardware input/output n taal-ondersteuning u algemeen u Ada u C n schrijven van device drivers (vb in Ada) (device driver: deel van besturingssysteem of van toepassing dat een bepaald randapparaat aanstuurt)
3
RTP slide 3Programmatuur voor real-time controleYolande Berbers mechanismen voor hardware input/output n 2 klassen computerarchitecturen tov randapparaten u bus voor geheugen, andere bus voor randapparaten u één bus voor alles CPU MEM dev MEM data adressen
4
RTP slide 4Programmatuur voor real-time controleYolande Berbers mechanismen voor hardware input/output (vervolg) n ook twee soorten methoden voor toegang tot randapparaten u twee sets van instructies, één voor elke bus l toegang tot devices via speciale hardware instructies l vaak spreekt men over poorten l vb: Intel 8086 u memory mapped I/O l de randapparaten bestrijken een deel van de adresruimten l schrijven - lezen van een randapparaat gaat zoals schrijven - lezen van het geheugen (zelfde instructies) l vb: M68000 familie, meeste moderne architecturen
5
RTP slide 5Programmatuur voor real-time controleYolande Berbers mechanismen voor hardware input/output (vervolg) n communicatie met randapparaten u via interface van besturingssysteem (system calls) l meestal via bibliotheekroutines l vaak behandelt de interface alle I/O als karakterstroom l device driver is deel van besturingssysteem dat de interactie verzorgt met een bepaald randapparaat u direct vanuit de toepassing l in hogere programmeertalen die mogelijkheden aanbieden voor I/O programmatie l in hogere programmeertaal waar men dicht bij de machine kan schrijven, of waar men assembler kan in schrijven (bv C) l besturingssysteem moet toelaten (meestal beschermd)
6
RTP slide 6Programmatuur voor real-time controleYolande Berbers mechanismen voor hardware input/output (vervolg) n interactie met randapparaat u device driver -> randapparaat l opdrachten l gegevens (bij schrijven) u randapparaat -> device driver l gegevens (bij lezen) l informatie over wanneer opdracht beëindigd is (einde- informatie) l informatie over hoe de opdracht beëindigd is (status- informatie)
7
RTP slide 7Programmatuur voor real-time controleYolande Berbers mechanismen voor hardware input/output (vervolg) n interactie met randapparaten: schematisch processen besturingssysteem device driver device status instructies data interrupts
8
RTP slide 8Programmatuur voor real-time controleYolande Berbers mechanismen voor hardware input/output (vervolg) n interactie met randapparaten: gegevens u via gegevens-register van randapparaat of controler u rechtstreeks in het geheugen via DMA (Direct Memory Access) l CPU geeft beginadres en grootte van buffer door aan randapparaat l randapparaat kan rechtstreeks lezen en schrijven in geheugen l randapparaat moet rechtstreeks aan het geheugen kunnen l gebeurt door cycle stealing l maakt het probleem van voorspellen van duur van programma veel moeilijker n status-informatie (randapparaat -> device driver) u via status-register van randapparaat of controler
9
RTP slide 9Programmatuur voor real-time controleYolande Berbers mechanismen voor hardware input/output (vervolg) n schematisch met DMA besturingssysteem controller status instructies interrupts MEM DMA device driver dev processen
10
RTP slide 10Programmatuur voor real-time controleYolande Berbers mechanismen voor hardware input/output (vervolg) n interactie met randapparaten: opdrachten u via opdracht-register van randapparaat of controler u via kanaalprogramma (channel program) l het randapparaat is intelligent en heeft een processor die kanaalprogramma’s kan uitvoeren l de CPU schrijft zo een programma in het geheugen l randapparaat krijgt beginadres van randapparaat en leest het programma rechtstreeks uit het geheugen s randapparaat moet rechtstreeks aan het geheugen kunnen s dit gebruikt ook altijd DMA s komt veel voor bij main frames, zelden in real-time systemen
11
RTP slide 11Programmatuur voor real-time controleYolande Berbers mechanismen voor hardware input/output (vervolg) n schematisch met kanaalprogramma besturingssysteem kanaal status start-info interrupts MEM DMA device driver prog. controller processen
12
RTP slide 12Programmatuur voor real-time controleYolande Berbers mechanismen voor hardware input/output (vervolg) n einde-informatie (randapparaat -> device driver) u polling of status-gestuurd l herhaaldelijk inspectie van status-register l meestal in een vorm van busy-waiting u interrupt-gestuurd l randapparaat stuurt interrupt als klaar met uitvoeren van opdracht l tijdens wachten op interrupt kan computer andere taak uitvoeren l mechanisme: zie volgende slide
13
RTP slide 13Programmatuur voor real-time controleYolande Berbers mechanismen voor hardware input/output (vervolg) n interrupt-mechanisme: bij optreden van interrupt: contextswitch u running taak wordt onderbroken en toestand wordt bewaard om later herstart te kunnen worden (dit gebeurt door de hardware) s minimaal:programmateller en statuswoord s maximaal:ook alle registers s tussenin: ook een aantal registers u routine geassocieerd met randapparaat dat interrupt genereerde wordt opgeroepen (dit gebeurt door de hardware) u interrupt routine voert uit (dit is software) s indien niet voldoende registers bewaard: bewaart nog registers s deze routine voert uit s herstelt wat eventueel in begin van routine werd bewaard s voert een ‘return from interrupt’ uit u de bewaarde context wordt hersteld en de onderbroken taak kan verder uitvoeren (dit gebeurt door de hardware)
14
RTP slide 14Programmatuur voor real-time controleYolande Berbers mechanismen voor hardware input/output (vervolg) n identificatie randapparaat dat interrupt veroorzaakte u interrupt vector l vector met adressen van interrupt routines l elke element van de vector is geassocieerd met een randapparaat u status-info l via hardware wordt een algemene interrupt-routine opgeroepen l deze ziet in status-info welk randapp. de interrupt veroorzaakte l de gepaste routine wordt opgeroepen u polling l analoog aan status-info maar algemene routine moet alle randapparaten afgaan om te zien wie een interrupt veroorzaakte n identificatie (reden) van interrupt l testen op status van randapparaat
15
RTP slide 15Programmatuur voor real-time controleYolande Berbers mechanismen voor hardware input/output (vervolg) n interrupt-controle u interrupts kunnen aan en af gezet worden l soms via bit in interrupt-toestandstabel of device-status-woord l soms via mask waarbij elke bit een randapparaat voorstelt en 0 of 1 kan bevatten u verschillende niveaus van interrupts en prioriteiten l elke klasse van randapparaten krijgt een niveau toegewezen l processor heeft ook een niveau (veranderlijk) l op elke moment mogen alleen de randapparaten met een hoger niveau als de processor een interrupt veroorzaken, de andere interrupts worden tegengehouden l zo kan men prioriteiten geven aan randapparaten
16
RTP slide 16Programmatuur voor real-time controleYolande Berbers mechanismen voor hardware input/output (vervolg) n twee modellen voor device drivers u één-niveau device driver l meest eenvoudige device driver, komt vaak voor in RT-systemen l behandelt aanvraag per aanvraag s aanvaardt nooit een opdracht voordat de vorige behandeld is l een proces keert pas terug nadat zijn aanvraag behandeld werd processen besturingssysteem device driver device status instructies data interrupts
17
RTP slide 17Programmatuur voor real-time controleYolande Berbers mechanismen voor hardware input/output (vervolg) n twee modellen voor device drivers (vervolg) u twee-niveau device driver (zie ook volgende slide) l bovenste niveau: aanvaardt de aanvragen s dit niveau wordt aangeroepen door processen met aanvragen 4 randapparaat vrij: aanvraag wordt direct doorgegeven 4 randapparaat bezet: aanvraag wordt in wachtlijst geplaatst l onderste niveau: behandelt afwerking van aanvragen s schiet in actie na het behandelen van een aanvraag s wordt aangeroepen door interrupt: werkt interrupt-gestuurd s moet eventueel proces verwittigen dat aanvraag behandeld is 4 wachtlijst niet ledig: haalt aanvraag uit lijst en behandelt die 4 wachtlijst ledig: doet niets
18
RTP slide 18Programmatuur voor real-time controleYolande Berbers mechanismen voor hardware input/output (vervolg) u twee-niveau device driver processen besturingssysteem onderste niveau driver device status instructies data interrupts bovenste niveau driver wachtlijst voegtoeherorden neem uit scheduler wordt wakker slaap
19
RTP slide 19Programmatuur voor real-time controleYolande Berbers eisen voor taalondersteuning n traditioneel gebruik van assembler n taal zoals C biedt ook veel laag-niveau mogelijkheden n talen zoals Modula-1, Ada bieden hoger-niveau ondersteuning
20
RTP slide 20Programmatuur voor real-time controleYolande Berbers eisen voor taalondersteuning (vervolg) n ondersteuning u modulariteit en encapsulatie l om de machine afhankelijke software te scheiden van machine-onafhankelijke software u toegang tot registers vanuit hogere programmeertaal l specificeren van specifieke fysische adressen voor variabelen (normaal kiest de compiler een plaats in adresruimte van proces) l bit-manipulaties leesbaar kunnen doorvoeren u abstract model voor het werken met een randapparaat l randapparaat wordt gemodelleerd als aparte processor l voorstelling van interrupts: zie volgende slide
21
RTP slide 21Programmatuur voor real-time controleYolande Berbers eisen voor taalondersteuning (vervolg) n voorstelling van interrupts in hogere programmeertalen u procedureoproep l werd eigenlijk uitgelegd bij interrupt-mechanisme l gebruikt in C en C++ gebaseerde systemen u sporadisch proces l interrupt is een aanvraag om een sporadisch proces op te starten u asynchroon event l interrupt is een asynchroon event gestuurd naar een handler u synchronisatie zoals van gedeelde gegevens l interrupt komt overeen met een signal bij monitor, met V bij semafoor, met een oproep van protected object l gebruikt in Modula-1, Ada u boodschap: interrupt is als een lege boodschap
22
RTP slide 22Programmatuur voor real-time controleYolande Berbers schrijven van een driver in Ada n Ada voorziet attributen als ondersteuning voor toegang tot registers u size: specificeert het aantal bits voor een variabele u alignment: specificeert dat variabele moet geplaatst worden op bepaalde grenzen (bv woord) u bit-ordering: specificeert big-endian of little-endian u address: specificeert op welk adres de variabele moet n voorstelling van interrupt u protected object om registers (dit zijn gedeelde var.) te beschermen u een parameter-loze procedure van het protected object wordt geassocieerd met de interrupt: deze procedure is de interrupt-routine
23
RTP slide 23Programmatuur voor real-time controleYolande Berbers schrijven van een driver in Ada (vervolg) n toepassing: driver die van een A/D convertor leest u deze driver wordt gerealiseerd in een package Adc_Device_Driver u gebruiker kan enkel de procedure Read oproepen u intern gebruikt de driver een protected object Interrupt_Interface u aan de interrupt van het randapparaat wordt de procedure Handler van het protected object geassocieerd u het protected object heeft verder twee entries l entry Read: – wordt opgeroepen vanuit de procedure Read – een guard houdt volgende oproepen tegen – het randapparaat krijgt de opdracht – de aanvraag wordt geplaatst achter de entry Done l entry Done: – procedure Handler opent de guard van deze entry – entry test op goede afloop – entry opent de guard van Read
24
RTP slide 24Programmatuur voor real-time controleYolande Berbers schrijven van een driver in Ada (vervolg) n randapparaat heeft twee registers u data register van 16 bit dat de gegevens bevat u controle register (combinatie voor status en instructies) waarvan de bits de volgende betekenis hebben BitNaamBetekenis 0A/D StartSet to 1 to start a conversion. 6Interrupt Enable/Disable Set to 1 to enable interrupts. 7DoneSet to 1 when conversion is complete. 8-13ChannelThe converter has 64 analog inputs; the one required is indicated by bits 8-13 15ErrorSet to 1 by converter if device malfunctions
25
package Adc_Device_Driver is Max_Measure : constant := (2**16)-1; type Channel is range 0..63; subtype Measurement is Integer range 0..Max_Measure; procedure Read(Ch: Channel; M : out Measurement); Conversion_Error : exception; private for Channel'Size use 6; -- indicates that six bits only must be used end Adc_Device_Driver; with Ada.Interrupts.Names; use Ada.Interrupts.Names; with System; use System; with System.Storage_Elements; use System.Storage_Elements;
26
package body Adc_Device_Driver is Bits_In_word : constant := 16; -- bits in word word : constant := 2; -- bytes in word type Flag in (Down, Set); type Control_Register is record Ad_Start:Flag;Ienable:Flag; Done:Flag;Ch:Channel; Error:Flag; end record; for Control_Register use -- specifies the layout of the control register record Ad_Startat 0*Word range0..0;-- at word 0 bit 0 Ienableat 0*Word range6..6; Doneat 0*Word range7..7; Chat 0*Word range8..13; Errorat 0*Word range15..15; endrecord; for Control_Register'Size use Bits_In_Word; -- the register is 16 bits long for Control_Register'Alignment use Word; -- on a word boundary for Control_Register'Bit_order use Low_Order_First;
27
type Data_Register is range 0.. Max_Measure; for Data_Register'Size use Bits_In_Word; -- the register is 16 bits long Contr_Reg_Addr: constant Address := To_Address (8#150002#) Data_Reg_Addr: constant Address := To_Address (8#150000#) Adc_Priority: constant Interrupt_Priority := 63; Control_Reg: aliased Control_Register; -- aliased indicates that pointers are used to access it for Control_Reg'Address use Contr_Reg_Addr; -- specifies the address of the control register Data_Reg : aliased Data_Register; for Data_Reg'Address use Data_Reg_Addr; -- specifies the address of the data register
28
protected type Interrupt_Interface(Int_Id : Interrupt_Id; Cr : access Control_Register; Dr : access Data_Register) is entry Read(Chan : Channel; M : out Measurement); private entry Done(Chan : Channel; M : out Measurement); procedure Handler; pragma Attach_Handler (Handler, Int_Id) pragma Interrupt_Priority(Adc_Priority) Interrupt_Occurred : Boolean := False; Next_Request : Boolean := True; end Interrupt_Interface; Adc_Interface : Interrupt_Interface(Names.Adc, Control_Reg'Access, Data_Reg'Access); -- this assumes that 'Adc' is registered as an Interrupt_Id -- in Ada.Interrupts.Names -- 'Access gives the address of the object
29
protected body Interrupt_Interface is entry Read(Chan : Channel; M out Measurement) when Next_Request is Shadow_Register: Control_Register; begin Shadow_Register := (Ad_Start => Set, Ienable => Set, Done => Down, Ch => Chan, Error => Down); -- opdat alle velden in één keer in het register geschreven: -- velden worden eerst in een copie geschreven Cr.all := Shadow_Register;-- het geven van de opdracht Interrupt_Occurred := False; Next_Request := False; requeue Done; end Read; procedure Handler is begin Interrupt_Occurred := True; end Handler;
30
entry Done(ChanChannel; M : out Measurement) when Interrupt_Occurred is begin Next_Request := True; if Cr.Done = Set and Cr.Error = Down then M := Measurement(Dr.all); else raise Conversion_Error; end if; end Done; end Interrupt_Interface;
31
procedure Read(Ch : Channel; M out Measurement) is begin for I in 1..3 loop begin Adc_Interface.Read(Ch,M); return; exception when Conversion_Error => null; end; end loop; raise Conversion_Error; end Read;
32
RTP slide 32Programmatuur voor real-time controleYolande Berbers een voorbeeld-driver in C n analoge operaties op registers als in het vb met Ada n dit is de enige compiler-onafhankelijke manier #define START 01 /* numbers beginning with 0 are in hexadecimal */ #define ENABLE 040 #define ERROR 08000 unsigned short int *register, shadow, channel; register = 0AA12;/* register address */ channel = …; shadow = 0; shadow = (channel << 8) | START | ENABLE; *register = shadow;
Verwante presentaties
© 2024 SlidePlayer.nl Inc.
All rights reserved.