Technology, Innovation & Society Delft VOORBLAD SCHRIFTELIJKE TOETSEN OPLEIDING TOETSCODE GROEP :Elektrotechniek : HM-ES-th3 :minor embedded systemen TOETSDATUM :16 januari 2012 TIJD : 11.00-12.30 uur AANTAL PAGINA S (incl. dit voorblad) : 6 DEZE TOETS BESTAAT UIT GEBRUIK HULPMIDDELEN TOEGESTANE HULPMIDDELEN : 6 open vragen (aantal) : Ja : Boek over de programmeertaal C OVERIGE OPMERKINGEN : OPSTELLER VAN DEZE TOETS : John Visser NAAM 2 E LEZER :Harry Broeders
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. B:Geef een C programma waarin de switches uitgelezen worden door gebruik te maken van de HAL. Het resultaat wordt in een variabele gezet. 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. 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. B:Geef in een korte beschrijving aan hoe wordt er van de ene space naar de andere space gegaan kan worden. 1
Vraag 5 Gegeven het onderstaande embedded-systeem. beginadres 0x1000 geheugenblok1 2K Processor databus 8 bit databus 16 bit adresbus beginadres 0x2000 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. B:Beschrijf een testprocedure van een blackbox-test. 8p 7p
Bijlage deel uit de system.h file #define ALT_MODULE_CLASS_Switches altera_avalon_pio #define SWITCHES_BASE 0x4000 #define SWITCHES_BIT_CLEARING_EDGE_REGISTER 0 #define SWITCHES_BIT_MODIFYING_OUTPUT_REGISTER 0 #define SWITCHES_CAPTURE 0 #define SWITCHES_DATA_WIDTH 8 #define SWITCHES_DO_TEST_BENCH_WIRING 0 #define SWITCHES_DRIVEN_SIM_VALUE 0x0 #define SWITCHES_EDGE_TYPE "NONE" #define SWITCHES_FREQ 50000000u #define SWITCHES_HAS_IN 1 #define SWITCHES_HAS_OUT 0 #define SWITCHES_HAS_TRI 0 #define SWITCHES_IRQ -1 #define SWITCHES_IRQ_INTERRUPT_CONTROLLER_ID -1 #define SWITCHES_IRQ_TYPE "NONE" #define SWITCHES_NAME "/dev/switches" #define SWITCHES_RESET_VALUE 0x0 #define SWITCHES_SPAN 16 #define SWITCHES_TYPE "altera_avalon_pio" De altera_avalon_pio_reg.h. #define IOADDR_ALTERA_AVALON_PIO_DATA(base) IO_CALC_ADDRESS_NATIVE(base, 0) #define IORD_ALTERA_AVALON_PIO_DATA(base) IORD(base, 0) #define IOWR_ALTERA_AVALON_PIO_DATA(base, data) 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