Presentation laddar. Vänta.

Presentation laddar. Vänta.

William Sandqvist Flera saker samtidigt? /* Blink1: 1s ON - 1s OFF */ /* Blink2: 0,2s ON - 0,2s OFF - 1s ON - 1s OFF */

Liknande presentationer


En presentation över ämnet: "William Sandqvist Flera saker samtidigt? /* Blink1: 1s ON - 1s OFF */ /* Blink2: 0,2s ON - 0,2s OFF - 1s ON - 1s OFF */"— Presentationens avskrift:

1 William Sandqvist william@kth.se Flera saker samtidigt? /* Blink1: 1s ON - 1s OFF */ /* Blink2: 0,2s ON - 0,2s OFF - 1s ON - 1s OFF */

2 William Sandqvist william@kth.se Först en lysdiod … while(1) { /* Blink1: 1s ON - 1s OFF */ switch(State1) { case 0: Blink1 = ON; Time1++; if( Time1 == 10 ) { State1 = 1; Time1 = 0; } break; case 1: Blink1 = OFF; Time1++; if( Time1 == 10 ) { State1 = 0; Time1 = 0; } } delay10(10); /* 0,1 sek delay */ }

3 William Sandqvist william@kth.se Sedan en annan lysdiod … while(1) { /* Blink2: 0,2s ON - 0,2s OFF - 1s ON - 1s OFF */ switch(State2) { case 0: Blink2 = ON; Time2++; if( Time2 == 2 ) { State2 = 1; Time2 = 0; } break; case 1: Blink2 = OFF; Time2++; if( Time2 == 2 ) { State2 = 2; Time2 = 0; } break; case 2: Blink2 = ON; Time2++; if( Time2 == 10 ) { State2 = 3; Time2 = 0; } break; case 3: Blink2 = OFF; Time2++; if( Time2 == 10 ) { State2 = 0; Time2 = 0; } } delay10(10); /* 0,1 sek delay */ }

4 William Sandqvist william@kth.se Varför inte båda? while(1) { /* Blink1: 1s ON - 1s OFF */ switch(State1) { case 0:... ; break; case 1:... ; } /* Blink2: 0,2s ON - 0,2s OFF - 1s ON - 1s OFF */ switch(State2) { case 0:... ; break; case 1:... ; break; case 2:... ; break; case 3:... ; } delay10(10); /* 0,1 sek delay */ }

5 William Sandqvist william@kth.se En makalös manick? Lysdiod1, Lysdiod2, Kaffeautomat, Motor … Alla kursens Moore-automater på en och samma gång! manick.c Programmet är bara på 300 kodrader. ( Frågan är vad man ska ha det till ? ) Årets Julklapp?

6 William Sandqvist william@kth.se State machines State machines/Tillståndsmaskiner/Moore-automater är således mycket användbara hjälpmedel för att programmera ”parallella” processer för små microcontrollers. Tips! Observera att B Knudsen lägger ut effektivare kod för switch() – case än för if() – else if() – else så använd alltid switch-satsen! Många komersiella programvaror bygger på State machines …

7 William Sandqvist william@kth.se Grafiska programspråk, LabView do { Blink != Blink; delay10(100); /* 1 sek delay */ } while(!Stop );

8 William Sandqvist william@kth.se En state machine ritad med Realizer. PIC-kod genereras sedan direkt. Realizer, ett grafiskt programmeringsverktyg för små processorer, tex. PIC. Realiser

9 William Sandqvist william@kth.se B. Knudsen Kan man verkligen skriva ”multitask program” för en 8 bitars processor som bara har en ynkligt liten hårdvarustack? B Knudsen har ett ”udda” verktyg, Leanslice – som ger multitasking med hjälp av anrop till en ”dold statemachine”. Leanslice manual Den som är intresserad läser:

10 William Sandqvist william@kth.se


Ladda ner ppt "William Sandqvist Flera saker samtidigt? /* Blink1: 1s ON - 1s OFF */ /* Blink2: 0,2s ON - 0,2s OFF - 1s ON - 1s OFF */"

Liknande presentationer


Google-annonser