150 likes | 346 Views
Realtidsprogrammering. En introduktion - Principer och begrepp. 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.
E N D
Realtidsprogrammering En introduktion - Principer och begrepp Realtidsprog. - Anders Arvidsson
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 Arvidsson
Olika typer av realtidssystem (RTS) • Händelsestyrda vs Tidsdrivna • Mjuka vs Hårda • Mix: t ex GSM-telefon • Preemtive, non-preemtive Realtidsprog. - Anders Arvidsson
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 Arvidsson
Schemaläggning • Task Periodtid Exekveringstid • K, Krocksensor 10 ms 50 μs • H, Läs hjulräknare 30 ms 1 ms • S, Styr (slingsens./motor) 20 ms 3 ms • B, Beräkna/skicka pos 100 ms 22 ms • Skriv ned tiderna ovan. • Välja preemtive eller non-preemptive? Vilka ska i så fall bryta? • Gör en schemaläggning. Realtidsprog. - Anders Arvidsson
Risker med schemaläggningen • Hur väl dokumenterade är exekveringstiderna? Realtidsprog. - Anders Arvidsson
long var_1, var_2; // 32 bit integer void Multiplikation(void) { produkt = var_1 * var_2; // Multiplicera variablerna } var_1 = 2; var_2 = 123456789; => 96 cykler var_1 = 123456789; var_2 = 2; => 816 cykler var_1 = 8192; var_2 = 8192; => 348 cykler var_1 = 8191; var_2 = 8191; => 483 cylker Worst case??? LaborationExekveringstid Realtidsprog. - Anders Arvidsson
char var_1, var_2, produkt; // 8 bit unsigned integervoid Multiplikation(void){ produkt = var_1 * var_2; // Multiplicera variablerna} Kompilerad till assembler (*.as): ;g:\picfil\demo\demokod.c: 81: produkt = var_1 * var_2; line 81 movf (((_var_2))),w movwf btemp+1 ;var_2 till RAM movf (((_var_1))),w ;var_1 till Working reg global lbmul fcall lbmul ;Subrutin lbmul movwf (((_produkt))) ;Working reg till produkt LaborationExekveringstid, assemblerkod Realtidsprog. - Anders Arvidsson
Förkortad bmul.as: lbmul SELTEMP movlw 0 ;initialize product loop btfsc plier,0 ;skip if multiplier lsb not set addwf btemp,w ;add multiplicand bcf STATUS,C ;clear carry rlf btemp ;shift multiplicand up bcf STATUS,C ;clear carry again rrf plier ;shift multiplier down tstfsz plier ;stor inverkan på tid, styr loop goto loop return psect temp,global,class=BANK0,space=1,ovrld btemp ds 1 plier ds 1 end LaborationExekveringstid, assemblerbibliotek Realtidsprog. - Anders Arvidsson
LaborationKompilatorns 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 Arvidsson
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 Arvidsson
Schemaläggning • Task Periodtid Exekveringstid • K, Krocksensor 10 ms 50 μs • H, Läs hjulräknare 30 ms 1 ms • S, Styr (slingsens./motor) 20 ms 3 ms • B, Beräkna/skicka pos 100 ms 22 ms • Gör en ny schemaläggning där K, S och H bryter. Realtidsprog. - Anders Arvidsson
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 Arvidsson
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 Arvidsson
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. Realtidsprog. - Anders Arvidsson