Realtidsprog. - Anders Arvidsson1 Realtidsprogrammering En introduktion – Implementering (med exempel från PIC)

Slides:



Advertisements
Liknande presentationer
En introduktion till programmeringsspråket Python
Advertisements

Uppgiften i PowerPoint
void hittaMax(int tal[], int antal, int *pmax) { int i; ??=tal[0]; for(i=1;i??) ??=tal[i]; } int main() { int v[]={1,2,3,4,2}; int.
Anders Sjögren Lagringsklasser •en variabel i C har två attribut –type( int, float, char..... ) –lagringsklass( auto, extern, register, static ) •lagringsklassens.
Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition, Kapitel 5: CPU-schemaläggning.
Programstruktur: C för enchipsdatorer
Introduktion till C för enchipsdatorer
Många studenter använder en LCD-display till sin programmeringsuppgift
Funktioner och programorganisation
Föreläsning 7 Analys av algoritmer T(n) och ordo
#include void fun(char s[]) { int i=-1; while(s[++i]!=0) { if('a'
Tentamensdags och lab 3…. Större program delas normalt upp i flera filer/moduler vilket har flera fördelar:  Programmets logiska struktur när man klumpar.
William Sandqvist Varför använda en liten 8-bitars processor när det finns billiga kraftfulla 32-bitars? William Sandqvist
Föreläsning 4 Python: mera om funktioner och parametrar
Komparatorn en 1 bits AD-omvandlare
Föreläsning 2 Primitiva datatyper Variabler och konstanter Tilldelning Inläsning Operatorer Villkorssatsen if Slingor: while och for.
Realtidsprog. - Anders Arvidsson1 Realtidsprogrammering En introduktion - Principer och begrepp.
Algoritm analys och rekursiva metoder kap 5,7
Tentamensdags och lab 3…. Större program delas normalt upp i flera filer/moduler vilket har flera fördelar:  Programmets logiska struktur när man klumpar.
Anders Sjögren Selektion i C ”vägval” if och switch - satserna.
Pekare och speciell programstruktur i inbyggda system
Pointers. int a=5; int f(int b) { a--; b++; return b; } int main() { int a=3; printf("%d,",f(a)); printf("%d",a); return 0; }
Föreläsning 4 Kö Implementerad med array Implementerad med länkad lista Djup kontra bredd Bredden först mha kö.
Föreläsning 2 Kort Översikt Över Javaspråket. Källkodsformat Unicode används åäöμψζ tillåtna Inte alla miljöer klarar av det Källkod Bytekod Java VM för.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 8 ( ) Innehåll: Trådprogrammering i Java - Avbrott (”interrupts”) - Metoden join() -
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 4 ( ) INNEHÅLL: -Logiska opertorer -Poster.
Problemlösning Veckodagsproblemet Gissa talet Siffersumman.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 3 ( ) INNEHÅLL: -Jämförelseoperatorer -Villkorssatser -Logiska operatorer.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 3 ( ) INNEHÅLL: -Jämförelseoperatorer -Villkorssatser -Logiska operatorer.
Att överföra data till PC Förberedelse 1.Installera Programvara, finns på CD i framfickan på väska) 2.Ta fram handenhet 3.Ta fram USB-interface Tanka USB-interface.
Modulär programutveckling
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 7 ( ) INNEHÅLL: -Metoder -Lokala variabler -Mera om klasser: -Nyckelorden.
William Sandqvist Databuffer Omvandlar mellan olika storlekar på dataobjekt Anpassar mellan olika dataöverföringshastigheter Databuffer.
William Sandqvist PIC PIC (Peripheral Interface Computer) är en datorkrets med ”allt i ett”. Prog Mem. Programminnet är 2048 instruktioner.
Föreläsning 1 Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
William Sandqvist Melodispelaren Denna demonstrationslaboration visar, steg för steg, hur man skriver ett kort program i programspråket.
Anders Sjögren Bitfält exempel Nu kommer ett förbättrat program. Det är funktions- uppdelat och kan lägga till poster som lagras på fil.
Problemlösningsmetodik
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 5 ( ) INNEHÅLL: -Metoder.
William Sandqvist Polling och Interrupt Antag att Du sitter i en skön fåtölj och läser en bok. Plötsligt blir Du avbruten av att telefonen.
Anders Sjögren Selektion i C ”vägval” if och switch - satserna.
Föreläsning 4 programmeringsteknik och Matlab 2D1312/ 2D1305
Emulatorkonstruktion Schema Inledning Andra metoder Mina metoder Demonstration av min C64-emulator Sammanfattning och frågor.
Föreläsning 13 Appletprogram/fristående grafiska program Arv Rita linjer, rektanglar mm Skriva text, byta färg Appletprogram & HTML Grafiska användargränssnitt.
William Sandqvist Melodispelaren Denna demonstrationslaboration visar, steg för steg, hur man skriver ett kort program i programspråket.
Föreläsning 9 Arv kap 8.1 Interface kap 9.2 Grafiska användargränssnitt (GUI) kap 10.
OOP F13:1 Marie Olsson OOP Objekt-orienterad programmering Föreläsning 13 Repetition variabler, selektion och iteration.
Anders Sjögren Deklarationsområde och funktioner.
William Sandqvist DA-omvandling, oftast PWM.
F. Drewes, Inst. f. datavetenskap1 Föreläsning 15: Parallella subrutiner Parallellitet Processer och trådar Semaforer, monitorer och synkroniseringsmeddelanden.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 8 ( ) Innehåll: -Exekveringstrådar.
Mer om operatorer logiska operatorer bit-operatorer adress-operatorn ”komma”-operatorn punkt - operatorn.
Anders Sjögren Data (i primärminnet) som en länkad lista datatypen för varje element i listan är en struktur, post ( struct )
1 Föreläsning 2 Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
Föreläsning4 Repetition slingor Metoder. while-sats består av följande delar: 1. while 2. Villkor-sats (condition) 3. uttryck (statement) while-sats int.
OOP&M - teori1 OOP – Föreläsning 7 (Sista oop I) Konstruktioner för att hantera upprepningar Kapitel 11.
Robotprogrammering med Arduino Robot
Algoritmer och loopar Algoritmer, beräkningsbarhet
DA-omvandling, oftast PWM William Sandqvist En DA-omvandlare tar stor plats på processor- chippet. Den vanligaste DA-lösningen är i stället.
Anders Sjögren Modulär programutveckling. Anders Sjögren Ett programmeringsprojekt, flera personer utvecklar ett program Vi ska utveckla ett ränteberäkningsprogram.
Anders Sjögren Programmering i ANSI-C Ett första program för att se vart vi ska...
Mer om operatorer logiska operatorer bit-operatorer adress-operatorn ”komma”-operatorn punkt - operatorn.
Anders Sjögren Funktioner något in och något annat ut.
KPP053, HT2015 MATLAB, Föreläsning 4
Microprocessor / Microcontroller
Såhär fungerar BABS-maskinen
LATHUND BLODOMLOPPET 2017 Gå in på
Iteration – Repetitionssats - while
Såhär fungerar BABS-maskinen
Digitalteknik 3p - Sekvenskretsar
Presentationens avskrift:

Realtidsprog. - Anders Arvidsson1 Realtidsprogrammering En introduktion – Implementering (med exempel från PIC)

Realtidsprog. - Anders Arvidsson2 Utan timing Periodtid varierar beroende på funktionernas exekveringstid. Specificera endast maxtid (∑ Worst case) och eventuellt mintid (∑ Best case). För garanterad mintid kan en funktion utgöras av en fördröjningsloop.

Realtidsprog. - Anders Arvidsson3 Utan timing while(1){// Evig loop PWM = knapptest();// Läs och behandla indata PORTB = BinBCD(PWM);// Presentera RA2 = PWM_styr(PWM);// Agera delay();// Eventuell fördröjningsloop } Anm: Exekvering får ej stanna i någon funktion, se nästa sida.

Realtidsprog. - Anders Arvidsson4 Kodstruktur Vilken kod fungerar i realtid? while(1) { while (knapp==0) // Väntar tills knapp är tryckt continue; Led ^=1; while (knapp==1) // Väntar tills knapp är släppt continue; } while(1) { if (knapp ==1 && knappold ==0) // Detekterar att knappens Knapptryckt = 1; // tillstånd har gått från 0 till 1 Knappold = knapp; if (Knapptryckt == 1) { Led ^=1; Knapptryckt = 0; } }

Realtidsprog. - Anders Arvidsson5 Med timing Vid hård realtid får ∑ Worst case aldrig överstiga tiden från start av timer tills timern räknat ut. Periodtiden blir då konstant. Tidsmarginalen kan mätas genom att mäta tiden i wait. Sätt en pinne i början av wait (= idle), nollställ vid återstart. Ge felindikering om timern redan räknat ut när programmet når wait. Vid mjuk realtid kan timern startas med en kortare tid nästa varv om det förra varvet tog lite för lång tid. (Ladda om timern genom subtraktion istället för att ladda med en konstant). wait start

Realtidsprog. - Anders Arvidsson6 Med timing while(1){// Evig loop start_timer(periodtid);// Starta timern PWM = knapptest();// Läs och behandla indata PORTB = BinBCD(PWM);// Presentera RA2 = PWM_styr(PWM);// Agera idle();// Vänta på att timern räknat ut // Parallellt med det kan en // bakgrundstask utföras } Anm: Funktionerna får tillsammans inte ta längre tid än periodtid

Realtidsprog. - Anders Arvidsson7 Tidmätning Timer 0 Timer 8 bitar, räknar ständigt upp Kan ”slöas ner” av prescaler max 256 ggr => upp till cykler Använder intern klocka eller extern pinne Kan fungera som räknare

Realtidsprog. - Anders Arvidsson8 Timer Se option_reg (skriv bara option, i C) för konfigurering.

Realtidsprog. - Anders Arvidsson9 Timer Exempelkod void init_timer(void) { PSA = 0;// Koppla prescaler till TMR0 PS0 = 0;// Prescaler satt till PS1 = 1;// dela med 128 PS2 = 1; T0CS = 0;// Väljer intern oscillator till timer } void start_timer(void)// Laddar om timer { TMR0 = timervalue;// (256-timervalue)*prescaler*1us + omladdningstid T0IF = 0; } void wait_timer(void)// Väntar på att timer räknar ut (CPU är “idle”) { while(!T0IF) continue; }

Realtidsprog. - Anders Arvidsson10 Med timing, funktioner med lång exekv. tid Om en funktion tar för lång tid kan den ibland delas upp i två (eller fler) delar där ena delen körs ena varvet, andra delen nästa. Denna metod används när interrupt inte bör användas men någon funktion har behöver kortare periodtid än den långa funktionen kan möta. wait start switch()

Realtidsprog. - Anders Arvidsson11 Interrupt Avbrott = preemptive schemaläggning

Realtidsprog. - Anders Arvidsson12 Med Avbrott Större delen av programmet körs som en bakgrundstask. Avbrottsrutinen (ISR) kör med viss periodicitet (triggad av timern) och/eller vid vissa händelser. Övriga programmet kan köras med timing som i tidigare exempel, synkronisera med en flagga från ISR eller använd en andra timer. ISR

Realtidsprog. - Anders Arvidsson13 Avbrott Exempelkod void interrupt timer(void){// timer = funktionens namn // interrupt = lägg funktionen på int_handling();// adress 4 something_hard(); } i main() while(1){// Evig loop something_soft(); idle();// Vänta på nästa interrupt // = Synk }

Realtidsprog. - Anders Arvidsson14 Interrupt Källor  Flaggor  IE = Interrupt Enable  IF = Interrupt Flag

Realtidsprog. - Anders Arvidsson15 Konfigurera Interrupt Exempelkod void interrupt timer(void) { Flag = 1;// Visa att int skett TMR0 = timervalue;// Sätt timervalue med #define T0IF = 0; } void init(void) { PSA = 0;// Använd prescaler till TMR0 PS0 = 1;// Prescaler satt till dela med 64 PS1 = 0; PS2 = 1; T0CS = 0;// Väljer intern oscillator T0IE = 1;// Timer0 Interrupt Enable GIE = 1;// Global Interrupt Enable }

Realtidsprog. - Anders Arvidsson16 Implementera schemaläggning Robot från föreläsning om realtidsprinciper.

Realtidsprog. - Anders Arvidsson17 Struktur Switch switch (CykCnt) {// Var 10:e ms case 0:{// 0 ms K();// Krocksensor S();// Styr robot H();// Hjulräknare break; } case 1: case 5: {// 10, 50 ms K(); break; } case 2: case 4: {// 20, 40 ms K(); S(); break; } case 3: {// 30 ms K(); H(); break; } default: { CykCnt=0; } CykCnt=CykCnt++; If (CykCnt == 6) CykCnt=0;