CIS 542 Embedded Systems Programming – Summer 2013 Lecture ...
CIS 542 Embedded Systems Programming – Summer 2013 Lecture ...
CIS 542 Embedded Systems Programming – Summer 2013 Lecture ...
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()) {