RTV forum PL | NewsGroups PL

Alternatywne metody zapisu bit_is_set w programowaniu uC z WinAvr dla Atmega16?

uC programowanie... WinAvr(Atmega16)

NOWY TEMAT

elektroda NewsGroups Forum Index - Elektronika Polska - Alternatywne metody zapisu bit_is_set w programowaniu uC z WinAvr dla Atmega16?

ToR
Guest

Sat Aug 12, 2006 10:36 pm   



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.




--
Wysłano z serwisu OnetNiusy: http://niusy.onet.pl

Marcin Stanisz
Guest

Sat Aug 12, 2006 11:07 pm   



Dnia 13 Aug 2006 00:36:51 +0200, ToR napisał(a):
Quote:
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;

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

Tak jest zresztą definiowane to makro:

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

Pozdrawiam
Marcin Stanisz
--

"A lie will go round the world before the truth has got its boots on"
Terry Pratchett, "Truth"

Elpix
Guest

Sat Aug 12, 2006 11:17 pm   



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

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.

Józek Swinio
Guest

Sat Aug 12, 2006 11:24 pm   



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

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


A to?:

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


pozdr.
swinio

Andy
Guest

Sat Aug 12, 2006 11:29 pm   



Użytkownik "ToR" <ToR_kulaWYTNIJTO@o2.pl> napisał w wiadomości
news:3ea6.000000bd.44de5802@newsgate.onet.pl...
Quote:
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;


bit_is _set jest zdefiniowany tak:

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

natomiast _BV:

#define _BV(bit) (1 << (bit))

czyli ponizsza konstrukcja jest poprawna

bufor&(1<<Ktory)

znaczy:

if( bufor & (1<<Ktory) ) {

}

wydaje sie rownowazne:

if( bit_is_set( bufor, Ktory) ) {

}


Pokaz moze dokladnie w jakim kontekscie chcesz tego uzyc.

--
Andrzej

Guest

Sun Aug 13, 2006 9:42 am   



Quote:

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

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 Wink!!!

pozdarwiam,
Rafal k.

--
Wysłano z serwisu OnetNiusy: http://niusy.onet.pl

mw158979
Guest

Sun Aug 13, 2006 11:40 am   



<ToR_kulaWYTNIJTO@o2.pl> schrieb
Quote:
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;

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

elektroda NewsGroups Forum Index - Elektronika Polska - Alternatywne metody zapisu bit_is_set w programowaniu uC z WinAvr dla Atmega16?

NOWY TEMAT

Regulamin - Zasady uzytkowania Polityka prywatnosci Kontakt RTV map News map