uC programowanie... WinAvr(Atmega16)

Witam!

Mam pytanie jak mozna inaczej zapisac "bit_is_set(bufor,Ktory)"? To dla mnie bardzo wazne, a szukacjac w necie nie natknelem sie na rozwiazanie.

a wymyslone prze zemnie konstrukcje nie dzialaja...to znaczy:

1) bufor&(1<<Ktory); 2) bufor&(1<<Ktory)==Ktory; czy 3) bufor |= (~(1<<Ktory))&1;

Pozdrawiam, Rafala k.

Reply to
ToR
Loading thread data ...

Dnia 13 Aug 2006 00:36:51 +0200, ToR napisał(a):

1) jest OK. Może czegoś innego zapominasz (np. if ;) )?

Tak jest zresztą definiowane to makro:

#define bit_is_set(sfr, bit) (_SFR_BYTE(sfr) & _BV(bit))

Pozdrawiam Marcin Stanisz

Reply to
Marcin Stanisz

Wykorzystując "#define" zapisałbym to: "#define bit_is_set(bufor, ktory) (bufor&(1<<ktory))". Dodatkowe nawiasy dają Ci możliwość sprawdzenia stanu bitu na "NIE" bez konieczności zastanawiania się nad błędami wywalanymi przez kompilator. Ale ilu "programatorów" to pewnie tyle zdań :-)

Pozdrawiam.

Reply to
Elpix

A to?:

bufor |= 1<<n; // ustawia na (n+1) pozycji bufor &= ~1<<n; // zeruje na (n+1) pozycji

pozdr. swinio

Reply to
invalid unparseable

Wielkie dzieki wszytkim za pomoc! ;)

Okazalo sie ze jak podejrzewaliscie wszytko mialem dobrze z sama definicja dzialania ale myslalem ze ono cos zwraca i wczesniej mialem taka konstrukcje:

if(bufor&(1<<Ktory) == 1) return 1;

a dzieki waszym podpowiedzia zmienilem na

if(bufor&(1<<Ktory)) return 1;

i dziala dobrze ;)!!!

pozdarwiam, Rafal k.

Reply to
ToR_kulaWYTNIJTO
<ToR snipped-for-privacy@o2.pl schrieb

No bo zwraca, ale nie 0 lub 1 tylko binarna koniunkcje czyli 0 lub 1<<Ktory.

Przy okazji zerknalem na wykaz priorytetow i wychodzi, ze == jest silniejsze niz &.

Zatem najblizsze poprawne bedzie takie: if ( (bufor&1<<Ktory) != 0) return 1;

hej

Reply to
mw158979

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.