Struktury
Struktura spojuje více hodnot do jednoho pojmenovaného celku. Hodí se, když jedna věc potřebuje více vlastností.
Například senzor nemusí mít jen jednu hodnotu. Může mít název, aktuální měření a informaci, jestli je zapnutý.
V C může struktura vypadat takto:
typedef struct {
uint16_t hodnota;
bool aktivni;
} senzor_t;
Tím vznikl nový typ senzor_t.
Jedna proměnná tohoto typu obsahuje dvě položky:
hodnota a aktivni.
Použití struktury
senzor_t levy_senzor;
levy_senzor.hodnota = 1234;
levy_senzor.aktivni = true;
Tečka znamená: "vezmi položku uvnitř struktury".
Takže:
levy_senzor.hodnota
znamená položku hodnota uvnitř proměnné levy_senzor.
Proč nepoužít jen obyčejné proměnné
Bez struktury by program mohl vypadat takto:
uint16_t levy_senzor_hodnota;
bool levy_senzor_aktivni;
To ještě jde. Ale když máte senzorů jedenáct, začne z toho být nepořádek.
Se strukturou můžeme říct:
senzor_t senzory[11];
Teď máme pole jedenácti senzorů.
Každý prvek pole obsahuje hodnota a aktivni.
senzory[0].hodnota = 100;
senzory[0].aktivni = true;
To už se čte mnohem lépe. Program říká: "u prvního senzoru nastav hodnotu a stav".
Struktury v embedded
Struktury jsou v embedded programování velmi užitečné. Používají se například pro:
- konfiguraci periférie,
- popis senzoru,
- datový paket,
- stav komunikace,
- záznam měření.
Například jednoduchý paket:
typedef struct {
uint8_t typ;
uint8_t delka;
uint8_t data[16];
} packet_t;
Taková struktura drží pohromadě hodnoty, které k sobě logicky patří. To je lepší než mít v programu hromadu proměnných, u kterých musíte pořád přemýšlet, co patří k čemu.
Struktura není slovník
Struktura má položky dané už při překladu programu.
Když vytvoříte senzor_t,
víte předem,
že má položky hodnota a aktivni.
Slovník je pružnější: klíče mohou vznikat a mizet za běhu programu.
Na malém čipu je pevná struktura často výhoda. Je rychlá, úsporná a překladač umí zkontrolovat, že používáte existující položky.