28.02.2014 Views

CIS 542 Embedded Systems Programming – Summer 2013 Lecture ...

CIS 542 Embedded Systems Programming – Summer 2013 Lecture ...

CIS 542 Embedded Systems Programming – Summer 2013 Lecture ...

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

handle_signal(motion);<br />

if (state != alarm_sounding) printf(“Test case failed!\n”);<br />

Note that for m states and n signals, we should have mn test cases: one for each combination. So, to<br />

really cover all the possibilities, we should also check to see what happens when we receive signals that<br />

should not change the state:<br />

state = disarmed;<br />

handle_signal(motion);<br />

if (state != disarmed) printf(“Test case failed!\n”);<br />

Now that we have this simple structure in place, we could add function calls to things like sound_alarm<br />

(e.g. between lines 14 and 15), which would either send output signals or take some other action. For<br />

instance (additional changes in bold):<br />

1<br />

2<br />

3<br />

4<br />

5<br />

6<br />

7<br />

8<br />

9<br />

10<br />

11<br />

12<br />

13<br />

14<br />

15<br />

16<br />

17<br />

18<br />

19<br />

20<br />

21<br />

22<br />

23<br />

24<br />

25<br />

26<br />

27<br />

28<br />

29<br />

30<br />

31<br />

32<br />

enum states {disarmed, armed, alarm_sounding} state;<br />

enum signals {arm, disarm, panic, motion, quiet};<br />

void handle_signal (enum signals signal) {<br />

switch (state) {<br />

case disarmed:<br />

switch (signal) {<br />

case arm:<br />

state = armed;<br />

arm_system();<br />

break;<br />

case panic:<br />

state = alarm_sounding;<br />

sound_alarm();<br />

break;<br />

}<br />

break;<br />

case armed:<br />

switch (signal) {<br />

case panic:<br />

state = alarm_sounding;<br />

sound_alarm();<br />

break;<br />

case motion:<br />

state = alarm_sounding;<br />

sound_alarm();<br />

break;<br />

case disarm:<br />

if (password_correct()) {

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!