

Esimerkki 2
Erään suuren luentosalin lämmitystä ja ilmastointia ohjaa tietokone.
 | Moniajotietokoneessa on käynnissä jatkuvasti valvontaohjelma, joka valvoo salin
lämpötilaa ja sisäilmaa. Tietyissä tilanteissa se asettaa päälle ja poistaa
päältä lämmityksen ja ilmastoinnin. Tällaisissa tilanteissa se lähettää viestejä
lämmityksen ja ilmastoinnin säätöohjelmalle, jonka tehtävänä on ohjata
laitteita.
|
 | Säätöohjelma on silmukassa toimiva ohjelma, joka odottaa viestejä
valvontaohjelmalta. Valvontaohjelman viestit se ottaa vastaan funktiolla get_message().
Funktion prototyyppi on |
int get_message(struct message *msg);
- get_message()-funktion kutsussa odotetaan, kunnes saadaan viesti.
Funktio palauttaa arvonaan normaalitilanteessa ykkösen ja sijoittaa viestin parametrina
välitettyyn osoitteeseen.
-
 | Säätöohjelman silmukka näyttää seuraavalta: |
while (get_message(&msg))
{
/* käsittele viesti */
}
 | Viestin tyyppi struct message on määritelty seuraavasti: |
struct message{
int toiminta; /* 1=päälle, 0=pois */
int laite; /*1=ilmastointi ,2=lämmitys*/
};
 | Säätöohjelma asettaa lämmityksen ja ilmastoinnin haluttuun tilaan muuttamalla
globaalin status-muuttujan arvon halutuksi ja kutsumalla sen jälkeen funktiota devices().
|
 | status-muuttuja sisältää kullakin hetkellä voimassa olevat ilmastointi- ja
lämmitysasetukset. Se on määrittely globaalina muuttujana: |
char status;
- status-muuttujan alin bitti ilmaisee, onko ilmastointi päällä (1) vai pois
(0).
Seuraava bitti ilmaisee, onko lämmitys päällä (1) vai pois (0).
-
 | devices()-funktion prototyyppi on |
int devices(void);
Tehtävänä on suunnitella ja kirjoittaa säätöohjelman koodin se osa, joka
kytkee lämmityksen ja ilmastoinnin pois/päälle (tehtävänä on siis
kirjoittaa valmiiksi edellä esitelty silmukka). Huom! Ohjelma ei saa muuttaa status-muuttujan
kuuden ylimmän bitin arvoja.


