Realtidsprogrammering En introduktion - Principer och begrepp Realtidsprog. - Anders Arvidsson 1
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 2
Olika typer av realtidssystem (RTS) Händelsestyrda vs Tidsdrivna Mjuka vs Hårda Mix: t ex GSM-telefon Preemtive, non-preemtive Realtidsprog. - Anders Arvidsson 3
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 4
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 5
Risker med schemaläggningen Hur väl dokumenterade är exekveringstiderna? Realtidsprog. - Anders Arvidsson 6
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 = 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??? Realtidsprog. - Anders Arvidsson 7
Laboration Exekveringstid, assemblerkod char var_1, var_2, produkt; void Multiplikation(void){ produkt = var_1 * var_2; } // 8 bit unsigned integer // 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 Realtidsprog. - Anders Arvidsson 8
Laboration Exekveringstid, assemblerbibliotek 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 Realtidsprog. - Anders Arvidsson 9
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 Arvidsson 10
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 11
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 12
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 13
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 14
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 15
Vad är ett realtidssystem? Realtidsprogrammering En introduktion - Principer och begrepp 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 1 Realtidsprog. - Anders Arvidsson 2 Olika typer av realtidssystem (RTS) Händelsestyrda vs Tidsdrivna Schemaläggning Mjuka vs Hårda Mix: t ex GSM-telefon Preemtive, non-preemtive 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 3 Realtidsprog. - Anders Arvidsson 4 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 Risker med schemaläggningen Hur väl dokumenterade är exekveringstiderna? Skriv ned tiderna ovan. Välja preemtive eller non-preemptive? Vilka ska i så fall bryta? Gör en schemaläggning. Realtidsprog. - Anders Arvidsson 5 Realtidsprog. - Anders Arvidsson 6 1
Laboration Exekveringstid long var_1, var_2; void Multiplikation(void) { produkt = var_1 * var_2; } // 32 bit integer 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 // Multiplicera variablerna Laboration Exekveringstid, assemblerkod char var_1, var_2, produkt; void Multiplikation(void){ produkt = var_1 * var_2; } // 8 bit unsigned integer // 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 Worst case??? Realtidsprog. - Anders Arvidsson 7 Realtidsprog. - Anders Arvidsson 8 Laboration Exekveringstid, assemblerbibliotek Laboration Kompilatorns inverkan 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 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 9 Realtidsprog. - Anders Arvidsson 10 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). 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 11 Realtidsprog. - Anders Arvidsson 12 2
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? 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 13 Realtidsprog. - Anders Arvidsson 14 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 15 3