Tentamen. Datorteknik och realtidssystem

Storlek: px
Starta visningen från sidan:

Download "Tentamen. Datorteknik och realtidssystem"

Transkript

1 Tentamen Datorteknik och realtidssystem, TSEA81 Datum Lokal KÅRA Tid 8-12 Kurskod TSEA81 Provkod TEN1 Kursnamn Datorteknik och realtidssystem Institution ISY Antal frågor 4 Antal sidor (inklusive denna sida) 17 Kursansvarig Andreas Ehliar Lärare som besöker skrivsalen Andreas Ehliar Telefon under skrivtiden Besöker skrivsalen Cirka 9 och 11 Kursadministratör Anita Kilander Tillåtna hjälpmedel Inga Poäng Betyg Betygsgränser U Important information Alla svar ska ha en motivation om inget annat anges. Om du svarar med programkod räknas kommentarer i programkoden som kommentarer. Svar som ej är motiverade kan leda till poängavdrag Om inget annat anges ska du anta att schemaläggningsmetoden som används är priority based, preemptive, scheduling Om du är osäker på det exakta namnet för en viss funktion, skriv en kommentar om vad funktionen gör så kommer vi troligtvis att förstå vad du menar. (Detsamma gäller syntaxen för programspråket C.) Lycka till! 1

2 Fråga 1: (24p) Systembeskrivning Du har fått i uppgift att förbättra ett inbyggt system som (bland annat) är baserat på två stycken enklare 8-bitars processorer där processor 1 kör p1 task och processor 2 kör p2 task. Dessa tasks är ansvariga för att systemet uppfyller följande specifikationer: p1 task samplar värden från port A i 500 Hz, samt skickar ut en filtrerad version av dessa värden på port B i 500 Hz efter en kort fördröjning. Dvs, periodtiden är 2 ms. (Dock finns det möjlighet till tillfälliga variationer i periodtiden, se nedan.) I p1 task är det viktigt att intervallet mellan anrop till get value from porta() håller sig mellan 1.95 ms och 2.05 ms så länge intervallet i medel håller sig på 2.0 ms. I p1 task är det också viktigt att intervallet mellan anrop till set portb value() håller sig mellan 1.95 ms och 2.05 ms. Tiden mellan det att p1 task läser in ett värde samt att det filtrerade värdet skickas ut får vara max 3 ms. p2 task fungerar på liknande sätt. Skillnaden här är att samplingsfrekvensen är 200 Hz (periodtid 5ms), samt att tiden mellan anrop till get value from portc() respektive set portd value() får variera mellan 4.95 ms och 5.05 ms även om medeltiden på detta intervall ska vara 5 ms räknat över en längre tid. Slutligen får det gå max 8 ms från det att get value from portc() anropas tills dess att set portb value() anropas med det filtrerade värdet. (Till skillnad från i laborationerna, där tidupplösningen i SimpleOS är 20 ms, så är SimpleOS i denna uppgift konfigurerad så att tidupplösningen på si wait until time är 1 ms.) Utvalda delar av källkoden Källkoden för dessa två tasks finns nedan. De är identiska förutom följande detaljer: De använder inte samma parametrar till sina FIR-filter De använder inte samma in och ut-portar De väntar olika många millisekunder i sina anrop till si time add n ms. void p1_task(void) /* Initiera parametrar som krävs för FIR-filtret */ const int LENGTH = 25; int buffer[length]; int h[length]; clear_buffer(buffer, LENGTH); initialize_constants(h,length, "filter_coefficients.txt"); int next_val = 0; si_time next_time; si_get_current_time(&next_time); while(1) sleep_until(&next_time, 2); // Vänta på nästa sample /* Sampla ett värde från port A, skicka ut ett * förberäknat värde på port B samt beräkna nästa * värde som ska skickas till port B */ int in_val = get_value_from_porta(); set_portb_value(next_val); next_val = fir_filter(in_val, buffer, h, LENGTH); 2

3 void p2_task(void) /* Initiera parametrar som krävs för FIR-filtret */ const int LENGTH = 50; int buffer[length]; int h[length]; clear_buffer(buffer, LENGTH); initialize_constants(h,length, "filter2_coefficients.txt"); int next_val = 0; si_time next_time; si_get_current_time(&next_time); while(1) /* Vänta på nästa sample */ sleep_until(&next_time, 5); /* Sampla ett värde från port C, skicka ut ett * förberäknat värde på port D samt beräkna nästa * värde som ska skickas till port D */ int in_val = get_value_from_portc(); set_portd_value(next_val); next_val = fir_filter(in_val, buffer, h, LENGTH); // Hjälpfunktionen sleep_until() används för att räkna upp tiden // angiven i t med specificerat antal millisekunder samt sova till // denna tidpunkt void sleep_until(si_time *t, int ms) si_time_add_n_ms(t, ms); si_wait_until_time(t); // Du behöver troligtvis inte veta hur funktionen fir_filter() fungerar // för att lösa uppgiften, men om du känner att du behöver veta detta så // är den inkluderad här nedan: int fir_filter(int in_val, int *x, int *h, unsigned int length) unsigned int i; long sum = 0; // Falta x med h, samt skifta x ett steg så att vi är redo // för nästa anrop till fir_filter() for(i=0; i < length - 1; i++) x[i] = x[i+1]; sum = sum + x[i] * h[i]; // Använd samt spara ner det senaste inkomna värdet i x sum = sum + in_val * h[length-1]; x[length-1] = in_val; return sum; 3

4 Tidsåtgång för olika delar av programmet En approximativ kostnad för att köra funktionen fir filter (på en välkänd 8-bitars processor) är cirka 40 klockcykler för varje iteration (dvs 40*length). För enkelhetens skull antar vi att övriga delar av programmet inte tar någon tid att köra, inklusive byte mellan tasks. (Undantaget funktioner som måste vänta i stil med si wait until time(), si sem wait(), och så vidare.) Under dessa parametrar kommer alltså anropet till fir filter() i p1 task ta 1000 klockcykler och anropet till fir filter() i p2 task ta 2000 klockcykler. Frågeställning (a) (2p) Givet koden samt begränsningarna ovan, vilka är den minsta klockfrekvensen som processor 1 respektive processor 2 kan köras i för att kraven listade i systembeskrivningen ovan kommer att uppfyllas? (Det är fullt acceptabelt att svara i potensform eller bråkform.) (b) (6p) För att minska produktionskostnaden för detta system är tanken att p1 task och p2 task ska köras på samma processor. Följande main-funktion används för att starta systemet: int main(void) si_kernel_init(); // Initiera SimpleOS /* skapa p1 och p2 (p1 schemaläggs med högst prioritet) */ si_task_create(p1_task, &P1_Task_Stack[STACK_SIZE-1], 10); si_task_create(p2_task, &P2_Task_Stack[STACK_SIZE-1], 20); si_kernel_start(); // Och starta kärnan /* will never be here! */ return 0; Till en början var det tänkt att denna processor skulle köras i 2 MHz. Det visar sig dock att p2 task (som körs med lägst prioritet) ej längre uppfyller specifikationen som ges i systembeskrivningen ovan. Förklara varför p2 task ej uppfyller specifikationerna samt räkna ut vilken klockfrekvens som processorn skulle behöva ha för att kraven ska uppfyllas, givet att inga modifikationer till källkoden får göras. Tips: För full poäng bör du rita ett diagram som över tid visar vad som händer i systemet (c) (8p) Tyvärr går det inte att få tag i en processor av rätt modell som klarar av att köra i den klockfrekvens som du bör ha räknat ut i deluppgift b. Du måste nu skriva om programmet så att kraven i systemspecifikationerna är lättare att uppnå. Ett möjligt sätt att lösa problemet är att ersätta p1 task och p2 task med en ny task som löser både p1 task och p2 tasks uppgifter. Du får ej ändra i funktionen fir filter(). Skriv denna task, samt räkna ut vilken ungefärlig klockfrekvens processorn nu måste köras i för att systemspecifikationerna ska uppfyllas. void combined_task(void) /* Initiera parametrar som krävs för FIR-filtret som hör till P1*/ const int LENGTH1 = 50; int buffer1[length]; int h1[length]; clear_buffer(buffer1, LENGTH1); initialize_constants(h1,length1, "filter_coefficients.txt"); int next_val1 = 0; /* Initiera parametrar som krävs för FIR-filtret som hör till P2*/ const int LENGTH2 = 50; int buffer2[length]; 4

5 int h2[length]; clear_buffer(buffer2, LENGTH2); initialize_constants(h2,length1, "filter2_coefficients.txt"); int next_val2 = 0; si_time next_time; si_get_current_time(&next_time); while(1) // Din uppgift är att visa vad som ska stå här! För // att minska på skrivandet kan du förkorta ner // funktionsnamn/funktionsanrop (så länge resultatet // blir begripligt) // Exempel: in_val2 = portc istället för get_value_from_portc(), // portd = next_val2 istället för set_portd_value(next_val2) // etc (d) (8p) Ett annat sätt att lösa uppgiften är att dela upp p1 task i två olika tasks: s1 task (som samplar indata från porta samt skickar utdata till port b) f1 task (som anropar fir filter() med lämpliga parametrar på den indata som s1 task läst in, samt skickar tillbaka utdata ifrån fir filter till s1 task) Visa vilka ändringar i programmet som behöver göras för att detta ska fungera. Glöm ej bort att beskriva vilken priortet som s1 task, f1 task samt p2 task ska ha! Tips: Använd symmetrisk synkronisering för att kommunicera mellan s1 task och f1 task. Räkna även ut vilken klockfrekvens som processorn behöver köras i för att specifikationerna givna i systembeskrivningen ovan ska uppfyllas. 5

6 Fråga 2: (16p) Du har fått i uppdrag att granska, samt om nödvändigt förbättra, stabiliteten i en programvara som används i bolaget Säker Finans ABför att hantera insättningar i insättningsautomater, uttag ifrån bankomater, kreditkortsautomater, samt en enkel internetbank. Till att börja med var detta program skrivet för att köras i endast en task, men detta ledde ibland till långa svarstider i samband med att exempelvis en bankomat tog för lång tid på sig att kommunicera med centraldatorn. För att bättra på svarstiderna har det beslutats att varje bankomat, insättningsautomat, kreditkortsläsare, samt användare som är inloggad i internetbanken ska få en egen task. 1 struct account 2 int64_t balance; // Belopp på kontot (i öre) 3 int64_t reserved; // Reserverat belopp (i öre) 4 int32_t interest; // Kontots ränta (Alltid noll) 5 uint64_t customerid; // Kontoinnehavarens personnummer 6 // Följande medlemsvariabler används när kontoinnehavaren vill 7 // göra ett inköp online 8 int online_active; // Satt till ett om en butik vill dra pengar vid onlineköp 9 char *online_store; // Namn på den butik som vill dra pengar online 10 int64_t online_amount; // Belopp butiken vill dra via kreditkort (i öre) 11 ; #define MAX_ACCOUNTS struct account accounts[max_accounts]; int withdraw_sanitycheck(unsigned int accountnumber, int64_t amount, uint64_t customerid) if(amount < 0) 19 return 0; if(accounts[accountnumber].customerid!= customerid) 23 // Försökte ta ut pengar från ett konto du ej har tillgång till 24 return 0; return 1; // Ta ut pengar från angivet konto, returnera ett om det lyckades, noll annars. 30 int withdraw(unsigned int accountnumber, int64_t amount, uint64_t customerid) if(!withdraw_sanitycheck(accountnumber, amount, customerid)) 33 return 0; // Något gick snett int64_t balance = accounts[accountnumber].balance; if(balance - amount < 0) 39 // Täckning saknas 40 return 0; accounts[accountnumber].balance = balance - amount; 44 return 1; // Transaktionen lyckades 45 6

7 (a) (4p) Förklara för dina kollegor på Säker Finans AB varför funktionen withdraw() i programmet ovan ej kommer att fungera om det körs på en dator som har flera processorer som tillåter två tasks att köra samtidigt på olika processorer (eller processorkärnor). Du kan anta att de har de förkunskaper som krävs för TSEA81, men att de inte har läst TSEA81 (eller motsvarande). (b) (4p) Rätta till buggarna i kodlistningen ovan genom en lämplig synkroniseringsmekanism som kopplas till det aktuella bankkontot. (Synkroniseringen ska ske på ett så granulärt sätt som möjligt, det vill säga, en operation som pågår mot ett visst bankkonto ska inte kunna hindra en annan task att starta en operation mot ett annat bankkonto.) Ange också om du behöver göra något speciellt i den rutin som initierar fälten i struct account. (c) (8p) Förutom funktionen withdraw() ovan finns det också en funktion online withdraw() i systemet. Denna funktion anropas i samband med ett onlineköp på Internet för att låta kontoinnehavaren godkänna överföringen i internetbanken. I samband med att användaren loggar in på internetbanken startas online banking task() och körs tills användaren loggar ut (du behöver dock inte implementera något som har med utloggningen att göra i denna uppgift, vi kan anta att processen avslutas på något annat sätt). 1 int online_withdraw(unsigned int accountnumber, int64_t amount, 2 uint64_t customerid, char *store) 3 4 if(!withdraw_sanitycheck(accountnumber, amount, customerid)) 5 return 0; // Något gick snett if(accounts[accountnumber].online_active) 9 // Vi tillåter enbart en butik i taget att försöka dra 10 // pengar ifrån ett och samma konto 11 return 0; // Reservera beloppet 15 accounts[accountnumber].balance = accounts[accountnumber].balance - amount; 16 accounts[accountnumber].reserved = accounts[accountnumber].reserved + amount; accounts[accountnumber].online_store = store; 19 accounts[accountnumber].online_amount = amount; 20 accounts[accountnumber].online_active = 1; if(ask_user_to_authenticate_transaction(accountnumber) == 0) 23 // Användaren nekade denna överföring, återställ 24 // kontot som det var tidigare 25 accounts[accountnumber].balance = accounts[accountnumber].balance + amoun // Ta bort reservationen, oavsett om användaren godkände eller nekade överföringe 30 accounts[accountnumber].reserved = accounts[accountnumber].reserved - amount; accounts[accountnumber].online_active = 0; return 1; // Forts på nästa sida 7

8 37 // Denna rutin anropas av online_withdraw() för att kommunicera med 38 // online_banking_task(). 39 int ask_user_to_authenticate_transaction(unsigned int accountnumber) // Denna funktion ska du implementera // Returnera 1 om användaren ville godkänna transaktionen 44 // Returnera 0 om användaren inte ville godkänna transaktionen // Denna task startas när användaren loggat in på internetbanken med 49 // ett visst kontonummer och ska vänta på att en online-transaktion 50 // påbörjas och då fråga användaren huruvida denna transaktion ska 51 // godkännas void online_banking_task(void) unsigned int accountnumber = get_accountnumber(); 56 while(1) 57 // Du ska implementera den här delen av denna task // Du behöver dock inte bekymra dig om hur den avslutas vid 60 // utloggning (någon annan del av systemet sköter detta) // För att fråga användaren om en viss transaktion ska godkännas 64 // kan du använda denna funktion som ser till så att användaren får 65 // se en dialogruta som dels anger vilken butik som vill dra pengar 66 // ifrån detta konto och dels hur mycket pengar som ska dras. 67 // 68 // Om användaren godkänner transaktionen returneras 1, annars 0 69 int ask_user_to_acknowledge(unsigned int accountnumber, 70 const char *store_name, 71 int64_t amount); Din uppgift är att rätta till eventuella buggar i dessa funktioner, samt implementera funktionerna ask user to authenticate transaction() och online banking task(). En monitor ska användas för att sköta kommunikationen däremellan. (Du behöver inte skriva av hela online withdraw()-funktionen, det räcker att du i din tenta skriver exempelvis Mellan rad 48 och 49 ska följande rader läggas in: ) 8

9 Fråga 3: (8p) (a) (4p) Diskutera varför det är en dålig ide att styra åtkomsten till gemensamma variabler via en semafor om ett av de ställen som behöver komma åt variablerna är en interrupt-rutin. Nedan följer ett utdrag ur en hypotetisk applikation som visar ett icke-fungerande sätt att synkronisera åtkomst till gemensamma variabler: // Detta är en interrupt-hanterare void gpio_interrupt(void) int val = get_gpio_port(); si_sem_wait(&param.mutex); param.val = val; si_sem_signal(&param.mutex); // Detta är en helt vanlig funktion som aldrig anropas ifrån ett // interrupt: int calculate_xyzzy(void) si_sem_wait(&param.mutex); int retval = param.val * / ; si_sem_signal(&param.mutex); return retval; (b) (4p) Visa hur rutinen ovan kan skrivas om så att ett lämpligare sätt att används för att synkronisera åtkomsten till de delade variablerna i structen param. Fråga 4: (12p) Systembeskrivning Följande kod är tänkt att användas i en inspektionsutrustning som används för att inspektera kretskort. Detta system består bland annat av en motoriserad släde som kan flytta en kamera i X och Y-led så att foton kan tas av kretskortet ifrån olika positioner. Slädens maxfart är 1000 mm / s i X respektive Y-led. Det finns två tasks i systemet som du behöver känna till i denna uppgift: photo task(): Denna task är ansvarig för att kommunicera med kameran samt att regelbundet ta foton av kretskortet under kameran. Varje foto komprimeras och märks med aktuell position för att senare lagras undan i en photo list för senare analys. Denna task ska köras med uppdateringsfrekvensen 10 Hz. Felet hos positionsangivelsen som sparas ner ska vara max 2mm i X respektive Y-led. position task(): Denna task läser av positionen med frekvensen 100 Hz och uppdaterar structen camera med nuvarande position. Denna task körs med högst prioritet i systemet. struct camera_info si_semaphore mutex; // Skyddar åtkomsten till olika fält i int x; // Nuvarande x-position (i enheten mm) int y; // Nuvarande y-position (i enheten mm) struct photo_list photos; ; static struct camera_info camera; 9

10 void setx(struct camera_info *c, int x) si_sem_wait(&c->mutex); // Protect access to shared variable c->x = x; si_sem_signal(&c->mutex); void sety(struct camera_info *c, int y) si_sem_wait(&c->mutex); // Protect access to shared variable c->y = y; si_sem_signal(&c->mutex); void record_photo_and_add_to_list(struct camera_info *c) struct photo p; // Läs av positionen p.x = c->x; p.y = c->y; // Ta och spara ner fotot för senare analys take_photo(&p); // Denna rutin tar cirka 10 ms att köra compress_photo(&p); // Denna rutin tar cirka 80 ms att köra add_photo_to_list(&c->photos, &p); void photo_task(void) si_time next_time; si_get_current_time(&next_time); while(1) // Spara ner bilder i 10 Hz. sleep_until(&next_time, 100); si_sem_wait(&camera.mutex); // Skydda åtkomsten till delade variabler i camera /* Den här rutinen tar ett foto och lagrar detta för senare åtkomst */ record_photo_and_add_to_list(&camera); si_sem_signal(&camera.mutex); void position_task(void) si_time next_time; si_get_current_time(&next_time); while(1) int x,y; // För att hålla systemet stabilt behöver vi läsa av positionen i 100 Hz sleep_until(&next_time, 10); 10

11 // Hämta och spara ner positionen för användning av andra delar av systemet get_position(&x,&y); setx(x); sety(y); (a) (4p) Det finns ett fel i detta program som gör så att en av dessa två tasks kommer att ha svårt att möta de deadlines som är uppsatta (dvs att position task ska uppdatera parametrarna i cirka 100 Hz samt att photo task ska ta bilder i cirka 10 Hz). Vad är det för fel samt hur kan du rätta till detta fel? (b) (4p) Det finns ett annat fel här som gör så att åtkomst till delade variabler ej sker på korrekt sätt så att felaktiga mätvärden kommer att lagras ibland. Varför kan detta ske, samt hur fixar du till denna bugg? (c) (4p) Antag att buggen i uppgift a har upptäckts och rättats till innan systemet levererades till kund men att buggen i uppgift b ej hittades innan slutleveransen. Ett antal kunder som köpt inspektionsutrustningen har noterat att systemet tycks ge felaktiga mätvärden i vissa fall, två exempel på detta finns nedan i figur 1 och 2: Kamerans startposition Kamerans slutposition Kamerans tänkta körbana Felet uppmättes här Figur 1: Felmätning 1: Uppmätt fel i kamerans position: 20 mm i X-led och 15 mm i Y-led. Kamerans startposition Kamerans slutposition Kamerans tänkta körbana Figur 2: Felmätning 2: Uppmätt fel i kamerans position: 1 mm i X-led och 7 mm i Y-led. Utifrån informationen ovan, kan du säga till din chef att det är troligt att buggen som du hittat i deluppgift b är ansvarig för de felmätningar som kunderna har skickat in? 11

12 Lösningsförslag, uppgift 1 Del a Processor 1 måste köra fir filter(), som tar 1000 klockcykler på 2 ms. Givet att alla andra delar av programmet tog noll tid ger detta trivialt att den minsta klockfrekvensen för P1 är 1000/0.002s = 500kHz. På samma sätt ges frekvensen för Processor 2 som 2000/0.005s = 400kHz. Del b Det som händer från tid 0 är som följer (där I/O motsvarar skrivning/läsning ifrån portarna): Tid Process 1 Process 2 0ms sleep sleep 2ms I/O 2-2.5ms fir sleep 4ms I/O 4-4.5ms fir sleep 5ms I/O 5-6ms fir 6ms I/O sleep 6-6.5ms fir sleep 8ms I/O 8-8.5ms fir sleep 10ms I/O ms fir 10.5ms sleep I/O ms fir sleep 12ms I/O ms fir sleep 14ms I/O ms fir sleep 15ms I/O 15-16ms fir sleep... Och så vidare... Problemet här är att vid tiden 10.5ms har det tagit 5.5ms sedan P2 körde sin I/O medans den maximala tiden får vara 5.05ms. För att detta ska gå ihop måste P1 kunna köra sin fir-process på 0.05ms, vilket skulle motsvara en klockfrekvens på 1000/(0.05) 10 3 = 20MHz. Del c Följande variant fungerar som huvudloop: int nv1 = 0,nv2 = 0,iv1,iv2; while(1) sleep_until(&next_time, 2); iv1 = porta; 12

13 portb = nv1; nv1 = fir(iv1,...); sleep_until(&next_time, 2); iv1 = porta; portb = nv1; nv1 = fir(iv1,...); sleep_until(&next_time, 1); iv2 = portc; portd = nv2; nv2 = fir(iv2,...); sleep_until(&next_time, 1); iv1 = porta; portb = nv1; nv1 = fir(iv1,...); sleep_until(&next_time, 2); iv1 = porta; portb = nv1; nv1 = fir(iv1,...); sleep_until(&next_time, 2); iv1 = porta; // Det här är kärnan i lösningen, vi ser till så att vi samplar och portb = nv1; // skickar ut värden för både P1 och P2 vid precis rätt tidpunkt, iv2 = portc; // sedan har vi (relativt) gott om tid på oss att räkna ut nästa portd = nv2; // värde för P1 och P2 innan vi måste sample ett värde för P1 igen i nv1 = fir(iv1,...); // början av loopen. nv2 = fir(iv2,...); De två mest krävande delarna av denna loop är dels anropet till fir för P2 i mitten som måste köras klart på en millisekund innan vi ska sampla för P1 samt de två anropen till fir-filtret längst ner som ska köras klart på 2 millisekunder. Av dessa är den tidigare värst, då 2000 klockcykler ska rymmas på 1 millisekund vilket ger en minsta klockfrekvens på 2 MHz. Del d En möjlig lösning: int in_val1; int next_val1 = 0; // Sample task for filter 1 void s1_task(void) // next_time initieras som i p1_task while(1) sleep_until(&next_time, 2); in_val1 = porta; portb = next_val1; si_sem_signal(&p1_mutex_req); si_sem_wait(&p1_mutex_ack); 13

14 // Filter task for first filter void f1_task(void) // Parametrar och variabler för FIR-filtret initieras som i // p1_task while(1) si_sem_wait(&p1_mutex_req); next_val1 = fir_filter(in_val1,buffer, h, LENGTH); si_sem_signal(&p1_mutex_ack); main() modifieras sedan så att både p1 mutex req och p1 mutex ack initieras till 0. Slutligen så måste s1 task ha högst prioritet, p2 task näst högst, och f1 task lägst. Det värsta fallet i denna implementation är om s1 task blir körbar vid samma tidpunkt som p2 task blir körbar. I detta fall kommer s1 task att läsa/skriva portar och sedan göra f1 task körklar. Innan f1 task kan starta måste dock p2 task köras. p2 task startas och läser/skriver portar för att sedan köra FIR-filtret (som tar 2000 klockcykler). Sedan körs f1 task (som tar 1000 klockcykler). Närmaste deadline är 2 ms senare då s1 task vill läsa/skriva portarna igen. Det vill säga, processorn måste klara att köra 3000 klockcykler på 2 ms. Klockfrekvensen är alltså 3000/0.002 = 1.5M Hz. Kommentar till uppgiften Notera att det finns ett helt orealistiskt antagande i denna uppgift samt ett antagande som ofta inte går att göra: Allting förutom FIR-filtret tar noll tid (egentligen helt orealistiskt) FIR-Filtret tar alltid lika lång tid att köra (realistiskt på vissa processorer, orealistiskt på andra processorer) Syftet med att räkna klockcykler är att man ska se att det är en magnitud i skillnad mellan den naiva lösningen (att ta den existerande koden och köra rakt av) samt att anpassa koden (på olika sätt) för att köras på en processor istället för två olika processorer. I C-uppgiften är det upp till programmeraren att schemalägga allting manuellt. Detta är en möjlighet i de fall som all källkod för systemet finns tillgängligt samt att det är tillåtet att göra ganska stora ändringar i källkoden (dvs att flytta om alla aktiviteter ifrån två tasks till en task). I D-uppgiften tänker vi oss att enbart en av två tasks får modifieras (dessutom inte den task som hade varit smartast att modifiera i detta fall...). Vi kan antingen tänka oss att källkoden för p2 task inte är tillgänglig (eftersom den är inköpt ifrån en leverantör som enbart leverar en binär), alternativt att vi inte får ändra i källkoden på grund av exempelvis certifieringsskäl eller liknande. D-uppgiften skulle också kunna bli mer stabil om man har en schemaläggare i systemet som stödjer EDF-schemaläggning, som senaste versionen av Linux (läs på om SCHED DEADLINE om du är intresserad av detta). Lösningsförslag, uppgift 2 Del a Problemet kan uppstå om två tasks, som kör på två olika processorer, försöker köra withdraw samtidigt med samma kontonummer. Det största problemet uppstår om exempelvis följande sekvens uppkommer: 14

15 Task 1: Kör rad 36 Kör rad 43 Task2: Kör rad 36 Kör rad 43 I detta fall kommer accounts[].balance ha ändrats på ett sådant sätt att transaktionen task 1 gjorde har glömts bort. Del b Lägg till en si semaphore sem i struct account. Lägg sedan till följande rader i programmet: Rad 31.5: Rad 32.5: Rad 39.5: Rad 43.5: si_sem_wait(&accounts[accountnumber].sem); si_sem_signal(&accounts[accountnumber].sem); si_sem_signal(&accounts[accountnumber].sem); si_sem_signal(&accounts[accountnumber].sem); Del c Förutom semaforen vi lade till i del b behöver vi lägga till följande i struct account: si condvar change int userstatus Lägg sedan till följande rader i programmet för att säkerställa exklusiv åtkomst till delade variabler: Rad 3.5: si_sem_wait(&accounts[accountnumber].sem); Rad 4.5: si_sem_signal(&accounts[accountnumber].sem); Rad 10.5: si_sem_signal(&accounts[accountnumber].sem); Rad 33: si_sem_signal(&accounts[accountnumber].sem); Slutligen kan monitorn implementeras på exempelvis följande sätt: int ask_user_to_authenticate_transaction(unsigned int acctno) // userstatus = - 1 används för att signalera till banking task // att en ett online-köp pågår. accounts[acctno].userstatus = -1; si_cv_broadcast(&accounts[acctno].change); // Vänta på att banking task signalerar att användaren svarat // på online-köp-begäran while(!accounts[acctno].userstatus < 0) si_cv_wait(&accounts[acctno].change); return accounts[acctno].userstatus; void online_banking_task(void) unsigned int acctno = get_accountnumber(); while(1) si_sem_wait(&accounts[acctno].sem); // Vänta på att begäran om ett online-köp kommer in. 15

16 while(accounts[acctno].userstatus!= -1) si_cv_wait(&accounts[acctno].change); accounts[acctno].userstatus = ask_user_to_acknowledge(acctno, accounts[acctno].store_name, accounts[acctno].reserved); si_cv_broadcast(&accounts[acctno].change); si_sem_signal(&accounts[acctno].sem); Lösningsförslag, uppgift 3 Del a Semaforer får inte användas ifrån ett interrupt eftersom interruptet inte är en egentligen task utan körs som samma task som användes när interruptet aktiverades. Det vill säga, om si sem wait() faktiskt behöver sova kommer fel task att hamna i väntelistan istället för att interrupthanteraren hamnar i väntelistan. (I SimpleOS är dessutom semaforer implementerade genom att interrupt stängs av och sedan slås på, varav man vanligtvis inte vill göra det senare i en interruptrutin.) Del b void gpio_interrupt(void) int val = get_gpio_port(); param.val = val; int calculate_xyzzy(void) // De utkommenterade raderna visar var vi måste ha wait/signal om // vi behöver skydda param.val även mot åtkomst ifrån andra tasks // och inte bara ifrån interruptrutinen. // si_sem_wait(&param.mutex); DISABLE_INTERRUPTS; int retval = param.val * / ; ENABLE_INTERRUPTS; // si_sem_signal(&param.mutex); return retval; Lösningsförslag, uppgift 4 Del a Problemet är att semaforen som photo task låser innan den anropar record photo and add to list även används av position task. Detta medför att semaforen är låst dels under tiden fotot tas och dels under tiden fotot komprimeras. Egentligen borde det bara vara låst under den tid som den gemensamma resursen används, dvs x och y i struct camera info. Fixad kod: // Följande rader tas bort ur photo_task(): si_sem_wait(&camera.mutex); 16

17 si_sem_signal(&camera.mutex); Istället läggs följande rader in i record_photo_and_add_to_list runt positionsavläsningen: si_sem_wait(&c->mutex); p.x = c->x; p.y = c->y; si_sem_signal(&c->mutex); Del b Det finns två ganska stora tveksamheter i kodlistningen, men det räcker med att diskutera och fixa ett av dessa problem för att få full pott: Följande rader stryks i position_task(): setx(x); // Oops, jag glömde visst &camera här i tentan, men jag tror sety(y); // att i princip alla förstod vad jag menade, även om jag bara // fick en kommentar om detta. Dessa ersätts av följande anrop: setxy(&camera,x,y); Där setxy ser ut på följande sätt: void setx(struct camera_info *c, int x, y) si_sem_wait(&c->mutex); // Protect access to shared variable c->x = x; c->y = y; si_sem_signal(&c->mutex); Det andra problemet är att det i programmet inte finns någon garanti för att position task och photo task körs i synk med varandra, vilket skulle göra att felet snabbt blev större än de tillåtna 2 mm. Detta går att ordna genom att exempelvis starta photo task med hjälp av asymmetrisk synkronisering ifrån position task vid var tionde iteration. (Det var dock bara ett fåtal som noterade detta.) Del c Felmätningen i figur 1 beror troligtvis inte (åtminstone inte enbart) på att setx/sety inte körs atomiskt. Detta för att det är ett relativt stort fel, både i x-riktning och y-riktning trots att kameran i detta skede rörde sig ortogonalt med en av axlarna (det vill säga, en felmätning orsakad av att setx/sety inte körs atomiskt skulle enbart ha påverkat en av axlarna i detta fall, eftersom positionen på den andra axeln inte borde ha ändrat sig nämnvärt). Buggen i figur 2 skulle däremot kunna tänkas bero på att setx/sety inte körs atomiskt eftersom kameran här rör sig i både x och y-led, samt att det enbart är en av positionsangivelserna som är fel. 17

Tentamen. Datorteknik och realtidssystem

Tentamen. Datorteknik och realtidssystem Tentamen Datorteknik och realtidssystem, TSEA81 Datum 2017-01-09 Lokal U1 Tid 08-12 Kurskod TSEA81 Provkod TEN1 Kursnamn Datorteknik och realtidssystem Institution ISY Antal frågor 5 Antal sidor (inklusive

Läs mer

Tentamen i Realtidsprogrammering

Tentamen i Realtidsprogrammering Tentamen i Realtidsprogrammering Ordinarie Tentamen Datum: 2011-05-14 Tid: 08:15 11:15 Ansvarig lärare: Telefon: 301438 Hjälpmedel: Miniräknare Poäng: Tentamen omfattar 40 poäng fördelade på 5 uppgifter.

Läs mer

Effektpedal för elgitarr

Effektpedal för elgitarr EITF11 - Digitala Projekt Effektpedal för elgitarr Handledare: Bertil Lindvall Ivan Rimac (I05) Jimmy Lundberg (I08) 2011-05-10 Contents Bakgrund... 3 Kravspecifikation... 3 Kravspecifikation Effektpedal...

Läs mer

Tentamen Datorteknik och realtidssystem, TSEA81 Datum Lokal

Tentamen Datorteknik och realtidssystem, TSEA81 Datum Lokal Tentamen Datorteknik och realtidssystem, TSEA81 Datum 2018-04-0 Lokal G6 Tid 14-18 Kurskod TSEA81 Provkod TEN1 Kursnamn Datorteknik och realtidssystem Institution ISY Antal uppgifter 5 Antal sidor 16 (inklusive

Läs mer

Synkronisering. Föreläsning 8

Synkronisering. Föreläsning 8 Synkronisering Föreläsning 8 Synkronisering Så stort, intrikat och viktigt att det finns hela kurser om det i parallellprogrammering. Vi fuskar lite med några av de viktigaste bitarna! Synkronisering Vad

Läs mer

Tentamen TEN1 HI1029 2014-05-22

Tentamen TEN1 HI1029 2014-05-22 Tentamen TEN1 HI1029 2014-05-22 Skrivtid: 8.15-13.00 Hjälpmedel: Referensblad (utdelas), papper (tomma), penna Logga in med tentamenskontot ni får av skrivvakten. Det kommer att ta tid att logga in ha

Läs mer

Provmoment: Ladokkod: Tentamen ges för: Tentamen TE111B El3. Namn: Personnummer: Tentamensdatum: 20120410 Tid: 14:00-18:00.

Provmoment: Ladokkod: Tentamen ges för: Tentamen TE111B El3. Namn: Personnummer: Tentamensdatum: 20120410 Tid: 14:00-18:00. Mikrodatorteknik Provmoment: Ladokkod: Tentamen ges för: Tentamen TE111B El3 7,5 högskolepoäng Namn: Personnummer: Tentamensdatum: 20120410 Tid: 14:00-18:00 Hjälpmedel: Totalt antal poäng på tentamen:

Läs mer

Tentamen. Datorteknik och realtidssystem

Tentamen. Datorteknik och realtidssystem Tentamen Datorteknik och realtidssystem, TSEA81 Datum 2017-04-18 Lokal KÅRA Tid 14-18 Kurskod TSEA81 Provkod TEN1 Kursnamn Datorteknik och realtidssystem Institution ISY Antal frågor 5 Antal sidor (inklusive

Läs mer

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010) Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010) Tid: Onsdagen 15 december 2004, 8:30 till 13:30 Plats: M Ansvarig lärare: Katarina Blom, tel 772 10 60. Läraren besöker tentamen kl

Läs mer

Tentamen. Datorteknik och realtidssystem

Tentamen. Datorteknik och realtidssystem Tentamen Datorteknik och realtidssystem, TSEA81 Datum 2017-08-18 Lokal TER2 Tid 14-18 Kurskod TSEA81 Provkod TEN1 Kursnamn Datorteknik och realtidssystem Institution ISY Antal frågor 5 Antal sidor (inklusive

Läs mer

Tentamen EDA698 Realtidssystem (Helsingborg)

Tentamen EDA698 Realtidssystem (Helsingborg) LUNDS TEKNISKA HÖGSKOLA 1(6) Institutionen för datavetenskap Tentamen EDA698 Realtidssystem (Helsingborg) 2014 10 28, 14.00 19.00 Det är tillåtet att använda Java snabbreferens och miniräknare, samt ordbok.

Läs mer

Datorsystem Laboration 2: Minnesmappade bussar

Datorsystem Laboration 2: Minnesmappade bussar Datorsystem Laboration 2: Minnesmappade bussar Senast uppdaterad: 14 oktober 2012 Version 1.2 Student: Lärare: Underskrift: Underskrift: Datum: Datorsystem Laboration 2 1 Innehåll 1 Inledning 2 1.1 Introduktion..................................

Läs mer

Introduktion till arv

Introduktion till arv Introduktion till arv 6 INTRODUKTION TILL ARV Arv Generell-Speciell Arv för att utnyttja det vi redan gjort Återanvändning Basklass Härledd klass Varför arv? Inför en subklass för att uttrycka specialisering

Läs mer

Föreläsning 6: Introduktion av listor

Föreläsning 6: Introduktion av listor Föreläsning 6: Introduktion av listor Med hjälp av pekare kan man bygga upp datastrukturer på olika sätt. Bland annat kan man bygga upp listor bestående av någon typ av data. Begreppet lista bör förklaras.

Läs mer

Programmeringsteknik med C och Matlab

Programmeringsteknik med C och Matlab Programmeringsteknik med C och Matlab Kapitel 2: C-programmeringens grunder Henrik Björklund Umeå universitet Björklund (UmU) Programmeringsteknik 1 / 32 Mer organisatoriskt Imorgon: Datorintro i lab Logga

Läs mer

Föreläsning 4: Poster

Föreläsning 4: Poster Föreläsning 4: Poster Följande är genomgånget: type Person_Type is Namn : String(30); Skonr : Float; Kon : Boolean; Diskussion runt detta med olika typer m.m. Har tagit upp vilka operationer man kan göra

Läs mer

Synkronisering - Semaforen. Om att vänta men inte i onödan

Synkronisering - Semaforen. Om att vänta men inte i onödan Synkronisering - Semaforen Om att vänta men inte i onödan Dörrvakten Har order uppifrån pga brandregler: Släpp in max 40 personer Garanterar att det aldrig är fler insläppta än order angivit Kommer fler

Läs mer

Tentamen i. för D1 m fl, även distanskursen. fredag 13 januari 2012

Tentamen i. för D1 m fl, även distanskursen. fredag 13 januari 2012 1 of 6 Örebro universitet Akademin för naturvetenskap och teknik Thomas Padron-McCarthy (thomas.padron-mccarthy@oru.se) Tentamen i Programmering grundkurs och Programmering C för D1 m fl, även distanskursen

Läs mer

Att använda pekare i. C-kod

Att använda pekare i. C-kod Att använda pekare i C-kod (Bör användas av de som känner sig lite hemma med C-programmering!) Rev 1, 2005-11-23 av Ted Wolfram www.wolfram.se Syfte: Man kan tycka att det är komplicerat att använda pekare

Läs mer

Översikt. Installation av EasyPHP 1. Ladda ner från http://www.easyphp.org/ Jag använder Release 5.3.4.0 2. Installera EasyPHP.

Översikt. Installation av EasyPHP 1. Ladda ner från http://www.easyphp.org/ Jag använder Release 5.3.4.0 2. Installera EasyPHP. Laboration 1 Översikt 1. Att komma igång med laborationsmiljön a. installera Aptana Studio 3 b. Installera EasyPHP 2. Testa lite programmering a. Testa enkla uppgifter b. Testa automatiskt 3. Skapa inloggningsformulär

Läs mer

Objektorienterad programmering D2

Objektorienterad programmering D2 Objektorienterad programmering D2 Laboration nr 2. Syfte Att få förståelse för de grundläggande objektorienterade begreppen. Redovisning Källkoden för uppgifterna skall skickas in via Fire. För senaste

Läs mer

Tentamen. 2D4135 vt 2005 Objektorienterad programmering, design och analys med Java Lördagen den 28 maj 2005 kl 9.00 14.

Tentamen. 2D4135 vt 2005 Objektorienterad programmering, design och analys med Java Lördagen den 28 maj 2005 kl 9.00 14. Tentamen 2D4135 vt 2005 Objektorienterad programmering, design och analys med Java Lördagen den 28 maj 2005 kl 9.00 14.00, sal E33 Tentan har en teoridel och en problemdel. På teoridelen är inga hjälpmedel

Läs mer

Lösningar till tentauppgifterna sätts ut på kurssidan på nätet idag kl 19. Omtentamen i Programmering C, 5p, fristående, kväll, 040110.

Lösningar till tentauppgifterna sätts ut på kurssidan på nätet idag kl 19. Omtentamen i Programmering C, 5p, fristående, kväll, 040110. 1(8) ÖREBRO UNIVERSITET INSTITUTIONEN FÖR TEKNIK Lösningar till tentauppgifterna sätts ut på kurssidan på nätet idag kl 19. Denna tenta kommer att vara färdigrättad On 14/1-04 och kan då hämtas på mitt

Läs mer

Övningsuppgift. Bankkonton. Steg 2. Författare: Mats Loock Kurs: Inledande programmering med C# Kurskod:1DV402

Övningsuppgift. Bankkonton. Steg 2. Författare: Mats Loock Kurs: Inledande programmering med C# Kurskod:1DV402 Övningsuppgift Bankkonton Steg 2 Författare: Mats Loock Kurs: Inledande programmering med C# Kurskod:1DV402 Upphovsrätt för detta verk Detta verk är framtaget i anslutning till kursen Inledande programmering

Läs mer

Skizz till en enkel databas

Skizz till en enkel databas Skizz till en enkel databas Data: Register En vektor Funktioner: Databas Initiera huvudloop Avsluta Poster (struct( struct) val Mata in Skriv ut Spara Hämta Ändra Radera Enligt diskussion 1999-11-23 Bertil

Läs mer

Tentamen OOP 2015-03-14

Tentamen OOP 2015-03-14 Tentamen OOP 2015-03-14 Anvisningar Fråga 1 och 2 besvaras på det särskilt utdelade formuläret. Du får gärna skriva på bägge sidorna av svarsbladen, men påbörja varje uppgift på ett nytt blad. Vid inlämning

Läs mer

Synkronisering. Ordning och reda

Synkronisering. Ordning och reda Synkronisering Ordning och reda Banköverföring struct account { int balance; char* owner; }; struct account account[ NUM_ACCOUNTS ]; bool transfer( int amount, unsigned from, unsigned to ); 2 Banköverföring

Läs mer

Grundläggande programmering med C# 7,5 högskolepoäng

Grundläggande programmering med C# 7,5 högskolepoäng Grundläggande programmering med C# 7,5 högskolepoäng Provmoment: TEN1 Ladokkod: NGC011 Tentamen ges för: Omtentamen DE13, IMIT13 och SYST13 samt öppen för alla (Ifylles av student) (Ifylles av student)

Läs mer

Summering av fält 1.1. Synkronisering - Semaforen. Summering av fält 1.3. Summering av fält 1.2. Summering av fält 2.3 (INTE GK)

Summering av fält 1.1. Synkronisering - Semaforen. Summering av fält 1.3. Summering av fält 1.2. Summering av fält 2.3 (INTE GK) Summering av fält 1.1 Synkronisering - Semaforen Om a6 vänta men inte i onödan Vi har en stor array: int array[2_000_000_000] Vi har variabler för a6 lagra summor och delsumor av arrayen. Dessa iniferas

Läs mer

Så här fungerar registreringen i Malmö stads Odlingsslottskö

Så här fungerar registreringen i Malmö stads Odlingsslottskö 1 Så här fungerar registreringen i Malmö stads Odlingsslottskö Det är givetvis kostnadsfritt att stå i Malmö stads odlingslottskö. Steg 1: Registrera dig som ny kund och skapa en sökprofil För att kunna

Läs mer

Tentamen Datorteknik och realtidssystem, TSEA81 Datum Lokal

Tentamen Datorteknik och realtidssystem, TSEA81 Datum Lokal Tentamen Datorteknik och realtidssystem, TSEA81 Datum 2018-08-24 Lokal TER1 Tid 14-18 Kurskod TSEA81 Provkod TEN1 Kursnamn Datorteknik och realtidssystem Institution ISY Antal uppgifter 5 Antal sidor 17

Läs mer

Tentamen i TDIU16 Process- och operativsystemprogrammering

Tentamen i TDIU16 Process- och operativsystemprogrammering Linköpings universitet Institutionen för datavetenskap 2017-06-03 Tentamen i TDIU16 Process- och operativsystemprogrammering Datum 2017-06-03 Tid 14-18 Institution IDA Kurskod TDIU16 Provkod TEN1 Examinator

Läs mer

Vem är vem på kursen. Objektorienterad programvaruutveckling GU (DIT011) Kursbok Cay Horstmann: Big Java 3rd edition.

Vem är vem på kursen. Objektorienterad programvaruutveckling GU (DIT011) Kursbok Cay Horstmann: Big Java 3rd edition. Institutionen för Datavetenskap Göteborgs universitet HT2009 DIT011 Vem är vem på kursen Objektorienterad programvaruutveckling GU (DIT011) Kursansvarig : Katarina Blom, tel 772 10 60 Rum: 6126 (E-huset)

Läs mer

Trådar. Aktiva objekt

Trådar. Aktiva objekt Föreläsning 11 Trådar 1 Aktiva objekt Det är välkänt från vardagslivet att saker händer samtidigt. Aktiva objekt gör saker på eget initiativ, medan passiva objekt endast gör saker när de blir ombedda.

Läs mer

Användarmanual Pagero Connect 2.0

Användarmanual Pagero Connect 2.0 Användarmanual Pagero Connect 2.0 Innehåll 1. Grundläggande information... 3 1.1 Aktivera ditt Pagero Onlinekonto... 3 1.2 Ladda ner Pagero Connect 2.0... 3 1.3 Startsida... 4 1.4 Minimerad vy... 5 1.5

Läs mer

Tentamen i Matematisk statistik Kurskod S0001M

Tentamen i Matematisk statistik Kurskod S0001M Tentamen i Matematisk statistik Kurskod S0001M Poäng totalt för del 1: 25 (8 uppgifter) Tentamensdatum 2012-01-13 Poäng totalt för del 2: 30 (3 uppgifter) Skrivtid 09.00 14.00 Lärare: Adam Jonsson, Ove

Läs mer

Försättsblad till skriftlig tentamen vid Linköpings Universitet

Försättsblad till skriftlig tentamen vid Linköpings Universitet Försättsblad till skriftlig tentamen vid Linköpings Universitet Datum för tentamen 03-05-3 Salar U, KÅRA, U3 Tid -8 Kurskod TSEA Provkod TEN Kursnamn Digitalteknik Institution ISY Antal uppgifter som ingår

Läs mer

Tentaupplägg denna gång

Tentaupplägg denna gång Några tips på vägen kanske kan vara bra. Tentaupplägg denna gång TIPS 1: Läs igenom ALLA uppgifterna och välj den du känner att det är den lättaste först. Det kan gärna ta 10-20 minuter. Försök skriva

Läs mer

Tentamen, EDA501 Programmering M L TM W K V

Tentamen, EDA501 Programmering M L TM W K V LUNDS TEKNISKA HÖGSKOLA 1(0) Institutionen för datavetenskap Tentamen, EDA501 Programmering M L TM W K V 2010 05 31, 8.00 13.00 Anvisningar: Denna tentamen består av 4 uppgifter. Preliminärt ger uppgifterna

Läs mer

Tentaupplägg denna gång

Tentaupplägg denna gång Några tips på vägen kanske kan vara bra. Tentaupplägg denna gång TIPS 1: Läs igenom ALLA uppgifterna och välj den du känner att det är den lättaste först. Det kan gärna ta 10-20 minuter. Försök skriva

Läs mer

Tentamen i. för D1 m fl, även distanskursen. lördag 19 januari 2013

Tentamen i. för D1 m fl, även distanskursen. lördag 19 januari 2013 1 of 7 Örebro universitet Institutionen för naturvetenskap och teknik Thomas Padron-McCarthy (thomas.padron-mccarthy@oru.se) Tentamen i Programmering grundkurs och Programmering C för D1 m fl, även distanskursen

Läs mer

Föreläsning 3.1: Datastrukturer, en översikt

Föreläsning 3.1: Datastrukturer, en översikt Föreläsning.: Datastrukturer, en översikt Hittills har vi i kursen lagt mycket fokus på algoritmiskt tänkande. Vi har inte egentligen ägna så mycket uppmärksamhet åt det andra som datorprogram också består,

Läs mer

Tentamen i Objektorienterad programmering

Tentamen i Objektorienterad programmering CHALMERS TEKNISKA HÖGSKOLA Datavetenskap TDA547 Tentamen i Objektorienterad programmering Lördagen 12 mars 2011, 8.30 12.30. Jourhavande lärare: Björn von Sydow, tel 0762/981014. Inga hjälpmedel. Lösningar

Läs mer

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

Fö 5+6 TSEA81. Real-time kernel + Real-time OS Fö 5+6 TSEA81 Real-time kernel + Real-time OS Stackens användningsområde * JSR / RTS : returadress * Temporärdata (push / pop) void myfunc(void) { int i; // hamnar nog i register int test[10]; // hamnar

Läs mer

Inlämningsuppgift 4 NUM131

Inlämningsuppgift 4 NUM131 Inlämningsuppgift 4 NUM131 Modell Denna inlämningsuppgift går ut på att simulera ett modellflygplans rörelse i luften. Vi bortser ifrån rörelser i sidled och studerar enbart rörelsen i ett plan. De krafter

Läs mer

Kapitel 1 Ansluta Router till Internet

Kapitel 1 Ansluta Router till Internet Kapitel 1 Ansluta Router till Internet I det här kapitlet beskrivs hur du installerar router i ditt lokala nätverk (LAN) och ansluter till Internet. Du får information om hur du installerar trådlös router

Läs mer

Försättsblad till skriftlig tentamen vid Linköpings Universitet

Försättsblad till skriftlig tentamen vid Linköpings Universitet Försättsblad till skriftlig tentamen vid Linköpings Universitet Datum för tentamen 2016-03-21 Sal Tid 08:00 12:00 Kurskod Provkod Kursnamn/benämning Institution Antal uppgifter som ingår i tentamen Antal

Läs mer

Sätt att skriva ut binärträd

Sätt att skriva ut binärträd Tilpro Övning 3 På programmet idag: Genomgång av Hemtalet samt rättning Begreppet Stabil sortering Hur man kodar olika sorteringsvilkor Inkapsling av data Länkade listor Användning av stackar och köer

Läs mer

HI1024 Programmering, grundkurs TEN2 2015-10-30

HI1024 Programmering, grundkurs TEN2 2015-10-30 HI1024 Programmering, grundkurs TEN2 2015-10-30 KTH STH Haninge 8.15-13.00 Tillåtna hjälpmedel: En A4 handskriven på ena sidan med egna anteckningar Kursboken C PROGRAMMING A Modern Approach K. N. King

Läs mer

Manual för Kollektomat

Manual för Kollektomat Manual för Om detta dokument Denna manual är en översikt över vad som behövs göras för att komma igång med. Allting från fysisk transport till installations anvisningar och avstämning ska hanteras av detta

Läs mer

Föreläsning 11. Giriga algoritmer

Föreläsning 11. Giriga algoritmer Föreläsning 11 Giriga algoritmer Föreläsning 11 Giriga algoritmer Användning Växelproblemet Kappsäcksproblemet Schemaläggning Färgläggning Handelsresandeproblemet Uppgifter Giriga algoritmer (Greedy algorithms)

Läs mer

Chapter 4: Writing Classes/ Att skriva egna klasser.

Chapter 4: Writing Classes/ Att skriva egna klasser. Chapter 4: Writing Classes/ Att skriva egna klasser. I dessa uppgifter kommer du att lära dig om hur man definierar egna objekt genom att skriva klasser. Detta är grunden för att förstå objekt orienterad

Läs mer

Föreläsning 2: Avlusning och antilustekniker

Föreläsning 2: Avlusning och antilustekniker 2D1458, Problemlösning och programmering under press Föreläsning 2: Avlusning och antilustekniker Datum: 2007-09-11 Skribent(er): Emil Hesslow, Stefan Pettersson Föreläsare: Per Austrin Föreläsningen handlade

Läs mer

Tentamen i Programmering grundkurs och Programmering C

Tentamen i Programmering grundkurs och Programmering C 1 of 7 Örebro universitet Institutionen för naturvetenskap och teknik Thomas Padron-McCarthy (thomas.padron-mccarthy@oru.se) Tentamen i Programmering grundkurs och Programmering C för D1 m fl, även distanskursen

Läs mer

Objektorienterad Programkonstruktion, DD1346 FACIT. Tentamen 20150613, kl. 9.00-12.00

Objektorienterad Programkonstruktion, DD1346 FACIT. Tentamen 20150613, kl. 9.00-12.00 Skolan för datavetenskap och kommunikation Objektorienterad Programkonstruktion, DD1346 FACIT Tentamen 20150613, kl. 9.00-12.00 Tillåtna hjälpmedel: Papper, penna och radergummi. Notera: Frågorna i del

Läs mer

Lösningar till uppgifterna sätts ut på kurssidan på nätet idag kl 13.00. Omtentamen i Programmering C, 5p, A1, D1, E1, Fri, Pr1, Te/Ek1, 040607.

Lösningar till uppgifterna sätts ut på kurssidan på nätet idag kl 13.00. Omtentamen i Programmering C, 5p, A1, D1, E1, Fri, Pr1, Te/Ek1, 040607. 1(8) ÖREBRO UNIVERSITET INSTITUTIONEN FÖR TEKNIK Lösningar till uppgifterna sätts ut på kurssidan på nätet idag kl 13.00. Denna tenta kommer att vara färdigrättad On 9/6 och kan då hämtas på mitt tjänsterum,

Läs mer

9-1 Koordinatsystem och funktioner. Namn:

9-1 Koordinatsystem och funktioner. Namn: 9- Koordinatsystem och funktioner. Namn: Inledning I det här kapitlet skall du lära dig vad ett koordinatsystem är och vilka egenskaper det har. I ett koordinatsystem kan man representera matematiska funktioner

Läs mer

Kundportal. Kundportal - Användarhandledning

Kundportal. Kundportal - Användarhandledning Kundportal Kundportal - Användarhandledning Version 1.0 Status Preliminär Datum 2014-12-07 Innehållsförteckning Innehållsförteckning... 2 Välkommen... 3 Support - Time Care Support Team... 3 Begränsat

Läs mer

Kom igång med ArcGIS Online - Snabba steg för att börja arbeta

Kom igång med ArcGIS Online - Snabba steg för att börja arbeta Kom igång med ArcGIS Online - Snabba steg för att börja arbeta https://twitter.com/esrisverige http://www.esri.se/ Svårighetsgrad: Enkel Tidsåtgång: Ca 15 min Målgrupp: Administratör för kontot Inledning

Läs mer

Omtentamen (del 1, 6 högskolepoäng) i Programkonstruktion och datastrukturer (1DL201)

Omtentamen (del 1, 6 högskolepoäng) i Programkonstruktion och datastrukturer (1DL201) Omtentamen (del 1, 6 högskolepoäng) i Programkonstruktion och datastrukturer (1DL201) Lars-Henrik Eriksson Fredag 5 april 2013, kl 14:00 17:00, i Polacksbackens skrivsal Hjälpmedel: Inga. Inte heller elektronisk

Läs mer

Uppgift (poäng) 1 (2) 2 (3) 3 (4) 4 (4) 5 (3) 6 (4) 7 (6) 8 (6) 9 (8) Summa

Uppgift (poäng) 1 (2) 2 (3) 3 (4) 4 (4) 5 (3) 6 (4) 7 (6) 8 (6) 9 (8) Summa Lena Kallin Westin 2005-08-22 Institutionen för datavetenskap Umeå universitet TENTAMEN Uppgift (poäng) 1 (2) 2 (3) 3 (4) 4 (4) 5 (3) 6 (4) 7 (6) 8 (6) 9 (8) Summa Inlämnad Poäng Kurs : Programmeringsteknisk

Läs mer

Växtviskaren EITF11 Digitala projekt VT15, I12

Växtviskaren EITF11 Digitala projekt VT15, I12 Växtviskaren EITF11DigitalaprojektVT15,I12 NathalieLiljebrunn,EbbaRiismark,AnnaNorelius LundsTekniskaHögskola Institutionenförelektro ochinformationsteknik Handledare:BertilLindvall,AndreasJohansson 2015

Läs mer

Summering av fält. Synkronisering. Summering av fält. Bounded Buffer. Bounded Buffer (get) Bounded Buffer (put)

Summering av fält. Synkronisering. Summering av fält. Bounded Buffer. Bounded Buffer (get) Bounded Buffer (put) Summering av fält Synkronisering Ordning och reda function sum_low is begin for i in 0..999_999_999 sum += array[i] end sum_low function sum_high is begin for i in 1_000_000_000..1_999_999_999 sum += array[i]

Läs mer

Senaste version kan hämtas från Internet i PDF 1 format Http://www.e.kth.se/~e92_sli/exjobb/projektplan/projektplan.pdf

Senaste version kan hämtas från Internet i PDF 1 format Http://www.e.kth.se/~e92_sli/exjobb/projektplan/projektplan.pdf SPECIFIKATION 1(11) Projektplan Distribution Detta dokument är ej under kontrollerad distribution. Innehavaren ansvarar själv för att den senaste utgåvan av detta dokument används och att inaktuella kopior

Läs mer

Projektarbete 2: Interaktiv prototyp

Projektarbete 2: Interaktiv prototyp Projektarbete 2: Interaktiv prototyp Jonatan Hilmarch (Grupp 13) 880427-5595 hilmarch@skip.chalmers.se Kurs: Människa-Datorinteraktion TIG061 HT 2010 Projekt 1 - en tillbakablick Enligt projektets systemdefinition

Läs mer

Att köpa ny dator SeniorNet Lidingö Januari-2016

Att köpa ny dator SeniorNet Lidingö Januari-2016 Att köpa ny dator SeniorNet Lidingö Januari-2016 Att tänka på innan du köper bärbar dator Behov/Användningsområde Om man mest ska använda datorn till epost, Internet, lagra foton och skriva dokument i

Läs mer

Systemkonstruktion SERIEKOMMUNIKATION

Systemkonstruktion SERIEKOMMUNIKATION Systemkonstruktion SERIEKOMMUNIKATION Laborationsansvariga: Anders Arvidsson Utskriftsdatum: 2005-04-26 Syfte Laborationen syftar till att ge studenten tillfälle att närmare bekanta sig med RS-232-protokollet,

Läs mer

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

EDA480/EDA485 - Maskinorienterad programmering, tentamen 2006-xx-xx 1(7) EDA480/EDA485 - Maskinorienterad programmering, tentamen 2006-xx-xx 1(7) 1. Motivation ROM. 8kbyte 2 3 2 10 byte 13 Adressbitar [A12,A0] direkt till ROM-kapsel. RWM. 32kbyte 2 5 2 10 byte 15 Adressbitar

Läs mer

Algoritmanalys. Genomsnittligen behövs n/2 jämförelser vilket är proportionellt mot n, vi säger att vi har en O(n) algoritm.

Algoritmanalys. Genomsnittligen behövs n/2 jämförelser vilket är proportionellt mot n, vi säger att vi har en O(n) algoritm. Algoritmanalys Analys av algoritmer används för att uppskatta effektivitet. Om vi t. ex. har n stycken tal lagrat i en array och vi vill linjärsöka i denna. Det betyder att vi måste leta i arrayen tills

Läs mer

International Olympiad in Informatics 2011 22 29 July 2011, Pattaya City, Thailand Tävlingsuppgifter Dag 2 Svenska 1.3. Papegojor

International Olympiad in Informatics 2011 22 29 July 2011, Pattaya City, Thailand Tävlingsuppgifter Dag 2 Svenska 1.3. Papegojor Papegojor Yanee är fågelentusiast. Sedan hon läst om IP over Avian Carriers (IPoAC), har hon spenderat mycket tid med att träna en flock papegojor att leverera meddelanden över långa avstånd. Yanees dröm

Läs mer

Felsökning av mjukvara

Felsökning av mjukvara KUNGLIGA TEKNISKA HÖGSKOLAN Felsökning av mjukvara Programmering av en NXT-robot Max Kufa [03/08-13] mkufa@kth.se Introduktionskurs i datateknik (II1310) Sammanfattning Syftet med laborationen var att

Läs mer

Operativsystem ID1200/06 (ID2200/06 6hp) Tentamen :00-18:00

Operativsystem ID1200/06 (ID2200/06 6hp) Tentamen :00-18:00 Operativsystem ID1200/06 (ID2200/06 6hp) Tentamen 2019-04-16 14:00-18:00 Instruktioner Du får, förutom skrivmateriel, endast ha med dig en egenhändigt handskriven A4 med anteckningar. Anteckningarna lämnas

Läs mer

Övningar Dag 2 En första klass

Övningar Dag 2 En första klass Kurs i C++ Sid 1 (5) Övningar Dag 2 En första klass Denna övning går ut på att steg för steg bygga upp en klass och skapa objekt. Vi kommer att utgå från en sammansatt datatyp i en struct och parallellt

Läs mer

Pulsmätare med varningsindikatorer

Pulsmätare med varningsindikatorer Pulsmätare med varningsindikatorer Elektro- och informationsteknik Projektrapport, EITF11 Digitala Projekt Charlie Hedhav Sofia Johansson Louise Olsson 2016-05-17 Abstract During the course Digitala Projekt

Läs mer

Åtkomst och användarhandledning

Åtkomst och användarhandledning Innehållsförteckning Problemspecifikation...1 Åtkomst och användarhandledning...2 Systembeskrivning...3 Lösningens begränsningar...5 Problem och reflektioner...6 Testkörning...7 Bilagor......Källkod...

Läs mer

Programmeringsuppgifter 1

Programmeringsuppgifter 1 Programmeringsuppgifter 1 Redovisning: Ni demo-kör och förklarar för handledaren några av de program ni gjort. Ni behöver inte hinna allt, redovisa så långt ni kommit. Om ni hinner mer kan ni alltid redovisa

Läs mer

(Lösningsförslag finns sist i denna fil.)

(Lösningsförslag finns sist i denna fil.) (Lösningsförslag finns sist i denna fil.) Läser externa signaler. Har 64 ingångar (kanaler), från 0 till 63. Kan bara avläsa en ingång i taget. Avlästa värdet positivt 16-bitars tal. Varje läsning tar

Läs mer

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program Dagens föreläsning Programmeringsteknik för Ingenjörer VT05 Föreläsning 3-4 Repetition Datatyper Uttryck Operatorer Satser Algoritmer Programmeringsteknik VT05 2 Repetition Repetition - Programmering i

Läs mer

KUNGLIGA TEKNISKA HÖGSKOLAN. Linefollower. Med LEGO Mindstorms och NXC. Paul Coada 2012-08-29 coada@kth.se Introduktion i datateknik II1310

KUNGLIGA TEKNISKA HÖGSKOLAN. Linefollower. Med LEGO Mindstorms och NXC. Paul Coada 2012-08-29 coada@kth.se Introduktion i datateknik II1310 KUNGLIGA TEKNISKA HÖGSKOLAN Linefollower Med LEGO Mindstorms och NXC Paul Coada 2012-08-29 coada@kth.se Introduktion i datateknik II1310 Sammanfattning Rapporten är för labbmomentet som utförs i introduktionskursen

Läs mer

1 Funktioner och procedurell abstraktion

1 Funktioner och procedurell abstraktion 1 Funktioner och procedurell abstraktion Det som gör programkonstruktion hanterlig och övergripbar och överhuvudtaget genomförbar är möjligheten att dela upp program i olika avsnitt, i underprogram. Vår

Läs mer

Seriehantering. [En enkel guide för hur du som serieadministratör använder SVEMO TA.]

Seriehantering. [En enkel guide för hur du som serieadministratör använder SVEMO TA.] 2013 Svenska Motorcykel- och Snöskoterförbundet Box 2314 600 02 NORRKÖPING Tel. 011-23 10 80 www.svemo.se Seriehantering [En enkel guide för hur du som serieadministratör använder SVEMO TA.] Innehåll Inledning...

Läs mer

CE_O6. Parallell in/utmatning (I/O). Förberedelser till laboration nios2io.

CE_O6. Parallell in/utmatning (I/O). Förberedelser till laboration nios2io. IS1200 Exempelsamling till övning CE_O6, 2015 CE_O6. Parallell in/utmatning (I/O). Förberedelser till laboration nios2io. 6.1. Läs in data från IN-port (skjutomkopplare TOGGLES18) Skriv en subrutin, Get_Data

Läs mer

Lär dig sökmöjligheterna i Disgen 8

Lär dig sökmöjligheterna i Disgen 8 Det har blivit dags att titta på sökmöjligheterna i Disgen. Det finns egentligen två olika sökfunktioner i Disgen, Välj person och Sök personer. Här behandlas dessa båda funktioner. Välj person och Sök

Läs mer

LOTS ANSÖKAN TÄVLINGSTILLSTÅND

LOTS ANSÖKAN TÄVLINGSTILLSTÅND LOTS ANSÖKAN TÄVLINGSTILLSTÅND I denna manual beskrivs hur den som är LOTS-administratör i en arrangerande förening ska göra för att ansöka om tävlingstillstånd för en tävling som har fått sitt datum godkänt.

Läs mer

Användar Guide. är ett varumärke av Google Inc.

Användar Guide. är ett varumärke av Google Inc. Användar Guide Android TM är ett varumärke av Google Inc. - 2 - Tack för att du köpt en MINIX NEO X5mini. Följ denna guide för att ställa in din enhet. MINIX NEO X5mini är en revolutionerande smart media

Läs mer

Tentamen Datorteknik Y, TSEA28 Datum 2012-08-14

Tentamen Datorteknik Y, TSEA28 Datum 2012-08-14 Tentamen Datorteknik Y, TSEA28 Datum 2012-08-14 Lokal TER2 Tid 8-12 Kurskod TSEA28 Provkod TEN1 Kursnamn Datorteknik Y Institution ISY Antal frågor 6 Antal sidor (inklusive denna sida) 7 Kursansvarig Andreas

Läs mer

HÖGSKOLAN I KALMAR Institutionen för teknik Erik Loxbo 06 03 04 LABORATION I PLC-TEKNIK SEKVENSSTYRNING AV TRANSPORTBAND SIMATIC S7 - GRAPH

HÖGSKOLAN I KALMAR Institutionen för teknik Erik Loxbo 06 03 04 LABORATION I PLC-TEKNIK SEKVENSSTYRNING AV TRANSPORTBAND SIMATIC S7 - GRAPH HÖGSKOLAN I KALMAR Institutionen för teknik Erik Loxbo 06 03 04 LABORATION I PLC-TEKNIK SEKVENSSTYRNING AV TRANSPORTBAND SIMATIC S7 - GRAPH Uppgift: Lös nedanstående problemställning med hjälp av programvaran

Läs mer

Instruktion för att slutföra registreringen

Instruktion för att slutföra registreringen Instruktion för att slutföra registreringen Introduktion Vi antar i den här instruktionen att du redan har registrerat sig. Du kan också ha klickat på aktiveringslänken i mailet. Vi använder ett fiktivt

Läs mer

Du som har har tv-mottagare ska betala radio- och tv-avgift

Du som har har tv-mottagare ska betala radio- och tv-avgift Du som har har tv-mottagare ska betala radio- och tv-avgift Vad kostar det? Radio- och tv-avgiften kostar 519 kronor för tre månader. Du kan betala varje månad om du har autogiro. Då kostar det 173 kronor

Läs mer

Försättsblad till skriftlig tentamen vid Linköpings Universitet

Försättsblad till skriftlig tentamen vid Linköpings Universitet Försättsblad till skriftlig tentamen vid Linköpings Universitet (fylls i av ansvarig) Datum för tentamen Sal Tid Kurskod Provkod Kursnamn/benämning Institution Antal uppgifter i tentamen Antal sidor på

Läs mer

Tentamen Datorteknik D del 2, TSEA49

Tentamen Datorteknik D del 2, TSEA49 Tentamen Datorteknik D del 2, TSEA49 Datum 2012-05-24 Lokal TER2 Tid 8-12 Kurskod TSEA49 Provkod TEN1 Kursnamn Datorteknik D del 2 Institution ISY Antal frågor 6 Antal sidor (inklusive denna 10 sida) Kursansvarig

Läs mer

Objektsamlingar i Java

Objektsamlingar i Java 1 (6) Objektsamlingar i Java Objektorienterad programmering 3 Syfte Att ge träning i att använda objektsamlingar i Java. Mål Efter övningen skall du kunna använda objektsamlingsklasserna ArrayList och

Läs mer

TENTAMEN. Kurs: Objektorienterad programmeringsmetodik 5DV133 Ansvarig lärare: Anders Broberg. VT-13 Datum: 13-06-05 Tid: kl 16.00-20.

TENTAMEN. Kurs: Objektorienterad programmeringsmetodik 5DV133 Ansvarig lärare: Anders Broberg. VT-13 Datum: 13-06-05 Tid: kl 16.00-20. Umeå Universitet Datavetenskap Anders Broberg 130605 TENTAMEN Kurs: Objektorienterad programmeringsmetodik 5DV133 Ansvarig lärare: Anders Broberg VT-13 Datum: 13-06-05 Tid: kl 16.00-20.00 Namn: Personnummer:

Läs mer

Bankkonto - övning. Övning 2 Skriv en metod, geträntan, som returnerar räntan.

Bankkonto - övning. Övning 2 Skriv en metod, geträntan, som returnerar räntan. Bankkonto - övning Övningar att göra efter lärardemostration. Filen bankkonto.zip innehåller ett projekt med klassen Bankkonto. Zippa upp denna fil och öppna projektet i BlueJ och skriv vidare på klassen

Läs mer

AVR 3 - datorteknik. Avbrott. Digitala system 15 hp. Förberedelser

AVR 3 - datorteknik. Avbrott. Digitala system 15 hp. Förberedelser Namn: Laborationen godkänd: Digitala system 15 hp AVR 3 - datorteknik LTH Ingenjörshögskolan vid Campus Helsingborg Avbrott. Syften med den här laborationen är att introducera avbrott. Avbrott som uppkommer

Läs mer

Tentamen DE12, IMIT12, SYST12, ITEK11 (även öppen för övriga)

Tentamen DE12, IMIT12, SYST12, ITEK11 (även öppen för övriga) Grundläggande programmering med C# Provmoment: Ladokkod: Tentamen ges för: 7,5 högskolepoäng TEN1 NGC011 Tentamen DE12, IMIT12, SYST12, ITEK11 (även öppen för övriga) (Ifylles av student) (Ifylles av student)

Läs mer

LINKÖPINGS TEKNISKA HÖGSKOLA Institutionen för Ekonomisk och Industriell Utveckling Ou Tang

LINKÖPINGS TEKNISKA HÖGSKOLA Institutionen för Ekonomisk och Industriell Utveckling Ou Tang LINKÖPINGS TEKNISKA HÖGSKOLA Institutionen för Ekonomisk och Industriell Utveckling Ou Tang TENTAMEN I EKONOMISK ANALYS: Besluts- och finansiell metodik 2013-10-22, KL 14.00-19.00 Sal: TER1, TERD Kurskod:

Läs mer

Att öva på och förstå ett program med flera samverkande klasser.

Att öva på och förstå ett program med flera samverkande klasser. Inlämningsuppgift 4 klassen Kund (Customer) Att öva på och förstå ett program med flera samverkande klasser. Redovisning: Uppgiften redovisas i datasal: o Körning av programmet. o Redogöra för vad de olika

Läs mer

Programmeringsolympiaden 2012 Kvalificering

Programmeringsolympiaden 2012 Kvalificering Programmeringsolympiaden 2012 Kvalificering TÄVLINGSREGLER Tävlingen äger rum på ett av skolan bestämt datum under sex timmar effektiv tid. Tävlingen består av sex uppgifter som samtliga ska lösas genom

Läs mer

Presentkort. I grunder/inställningar/blankettval är det blankett nr 1 som används till presentkortsfaktura.

Presentkort. I grunder/inställningar/blankettval är det blankett nr 1 som används till presentkortsfaktura. Presentkort Grundinställningar i grundmodulen I grunder/inställningar/blankettval är det blankett nr 1 som används till presentkortsfaktura. Grundinställningar i kundfakturamodulen Under menyn grunduppgifter

Läs mer