Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 24 lut 2025, o 23:47


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 3 ] 
Autor Wiadomość
PostNapisane: 9 paź 2013, o 20:09 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 17 lip 2013
Posty: 208
Lokalizacja: Kielce
Pomógł: 15

Witam

Mam dziś jakiś totalny problem ze zrozumieniem prostego kodu. Prosiłbym o pomoc bo mój tok rozumowania zawodzi. Mianowicie

Skoro powiedzzmy _BV()) oznacza (1<<0), _BV(1) (1<<1), to w pętli if: (zmienna jest typu uint8_t)

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Pętla if (jej zawartość) wykona się jeśli zerowy bit zmiennej jest 1 (np. 0b0000 0001).

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Warunek prawdziwy dla zerowego lub 1 bitu "zmienna"równego 1.

Natomiast nie potrafię zatrybić czegos takiego:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 paź 2013, o 21:28 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27359
Lokalizacja: Szczecin
Pomógł: 1042

danny napisał(a):
Skoro powiedzzmy _BV()) oznacza (1<<0), _BV(1) (1<<1), to w pętli if: (zmienna jest typu uint8_t)


No widzisz już na samym początku sam wprowadzasz się w stan złej hipnozy używając kocich operatorów _BV zamiast normalnych przesunięć bitowych. Z tym to jest jak z reklamą margaryny, która ponoć jest tak dobra jak masło. A skoro tak to po co męczyć się margaryną ?

Po co męczyć się kocim _BV()

zobaczysz, że jak przejdziesz na (1<<x) to od razu będzie po pierwsze jaśniej - piszę o tym sporo w bluebooku przecież.

http://atnel.pl/mikrokontrolery-avr-jezyk-c.html

danny napisał(a):
Natomiast nie potrafię zatrybić czegos takiego:


to przetłumaczmy to sobie najpierw na ludzki język: ;)

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


czyli

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


no bo przecież

najmniejsze wyrażenie jakim jest np niewątpliwie:

1<<0 oznacza co ? sam wiesz jest =1
1<<1 oznacza co ? sam wiesz jest =2

natomiast

1 | 2 = 3

bo

Cytuj:
0b00000001
0b00000010 OR
------------
0b00000011 (3)


teraz jaśniej ? ;)

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 paź 2013, o 22:32 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 17 lip 2013
Posty: 208
Lokalizacja: Kielce
Pomógł: 15

Faktycznie, w książce są stosowane przesunięcia. Teraz problem wydaje się trywialny. Niestety komplikowałem sobie życie złymi przyzwyczajeniami z _BV. Dziękuję za pomoc, teraz będę używał tylko przesunięć bitowych. :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 3 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 7 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO