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