Si struktúrák és azok átvitele

A szerkezet egy kényelmes tároló a heterogén adatokhoz, amelyeket össze szeretne hozni. Például létrehozhat egy olyan struktúrát, amely leírja a készülék paramétereit - a hálózati beállításokat, az elalvási időt, az azonosítót és így tovább, például egy üdvözlő vonalat és a LED állapotát. Miután az összes paramétert egy helyen tároltuk - mindig láthatóak lesznek, és a normál IDE-k megismerik a struktúra mezőket, amikor hozzájuk férnek hozzá. Figyelembe veszi az archívumok struktúrájának tárolását és helyreállítását, valamint a hálózaton keresztüli átadást.







Hogyan működik?

Egy kicsit másképp tehetnénk: csak a típust deklarálhatjuk, és később elkészíthetjük a változót. Ehhez a typedef kulcsszót használnánk és ezt írnánk:

Természetesen mindkét változatban kijelentheted a struktúrák tetszőleges számú példányát, vagy létrehozhatsz egy tömböt:

A tömbben található változat különösen alkalmas a kiszolgáló számára a hálózat ügyfél-kiszolgáló topológiájában - minden ügyfél tárolja saját paramétereit a struktúrában, és a master eszközön egy paramétertábla található az összes kliens számára egy tömb struktúrák formájában.

Elvileg nincs semmi bonyolult a struktúrákban, de a szerverek és az ügyfelek témájával simán közeledtünk egy érdekesebb téma felé:

A szerkezetek tárolása, továbbítása és szinkronizálása

Számos számára meglepő, hogy ezek a struktúrák lapos listák formájában vannak tárolva a memóriában, a szerkezet minden mezője egyszerűen megy a memóriába egyenként. Ezért ez a struktúra kezelhető, mint egy egyszerű byte tömb! Ellenőrizzük, hozzunk létre egy tömböt a "tetején" ennek a struktúrának.

A kezdeti eltolás a következő:

sizeof és offsetof

Még csak funkciók sem, de a C nyelv beépített makrerei. Kezdjük egy egyszerűbb, méretűvel.

A fordító az X formanyomtatvány összes rekordját helyettesíti az X hosszúságának értékével. X esetén mind a típus, mind a típus példánya működhet, azaz. esetünkben a sizeof és a szerkezet típusát helyettesíthetjük (ha typedef-et írunk egy typedef-hez), és maga a struktúra változó: size of params_struct vagy size of params. Át fogja haladni a struktúra összes területét, felveszi a hosszukat és adja meg az összeget, ami a szerkezet hossza.







Az offsetof egy valós makró, amely két paramétert (a _s_ struktúrát és a _m_ mezőt) tartalmaz, és megadja a mező pozícióját a struktúrában, offsetjét a struktúra kezdetéhez képest. Ez a makró nagyon egyszerűnek tűnik:

Hogyan működik?

Itt kell kicsit kitérnie. Az a kérdés, hogy a legegyszerűbb esetet vettem figyelembe, amikor a mezők pontosan egymás után vannak csomagolva. Vannak más csomagolási módszerek is, amelyeket "szintezésnek" neveznek. Például megadhat minden mezőt "slotnak", 4 bájt vagy 8 bájt többszöröse. Ezután még a karakter is 8 byte-ot fog elfoglalni, és a struktúra teljes mérete növekszik, és az összes eltolódás mozog, és az igazítás többszöröse lesz. Ez a dolog hasznos a számítógép programozásakor, mivel a RAM granulálása miatt a processzor sokkal gyorsabban képes kiolvasni a memóriából az összehangolt adatokat, kevesebb műveletet igényel.

Munka egy sor struktúrával

Oké, most bármilyen struktúrát reprezentálhatunk byte tömb formájában, és fordítva. Megérted a chipet? Számunkra most egy és ugyanazon a memóriaterületen van szerepük a "struktúra" és a "fájl". A struktúrában valamit megváltoztatunk - a tömb megváltozik, megváltoztatjuk a tömböt - a szerkezet változik.

Ez a folyamat lényege! Nincs külön tömbünk, mert maga a struktúra már tömb, és a memóriát különböző módon kezeljük. És nincsenek másolási ciklusok mezőkre vagy bájtokra, ez a ciklus azonnal az átviteli függvényben lesz.

Most csak meg kell tanulni, hogyan kell dolgozni mindezzel.

A szerkezet tárolása és átadása

A hálózaton keresztüli adatátvitel funkciói általában ugyanúgy néznek ki. Az adatátvitel params, és az adatok hossza - a params mérete.

A szerkezet átvétele és helyreállítása

Minden pontosan ugyanaz. A funkcióom az EEPROM-ból való elolvasása: I2C_burst_read (I2Cx, HW_address, addr, n_data, * adatok). n_data = a paramok mérete, * data = paramétereket:

Ne felejtsük el, hogy azonnal a fogadott bájtokat közvetlenül a struktúrába írjuk. Ha az átvitel lassú vagy megbízhatatlan, akkor érdemes az adatokat átírni egy ideiglenes pufferre, és miután ellenőrizte őket, áthelyezi őket a struktúrába a

E módszerek megvalósításánál két különböző számítógépen található struktúrák kényelmes szinkronizálását valósítjuk meg: a kliens-mikro-vezérlő legalább a kiszolgálón a föld másik oldalán lehet, de a struktúrák egyszerű továbbadása.

Egyedi mezők tárolása / helyreállítása

És miért nézzük át a makroszintű ellentéteket? Nagyon kényelmesen használhatja a struktúra különálló területeinek olvasására és írására, például:

Nos, és általában, nagyon jó lenne, ha kényelmes makro-csomagolást készítünk erre a célra.




Kapcsolódó cikkek