bitfield v avr-gcc

Miroslav Sinko sinkomiro@rocketmail.com
Pondělí Červen 16 20:31:04 CEST 2008


pardon stlacil som TAB a este cosi a odisiel nedopisany mail... takze dokoncujem..

--- On Mon, 6/16/08, Jan Waclawek <konfera@efton.sk> wrote:

> Ano, to je pravda, ze na prenos absolutnej adresy pointer
> nie je vhodny. Ja som si blbo premyslel priklad. Moj
> skutocny problem je v tom ako urobit efektivne tabulkou
> (polom structov) riadeny system menu - tam ta analogia s
> funkcnymi pointrami vynikne viac.

Tu sa da zaobist bez bitovych poli. Pristup na polozky "beznych" struktur je v C bezproblemovy bez ohladu na zarovnanie v strukturach. 
pointer = &struct.item;

Inac nieco take, co si chces spravit, uz pre AVR, v GCC spravene mam :-) Nie je to este celkom dotiahnute, ale v principe mi to chodi. Ak mas zaujem.. Pozor - predstavy o efektivnosti sa mozu odlisovat :-))


> V tej syntaxi nevidim problem. Ak sa Ti zda ze sa s tym
> neda vysporiadat, tak vid funkcie z predchadzajuceho mailu,
> ale tie operatory (* a &) su ekvivalentne.

No v C neurobis pointer na bit v C-ckovom chapani slova pointer. Mozes si urobit

struct{
 void *pointer_na_cele_bitfield;
 BYTE bytovy_offset;
 BYTE bit;
}pointer_na_bitfield;

Bude to pre Teba pointer, ale z pohladu jazyka je to struktura. No a po druhe budes mat problem naplnit si tento "pointer" hodnotami, lebo jazyk C neposkytuje moznosti ziskat akukolvek informaciu, ktorou by si vyplnil bytovy_offset a bit napr. pre polozku b4 v tomto priklade:

struct{
 BYTE a0 :1
 BYTE a1 :5
 BYTE a2 :7
 BYTE b0 :2
 BYTE b1 :4
 BYTE b2 :3
}bitfield;

Samozrejme pravidla umiestnenia jednotlivych poloziek v bitfielde su pre dany kompilator zname/zistitelne, takze zapisat si ich ako konstanty vies... Ale o toto nam neslo :-(

miro



      



Další informace o konferenci Hw-list