Technology, Innovation & Society Delft VOORBLAD SCHRIFTELIJKE TOETSEN
OPLEIDING
:Elektrotechniek
TOETSCODE
: HM-ES-th3
GROEP
:minor embedded systemen
TOETSDATUM
:16 januari 2012
TIJD
: 11.00-12.30 uur
AANTAL PAGINA’S (incl. dit voorblad) : 6 DEZE TOETS BESTAAT UIT
: 6 open vragen
GEBRUIK HULPMIDDELEN TOEGESTANE HULPMIDDELEN
: Ja : Boek over de programmeertaal C
OVERIGE OPMERKINGEN
:
OPSTELLER VAN DEZE TOETS
: John Visser
NAAM 2E LEZER
:Harry Broeders
(aantal)
Vraag 1 In de bijlage staat een deel van de system.h en de altera_avalon_pio_reg.h file. A:Geef een C programma waarin de switches uitgelezen worden zonder dat er gebruik gemaakt wordt van de HAL, hierbij mag er van worden uitgegaan dat de CPU geen data cache heeft. Het resultaat wordt in een variabele gezet. 5p B:Geef een C programma waarin de switches uitgelezen worden door gebruik te maken van de HAL. Het resultaat wordt in een variabele gezet. 5p
Vraag 2 In een klein embedded systeem wordt in een interrupt service routine die elke milliseconden opkomt de remafstand uitgerekend. De formule om de remafstand uit te rekenen is als volg: remafstand =
snelheid∗snelheid 2∗remvertraging
Het uitreken van de remafstand wordt in de interrupt service routine als volgt gedaan: #define REMVERTRAGING 8 //remvertraging van het toestel volatile float remafstand; ISR(remvertraging) { float snelheid,s_kwadraad; snelheid=lees_snelheid(); s_kwadraad=snelheid * snelheid; remafstand =s_kwadraad/(2*REMVERTRAGING); } Uit onderzoek blijkt dat het berekenen van de remafstand te lang duurt. Er wordt besloten om de berekening met fixed-point te doen. Herschrijf de interrupt service routine zodat de berekening gedaan wordt met fixed-point getallen. De fixed-point getallen worden als volgt gedefinieerd: M.N 16.16 20p
Vraag 3 Op een embedded systeem is het uc/os-II operating systeem geïnstalleerd met 2 lopende taken. Het uc/os-II operating systeem maakt voor elke taak ook een task control block aan. A:Wat is het nut van een task control blok. 5P B:Het uc/os-II operating systeem is preëmptieve, dit houdt in dat het operating systeem er voor zorgt dat een andere taak de processortijd krijgt. Geef een korte beschrijving hoe het operating systeem te werk gaat bij een taak wisseling. 15p
Vraag 4 A:Geef in een korte beschrijving aan of een driver werkt in de kernel-space of in de user-space of in beide. 5p B:Geef in een korte beschrijving aan hoe wordt er van de ene space naar de andere space gegaan kan worden. 5p
Vraag 5 Gegeven het onderstaande embedded-systeem.
beginadres 0x1000 geheugenblok1
2K
Processor
databus
8 bit databus
beginadres 0x2000
16 bit adresbus
Decoder
geheugenblok2
4K
adresbus
A: Beschrijf een manier in pseudo-code om van het betreffende embedded systeem te testen of de geheugen-devices op de print aanwezig zijn. 5P B: Beschrijf in pseudo-code hoe de databus van het betreffende embedded systeem het best getest kan worden. 10P
Vraag 6 Er wordt besloten om de ontwikkelde software uitsluitend via een “blackbox-test” te testen. A:Wat zijn de sterke en zwakke punten van een blackbox-test. 8p B:Beschrijf een testprocedure van een blackbox-test. 7p
Bijlage deel uit de system.h file #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define
ALT_MODULE_CLASS_Switches altera_avalon_pio SWITCHES_BASE 0x4000 SWITCHES_BIT_CLEARING_EDGE_REGISTER 0 SWITCHES_BIT_MODIFYING_OUTPUT_REGISTER 0 SWITCHES_CAPTURE 0 SWITCHES_DATA_WIDTH 8 SWITCHES_DO_TEST_BENCH_WIRING 0 SWITCHES_DRIVEN_SIM_VALUE 0x0 SWITCHES_EDGE_TYPE "NONE" SWITCHES_FREQ 50000000u SWITCHES_HAS_IN 1 SWITCHES_HAS_OUT 0 SWITCHES_HAS_TRI 0 SWITCHES_IRQ -1 SWITCHES_IRQ_INTERRUPT_CONTROLLER_ID -1 SWITCHES_IRQ_TYPE "NONE" SWITCHES_NAME "/dev/Switches" SWITCHES_RESET_VALUE 0x0 SWITCHES_SPAN 16 SWITCHES_TYPE "altera_avalon_pio"
De altera_avalon_pio_reg.h. #define IOADDR_ALTERA_AVALON_PIO_DATA(base) #define IORD_ALTERA_AVALON_PIO_DATA(base) #define IOWR_ALTERA_AVALON_PIO_DATA(base, data)
__IO_CALC_ADDRESS_NATIVE(base, 0) IORD(base, 0) IOWR(base, 0, data)
#define IOADDR_ALTERA_AVALON_PIO_DIRECTION(base) __IO_CALC_ADDRESS_NATIVE(base, 1) #define IORD_ALTERA_AVALON_PIO_DIRECTION(base) IORD(base, 1) #define IOWR_ALTERA_AVALON_PIO_DIRECTION(base, data) IOWR(base, 1, data) #define IOADDR_ALTERA_AVALON_PIO_IRQ_MASK(base) __IO_CALC_ADDRESS_NATIVE(base, 2) #define IORD_ALTERA_AVALON_PIO_IRQ_MASK(base) IORD(base, 2) #define IOWR_ALTERA_AVALON_PIO_IRQ_MASK(base, data) IOWR(base, 2, data) #define IOADDR_ALTERA_AVALON_PIO_EDGE_CAP(base) __IO_CALC_ADDRESS_NATIVE(base, 3) #define IORD_ALTERA_AVALON_PIO_EDGE_CAP(base) IORD(base, 3) #define IOWR_ALTERA_AVALON_PIO_EDGE_CAP(base, data) IOWR(base, 3, data) #define IOADDR_ALTERA_AVALON_PIO_SET_BIT(base) __IO_CALC_ADDRESS_NATIVE(base, 4) #define IORD_ALTERA_AVALON_PIO_SET_BITS(base) IORD(base, 4) #define IOWR_ALTERA_AVALON_PIO_SET_BITS(base, data) IOWR(base, 4, data) #define IOADDR_ALTERA_AVALON_PIO_CLEAR_BITS(base) __IO_CALC_ADDRESS_NATIVE(base, 5) #define IORD_ALTERA_AVALON_PIO_CLEAR_BITS(base) IORD(base, 5) #define IOWR_ALTERA_AVALON_PIO_CLEAR_BITS(base, data) IOWR(base, 5, data)
/* Defintions for direction-register operation with bi-directional PIOs */ #define ALTERA_AVALON_PIO_DIRECTION_INPUT 0 #define ALTERA_AVALON_PIO_DIRECTION_OUTPUT 1