bitfield v avr-gcc

Miroslav Sinko sinkomiro@rocketmail.com
Pondělí Červen 16 15:25:29 CEST 2008


Mozes mu poslat bitove pole 2x (pomocou pointera na cele pole a sizeofu to vies). V prvom poli bude maska, ktore flagy sa maju prevziat a v druhom budu mat tie flagy hodnotu, ktoru pozadujes.

Pointer na flag v zmysle ceckovy pointer nejde, lebo ceckovy pointer ukazuje iba na byte, nie na bit. Ale to Ti urcite nemusim vysvetlovat, asi si myslel povedzme dvojity pointer - jeden na prislusny byte, v ktorom sa flag nachadza a druhy poradove cislo bitu. Podla mojho nazoru nepojde ani toto, lebo bitove pole z principu nemusi obsahovat len 1-bitove flagy, ale aj viacbitove polozky, ktore sa mozu prelievat z bytu do bytu. Akoze ukazat povedzme na zaciatocny bit takej polozky (byte a bit) by mozno nejako uzitocne mohlo byt, ale ono sa bitfield pouziva iba tak, ze si jednoducho priradis hodnotu danej polozky z pola do premennej a s tou dalej pracujes, podobne v cykloch, podmienkach, predavani do funkcie...

miro


--- On Mon, 6/16/08, Jan Waclawek <konfera@efton.sk> wrote:
> Dakujem,
> 
> Mno, nie celkom, potadeto je to celkom normalne C, aj IMHO
> trocha zbytocnou oklukou.
> 
> Pointa tych bitovych poli by mala byt presne v tom istom
> ako je vobec pointa pouzivat miesto asembleru makroasembler
> zvany C; t.j. aby nieco co moze urobit stroj aj ten stroj
> urobil. Ak si mam sam definovat kde co je a v akom poradi,
> tak to mozem robit priamo v asembleri.
> 
> Konkretne tu je zamer ten, ze mam nejake flagy nahadzane v
> bitovom poli v lubovolnom poradi, pricom s tymito flagmi
> potrebujem robit nejake operacie ako s flagmi - nastavovat,
> nulovat, testovat (to je jednoduche priradenie a test prip.
> ine ekvivalentne operacie) - a aj nejake operacie kde sa
> pouzivaju vsetky naraz, napr. ukladat ich do eeprom,
> posielat ich nejakemu inemu zariadeniu (kde zdielam
> strukturu posielanych dat typedefmi v spolocnych headeroch)
> - toto sa potom da pekne robit s celym polom pomocou sizeof
> a podobnych opiciniek. Ked mi tam pribudne dalsich 100
> flagov, tak sa nemusim vzrusovat ich poradim, konfliktom v
> podobe duplicity apod., vsetko pekne funguje automaticky
> hned ako ich dopisem do definicie toho pola.
> 
> No a teraz mam taky problem, ze napriklad chcem z jedneho
> zariadenia do druheho poslat prikaz na prestavenie
> niektoreho konkretneho flagu -- no a na toto by sa mi hodil
> ten pointer.
> 
> Samozrejme viem ako to obist; len sa pytam, ci na to nie je
> nieco hotove, predzute.
> 
> Dakujem
> 
> wek
> 
> 
> 
> PS. uz ked som spomenul ten makroasembler, tak je mi jasne,
> ze preco tie bitfieldy boli dolepene az dodatocne - PDP-7
> pokial viem nemaj ziadne bitove instrukcie... ;-)



      


Další informace o konferenci Hw-list