Vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1...

25
Hogeschool van Utrecht / Institute for Computer, Communicati on and Media Technology 1 vervolg C Onderwerpen voor vandaag Gelinkte lijsten Finite State Machine (Eindige Toestands Machine)

Transcript of Vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1...

Page 1: Vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Onderwerpen voor vandaag Gelinkte lijsten Finite State.

Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology

1vervolg C

Onderwerpen voor vandaag

• Gelinkte lijsten• Finite State Machine (Eindige Toestands Machine)

Page 2: Vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Onderwerpen voor vandaag Gelinkte lijsten Finite State.

Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology

2vervolg C

Lijst operaties

1. Voeg toe achteraan (enqueue)

2. Haal weg vooraan (dequeue, pop)

3. Voeg toe vooraan (push)

4. Haal weg achteraan (?)

5. Voeg toe in ‘t midden

6. Haal weg in ‘t midden

Page 3: Vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Onderwerpen voor vandaag Gelinkte lijsten Finite State.

Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology

3vervolg C

Singly linked, double linked

Page 4: Vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Onderwerpen voor vandaag Gelinkte lijsten Finite State.

Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology

4vervolg C

Ending, circular

Page 5: Vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Onderwerpen voor vandaag Gelinkte lijsten Finite State.

Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology

5vervolg C

Insert, delete (singly linked)

Page 6: Vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Onderwerpen voor vandaag Gelinkte lijsten Finite State.

Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology

6vervolg C

Insert, delete (double linked)

Page 7: Vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Onderwerpen voor vandaag Gelinkte lijsten Finite State.

Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology

7vervolg C

Sentinels

Sentinel ( ~ wachter ): dummy queue element dat er altijd is. 1 bij circulaire lijsten, 2 bij ‘eindigende’ lijsten.

Voordeel: geen apart geval meer in de code voor begin of einde van de lijst.

Nadeel: extra geheugen nodig voor de sentinel. Sentinel == zelfde type als lijst elementen, dus als een lijstelement ‘groot’ is kan dit kostbaar zijn.

Page 8: Vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Onderwerpen voor vandaag Gelinkte lijsten Finite State.

Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology

8vervolg C

lijstenLink Vorm Sentinels

Enkel Eindig Nee Eenvoudig concept

Enkel Eindig Ja Code voor lege lijst en laatste element eenvoudiger

Enkel Circulair Nee Geen aparte ‘first’ en ‘last’ pointers nodig

Enkel Circulair ja

Dubbel Eindig Nee Delete kan met alleen pointer naar het element

Dubbel Eindig Ja

Dubbel Circulair Nee

Dubbel Circulair ja Ingewikkeld concept, maar de eenvoudigste code, zonder if’s

Page 9: Vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Onderwerpen voor vandaag Gelinkte lijsten Finite State.

Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology

9vervolg C

Finite State Machine (= Eindige Toestands Machine)

• states (toestanden)

• events (gebeurtenissen, boodschappen, triggers)

• actions (wat je programma doet)

Diverse notaties in gebruik, schrik niet als je een iets andere notatie tegenkomt.

Page 10: Vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Onderwerpen voor vandaag Gelinkte lijsten Finite State.

Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology

10vervolg C

FSM voorbeeld : knipper LED op 1/2 Hz

States : – LED is aan– LED is uit

Events : – 1 seconde timer tick

Actions :– LED aanzetten– LED uitzetten

Page 11: Vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Onderwerpen voor vandaag Gelinkte lijsten Finite State.

Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology

11vervolg C

knipper LED op 1/2 Hz : FSM diagram

LED is uit LED is aan

initLED uitzetten 1s timer tick

LED aanzetten

1s timer tickLED uitzetten

Page 12: Vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Onderwerpen voor vandaag Gelinkte lijsten Finite State.

Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology

12vervolg C

knipper LED op 1/2 Hz : State-Transistion diagram

Event

State

1s timer tick

LED is uit LED aanzetten

LED is aan

LED is aan LED uitzetten

LED is uit

Page 13: Vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Onderwerpen voor vandaag Gelinkte lijsten Finite State.

Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology

13vervolg C

FSM voorbeeld : knipper LED op 1/2 Hz

// states

#define knipper_state_init 0

#define knipper_state_uit 1

#define knipper_state_aan 2

// events

#define knipper_event_tick 100

// current state

int knipper_state = knipper_state_init;

// acties

void Zet_LED( int led, int x ){

...

}

void fsm_knipper( int & state, int led, int event ){ if( *state == knipper_state_init ){ Zet_LED( led, 0 ); *state = knipper_state_uit; }

if( *state == knipper_state_uit ){ if( event == knipper_event_tick ){ Zet_LED( led, 1 ); *state = knipper_state_aan; return; } }

if( *state == knipper_state_aan ){ if( event == knipper_event_tick ){ Zet_LED( led, 0 ); *state = knipper_state_uit; return; } }}

Page 14: Vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Onderwerpen voor vandaag Gelinkte lijsten Finite State.

Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology

14vervolg C

FSM voorbeeld : Toegangspoort 1

Page 15: Vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Onderwerpen voor vandaag Gelinkte lijsten Finite State.

Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology

15vervolg C

FSM voorbeeld : Toegangspoort 2

Page 16: Vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Onderwerpen voor vandaag Gelinkte lijsten Finite State.

Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology

16vervolg C

FSM voorbeeld : Toegangspoort 3

Page 17: Vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Onderwerpen voor vandaag Gelinkte lijsten Finite State.

Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology

17vervolg C

FSM voorbeeld : Toegangspoort 3

Event

State

Coin Pass Reset Ready

Locked Unlock()

Unlocked

Alarm()

Violation Locked Locked

Unlocked Thankyou()

Unlocked

Lock()

Locked Unlocked Unlocked

Violation

Violation Violation

ResetAlarm()

Violation

Lock()

ResetAlarm()

Locked

Page 18: Vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Onderwerpen voor vandaag Gelinkte lijsten Finite State.

Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology

18vervolg C

// states#define poort_state_init 0#define poort_state_locked 1#define poort_state_unlocked 2#define poort_state_violation 3

// events#define poort_event_coin 100#define poort_event_pass 100#define poort_event_reset 100

// current stateint poort_state = poort_state_init;

// actionsvoid poort_thankyou( void );void poort_lock( void );void poort_unlock( void ); void poort_start_alarm( void );void poort_stop_alarm( void );

void fms_poort( int event ){ if( state == poort_state_init ){ poort_lock(); state = poort_state_locked;}

if( state == poort_state_locked ){ if( event == poort_event_coin ){ poort_unlock(); state = poort_state_unlocked(); } if( event == poort_event_pass ){ poort_alarm(); state = poort_state_violation(); } return; }

...}

Page 19: Vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Onderwerpen voor vandaag Gelinkte lijsten Finite State.

Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology

19vervolg C

knipper LED op X Hz : State-Transistion diagram

Event

State1ms timer tick

LED is uit n++;

if( n == 500/x ){

LED aanzetten

n = 0;

state = LED is aan

}

LED is aan n++;

if( n == 500/x ){

LED uitzetten

n = 0;

state = LED is uit

}

Page 20: Vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Onderwerpen voor vandaag Gelinkte lijsten Finite State.

Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology

20vervolg C

FSM voorbeeld : knipper LED op X Hzvoid fsm_knipper( int & state, int led, int X, int *n, int event ){ if( *state == knipper_state_init ){ Zet_LED( led, 0 ); *state = knipper_state_uit; *n == 0; return; }

if( *state == knipper_state_uit ){ if( event == knipper_event_tick ){ *n++; if( *n == 500/x ){ Zet_LED( led, 1 ); *n = 0; *state = knipper_state_aan; } return; } }

if( *state == knipper_state_aan ){ if( event == knipper_event_tick ){ *n++; if( *n == 500/x ){ Zet_LED( led, 0 ); *n = 0; *state = knipper_state_uit; } return; } }}

Page 21: Vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Onderwerpen voor vandaag Gelinkte lijsten Finite State.

Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology

21vervolg C

FSM voorbeeld : knipper diverse LEDs

while( 1 ){ wait_1ms(); fsm_knipper( &state1, l, 10, &n1, knipper_event_tick ); fsm_knipper( &state2, 2, 12, &n2, knipper_event_tick ); fsm_knipper( &state3, 3, 300, &n3, knipper_event_tick ); fsm_knipper( &state4, 4, 5, &n4, knipper_event_tick ); ...

}

Page 22: Vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Onderwerpen voor vandaag Gelinkte lijsten Finite State.

Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology

22vervolg C

Rotary encoder (quadrature encoder)

Sensor voor het bijhouden van de draaiing van een as.

Toegepassingen:

– user interface (afstemknop)

– computermuis

– motorsturing

Page 23: Vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Onderwerpen voor vandaag Gelinkte lijsten Finite State.

Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology

23vervolg C

Page 24: Vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Onderwerpen voor vandaag Gelinkte lijsten Finite State.

Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology

24vervolg C

Opdracht ”rotary encoder”

Een rotary encoder FSM moet in de stand van een rotary encoder bijhouden. Bij een click naar rechts +1, bij een klick naar links -1. Er moet rekening gehouden worden met denderen en ‘halve bewegingen’ (= effect is hetzelfde als denderen).

Page 25: Vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Onderwerpen voor vandaag Gelinkte lijsten Finite State.

Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology

25vervolg C

Opdracht ”rotary encoder”

Stel de lijst van states (4), events (4) en acties (2), op voor een rotary encoder FSM

- Maak het State Transition Diagram (er zijn ‘fysiek-logisch onmogelijke’ events, die hoef je niet te laten zien)

- Vertaal je STD naar C code