previous next Up Title Contents Index

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.

Ohjelma C-kielellä

previous next Up Title Contents Index