Přeskočit na hlavní obsah

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.