Realtidsprog. - Anders Arvidsson1 Realtidsprogrammering En introduktion - Principer och begrepp
Realtidsprog. - Anders Arvidsson2 Vad är ett realtidssystem? Ett system som reagerar på yttre händelser och ger svar inom en bestämd tid. –Observera händelse –Utvärdera händelse –Agera Korrekt beteende inkluderar både resultat och tid för presentation. –Krav på samplingsfrekvens –Krav på uppdateringsfrekvens (utdata) –Krav på svarstider
Realtidsprog. - Anders Arvidsson3 Olika typer av realtidssystem (RTS) Händelsestyrda vs Tidsdrivna Mjuka vs Hårda Mix: t ex GSM-telefon Preemtive, non-preemtive
Realtidsprog. - Anders Arvidsson4 Schemaläggning Robot som ska följa slinga och visa position på en PC Krocksensor Hjulräknare Analog slingdetektor Radiomodem Motordrivkort Realtidssystem? Hårt/Mjukt system?
Realtidsprog. - Anders Arvidsson5 Schemaläggning TaskPeriodtidExekveringstid K, Krocksensor10 ms50 μs H, Läs hjulräknare30 ms1 ms S, Styr (slingsens./motor)20 ms3 ms B, Beräkna/skicka pos100 ms22 ms Skriv ned tiderna ovan. Välja preemtive eller non-preemptive? Vilka ska i så fall bryta? Gör en schemaläggning.
Realtidsprog. - Anders Arvidsson6 Risker med schemaläggningen Hur väl dokumenterade är exekveringstiderna?
Realtidsprog. - Anders Arvidsson7 Laboration Exekveringstid long var_1, var_2;// 32 bit integer void Multiplikation(void) { produkt = var_1 * var_2;// Multiplicera variablerna } var_1 = 2; var_2 = ;=>96 cykler var_1 = ; var_2 = 2;=>816 cykler var_1 = 8192; var_2 = 8192; =>348 cykler var_1 = 8191; var_2 = 8191;=>483 cylker Worst case???
Realtidsprog. - Anders Arvidsson8 Laboration Exekveringstid, assemblerkod char var_1, var_2, produkt;// 8 bit unsigned integer void Multiplikation(void){ produkt = var_1 * var_2;// Multiplicera variablerna } Kompilerad till assembler (*.as): ;g:\picfil\demo\demokod.c: 81: produkt = var_1 * var_2; line81 movf(((_var_2))),w movwfbtemp+1;var_2 till RAM movf(((_var_1))),w;var_1 till Working reg globallbmul fcalllbmul;Subrutin lbmul movwf(((_produkt)));Working reg till produkt
Realtidsprog. - Anders Arvidsson9 Laboration Exekveringstid, assemblerbibliotek Förkortad bmul.as: lbmulSELTEMP movlw0;initialize product loopbtfscplier,0;skip if multiplier lsb not set addwfbtemp,w;add multiplicand bcfSTATUS,C;clear carry rlfbtemp;shift multiplicand up bcfSTATUS,C;clear carry again rrfplier;shift multiplier down tstfszplier;stor inverkan på tid, styr loop gotoloop return psect temp,global,class=BANK0,space=1,ovrld btempds1 plierds1 end
Realtidsprog. - Anders Arvidsson10 Laboration Kompilatorns inverkan Kompilering av laborationens program, long integer ( 517) words total Program ROM ( 39) bytes total Bank 0 RAM ( 8) bits total Bank 0 Bits Exekveringstid (Huvudprg): 1328 cykler Kompilering av samma program med optimering ( 438) words total Program ROM ( 39) bytes total Bank 0 RAM ( 8) bits total Bank 0 Bits Exekveringstid (Huvudprg): 1271 cykler ROM -15%, Exekveringstid –4,3%
Realtidsprog. - Anders Arvidsson11 Risker med schemaläggningen Vad händer om B tar 27 ms? (Hårda krav gäller för H, positionen tappas om hjulräknaren slår runt).
Realtidsprog. - Anders Arvidsson12 Schemaläggning TaskPeriodtidExekveringstid K, Krocksensor10 ms50 μs H, Läs hjulräknare30 ms1 ms S, Styr (slingsens./motor)20 ms3 ms B, Beräkna/skicka pos100 ms22 ms Gör en ny schemaläggning där K, S och H bryter.
Realtidsprog. - Anders Arvidsson13 Att tänka på Hur sätta prioritet? –Snabbast? –Viktigast? Risk för överlast? –T ex svält (ingen CPU-tid över till lågprioriterade tasks) Hur förhindra inkonsistent data? –Interrupt använder halvfärdig data –Det tar flera asm-instruktioner att räkna upp en int (t ex var++;). Vad händer om ISR bryter och läser var?
Realtidsprog. - Anders Arvidsson14 Att tänka på Risk för baklås? –Se skydd mot inkonsistent data. –Vid ogenomtänkt skydd kan flera rutin låsa data i en cirkel som förhindrar någon kan bli klar. Prioritetsinvertering? –Kan lågprioriterade rutiner låsa data så högprioriterade ändå måste låta dem köra klart först? Se fler begrepp i kursbok och övrig litteratur.
Realtidsprog. - Anders Arvidsson15 Realtidsoperativsystem (RTOS) Aktiverar task (schemaläggning, avbrott) Hanterar tid (periodicitet via timer) Sköter kommunikation mellan task (brevlådor) I/O-hantering (man skriver bara flyttbar kod) Drivrutiner Felhantering Fler funktioner beroende på val av OS.