[elektro] C tesztsor makróban
hg12345
hg12345 at freemail.hu
Mon Dec 21 16:30:52 CET 2015
biteket csak strukturában tudsz kezelni C-ben "korrekten"
typedef struct {
unsigned b00:1;
unsigned b01:1;
unsigned b02:1;
unsigned b03:1;
unsigned b04:1;
unsigned b05:1;
unsigned b06:1;
unsigned b07:1;
} uint8bits_t
gondolom ezt ismerted.
innen kezdve már csak egy ugrás a bit művelet, de azért érdemes vigyázni a "cast"-lásokkal
#define bitdef(value,bname) ((uint8bits_t*)&value)[0].##bname
#define btoggle(value,bname) bitdef(value,bname) ^=1;
#define bset(value,bname) bitdef(value,bname) =1
#define bclr(value,bname) bitdef(value,bname) =0
ez tetszőlegesen kiterjeszthető, akárhány bites változóra, néhány fordító csak az int hosszúságáig engedélyezi.
használat :
int AAA;
btoggle(AAA,b03);
hogy mennyire olvasható, az már ízlés kérdése :-()
Szintén vigyázni kell az optimalizálásra, mert azok a változók amit nem használsz tovább ott -O3 esetén kidobásra kerülnek a műveletek, ez nem túl jó a nyomkövetésben, gondolom erre szeretnéd használni.
Ez esetben használj "volatile" módosítót a változó definiálásánál, a perifériáknál ezt a gyári includokban megcsinálják.
Erre gondoltál?!
More information about the Elektro
mailing list