[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