[elektro] C kérdés
Ágó István
ago.istvan at gmail.com
Wed Sep 23 15:02:26 CEST 2009
De jó az is, de akkor is kellene, hogy b értékétől függően melyik bájton
végezze el a műveletet. Vagy van valami ötleted rá? Itt szerintem az a gond,
hogy első körben végigfut a preprocesszor, a bit_test helyére behajigálja az
(#if (b>7...) dolgot, és utána már a fordító akarná ezt fordítani, annak
viszont már az #if ismeretlen dolog.
2009/9/23 Acs Gabor <agabor at electrodesign.hu>
> Nem lenne jó egy asm betét? Mivel ott van bit test parancs.
>
>
> Gábor
>
> 2009.09.23. 14:40 keltezéssel, Ágó István írta:
> > Üdv mindenkinek
> >
> > Kellene csinálni egy makrót egy változó adott bitjének vizsgálatára, de
> > minél gyorsabb kellene, hogy legyen, mert sokszor fut le sok darab belőle
> > egymás után. A változó 16 bites tipus, az egyszerű if (valtozo&(1<<bit))
> > sajnos nem ad optimális kódot. Ha viszont castolom a változót és a
> megfelelő
> > "részre" használom az &(1<<bit) műveletet, akkor már azt kapom, amit
> > szeretnék. Tehát valami ilyesmire lenne szükségem:
> >
> > #define bit_test(valtozo,bit) (#if (bit>7) (*((unsigned
> > char*)((&valtozo)+1))&(1<<(bit-8))) #else (*((unsigned
> > char*)valtozo)&(1<<bit)) #endif)
> >
> > Tehát ha b értéke nagyobb mint hét, akkor a valtozo felső bájtján
> végezzen
> > &(1<<(bit-8)) műveletet, ha viszont kisebb mint hét, akkor az alsó
> bájtján
> > &(1<<bit) műveletet. Használata egyszerűen if (bit_test(valtozo, bit))
> > formában lenne. Csakhogy a fentit nem fogadja el a fordító (C18),
> egyszerűen
> > syntax errorral honorálja. bit értéke a kódban fix szám, tehát nem futás
> > közban akarok oda valamit berakni, hanem a preproceszor már ismert
> számmal
> > dolgozna. Természetesen berakhatnám minden sorba az odavaló
> bitvizsgálatot,
> > de az bántja a szememet :-)
> > -----------------------------------------
> > elektro[-flame|-etc]
> -----------------------------------------
> elektro[-flame|-etc]
More information about the Elektro
mailing list