Tietorakenteet¶
I2C-tietorakenne (1p)¶
Otetaan vähän ennakkoa ja tutustutaan SensorTag:n sensorien kanssa keskusteluun käytettävään i2c-protokollaan. Protokollassa on määritelty valmis tietorakenne viesteille, joka alla mukaillen.
struct i2c_message {
uint8_t sensorRegister; // Sensorin sisäinen muistipaikka
uint8_t slaveAddress; // Sensorin osoite
char *writeBuf; // Kirjoituspuskuri sensorille
uint8_t writeCount; // Kirjoituspuskurin pituus
char *readBuf; // Vastaanottopuskuri
uint8_t readCount; // Vastaanottopuskurin pituus
};
Aina kun haluamme kysyä sensorilta mittausarvoja, tulee meidän luoda ym. rakenteen mukainen viesti, jolle annetaan valmiiksi määriteltyjä parametrejä, kuten taulukot mihin lähetettävä viesti ja vastaanotettava viesti tallentuu. Lähetettävän ja vastaanotetun viestin (ts. puskurin koko) pituus voi tässä olla 2-6 merkkiä.
Noh, ei murehdita näistä nyt enempää, mutta laaditaan funktio, jolla viestirakenne voidaan tulostaa. Prototyyppi
void print_i2c(struct i2c_message *msg);
Oletetaan viestin alustus seuraavasti:
char txBuf[] = "ab",rxBuf[] = "cd";
struct i2c_message i2c;
i2c.sensorRegister = 0x01;
i2c.slaveAddress = 0x78;
i2c.writeBuf = txBuf;
i2c.writeCount = 2;
i2c.readBuf = rxBuf;
i2c.readCount = 2;
Yllä siis määriteltiin tietorakenteessa lähetettävä (writeBuf) viesti "ab", jonka pituus on kaksi merkkiä (writeCount) ja oletetaan vastaanotettu viesti "cd", pituus 2 merkkiä.
Tämä rakenne pitäisi tulostaa seuraavasti. Eli kaikki parametrit ja viestit tulostetaan heksadesimaalilukuina. Esim. 'a' = 0x61;
sensorRegister:01 slaveAddress:78 writeBuf:6162 readBuf:6364
Vihjeet
Viestit
Etsi MaxMin (3p)¶
Käytä luentomateriaalista tuttuja tietorakenteita, kts. alla.
struct piste { int x; int y; }; struct laatikko { struct piste max; struct piste min; struct piste pisteet[10]; };
Laadi funktio, joka etsii jäsenten
pisteet[10]
joukosta minimi- ja maksimipisteet avaruudessa (0,0)-(99,99) ja tallentaa nämä arvot jäseniin min
ja max
. Käytä etsinnässä euklidista etäisyyttä origosta. Käytä funktiossasi prototyyppiä
void etsi_maxmin(struct laatikko *box);
Vinkki. Nyt argumentti on osoitin, joten kertaa luentomateriaalista miten sellaisen tietorakenteen jäseniin osoitetaan.
Vinkki. math.h-kirjastosta löytyy funktio sqrt(), jolla voi laskea neliöjuuria.
Vinkki. math.h-kirjastosta löytyy funktio sqrt(), jolla voi laskea neliöjuuria.
Vihjeet
Viestit
Anna palautetta
Koitko tämän tehtävän hyödylliseksi oppimisen kannalta?
Kommentteja tehtävästä?
Anna palautetta
Kommentteja tehtävästä?