K jednotlivým prvkům pole se dá dostat pomocí indexu nebo ukazatele. Pole se pak dá zpracovat cyklem. K jednotlivým bitům se pak dá dostat pomocí bitových AND a v případě zpracování celého Byte v cyklu spolu s bitovým posunem vpravo. Na to je vhodné napsat makra.
V případě jednočipu bych si rozmyslel, zda je "atomizace" bitů na hromadu struktur nutná. Paměti a strojového času není nazbyt. V závislosti na rychlosti sběrnice a komunikačním protokolu bych zvážil, zda lze přijatý Byte zpracovat hned při příjmu. Každé procházení pole je cyklus, čím více cyklů tím více času.
Vyhnul bych se implementačně závislým řešením. Pokud děláš pro jednočip a současně i aplikaci pro Windows, narazíš na rozdílné velikosti datových typů. Navíc se může lišit endianita a způsob zarovnávání dat v paměti. Pak chodí data chaoticky. Dva příklady z praxe:
Za použití unionu pro čtení jednotlivých Bytů z int v prostředí Keil 51 bych vraždil. Takový kód v EW 8051 nefunguje kvůli endianitě, jeho úprava stojí hodně práce (pro novější verzi je převodník, ale pro uživatele starších verzí je nedostupný). Při tom stačí použít bitové AND a posun vpravo o 8 bitů a kód se stává implementačně nezávislým. Navíc nemusím dumat nad uspořádáním v paměti. Překladač optimalizuje, sám dobře ví, jakou má endianitu, bitové operace vynechá a do paměti sáhne rovnou pro správný Byte (díval jsem se do výpisu v Assembleru). Tuhle optimalizaci uměl EW 8051 ver. 7.x už před cca 15 lety.
Když v prostředí Atmel studio použiješ union pro long a byte abys long mohl odeslat přes UART, Byty příjdou na přeskáčku.
hu