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



Teraz jest 25 kwi 2024, o 11:36


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 4 ] 
Autor Wiadomość
PostNapisane: 2 wrz 2014, o 14:42 
Offline
Nowy

Dołączył(a): 16 mar 2014
Posty: 13
Pomógł: 0

Witam! Analizując kod funkcji SuperDebounce z BB natknąłem się na linijkę, której do końca nie rozumiem, a mianowicie:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Dokładniej chodzi mi o to co będzie zawierało wyrażenie *KPIN i czym by się ono różniło gdybyśmy go użyli bez gwiazdki? Z tego co jest kilka stron wcześniej napisane w BB, parametr *KPIN służy do przekazania fizycznego adresu wybranego portu mikrokontrolera, więc jak bitowy iloczyn logiczny adresu portu i niezmiennej maski klawisza da w rezultacie stan klawisza (który jak mniemam się zmienia)? Próbowałem to rozwikłać, ale nie dałem rady więc proszę o wyrozumiałość ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 wrz 2014, o 15:16 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 paź 2013
Posty: 1960
Lokalizacja: Lipsko
Pomógł: 125

piotrek_194 napisał(a):
...parametr *KPIN służy do przekazania fizycznego adresu wybranego portu mikrokontrolera...


a nie przypadkiem wartości z pod tego adresu...? ;)

_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 wrz 2014, o 16:22 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 29 sty 2012
Posty: 777
Lokalizacja: Karpicko k. Wolsztyna
Pomógł: 197

Aby zrozumieć jak działa ta linijka kodu powinieneś wiedzieć jak się odczytuje stan na dowolnym pinie jakiegoś portu. Ładnie jest to wytłumaczone w tym poradniku http://mirekk36.blogspot.com/2014/05/if ... -o-co.html

W przykładzie, który podałeś, sprawa wygląda podobnie. Tylko, że tutaj wartość danego portu podana jest za pomocą wskaźnika.
Wywołując funkcję SuperDebounce jako jeden z argumentów podajemy wskaźnik na rejestr wejściowy np. PINC
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Operator "&" to, w tym przypadku, operator pobrania adresu. Czyli pobieramy adres rejestru PINC i przekazujemy go do funkcji. Przekazujemy adres czyli wskaźnik.

Wewnątrz funkcji z pod adresu, który przekazaliśmy, musimy "wyłuskać" wartość jaką posiada rejestr, na który wskazuje przekazany adres (wskaźnik). Do tego służy operator gwiazdki "*".
Jeśli więc w KPIN znajduje się adres rejestru PINC
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
to zapis
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

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

Myślę, że ten zapis już umiesz rozszyfrować. Jeśli nie to polecam poradnik, który podałem na początku postu.

A gdyby użyć tego zapisu bez gwiazdki to zamiast wartości np. rejestru PINC do wyrażenia byłby podstawiony adres tego rejestru. W tym miejscu polecam zajrzeć do rozdziału o wskaźnikach. A dokładniej doczytać co robi gwiazdka przy wskaźniku.
Zapamiętaj
nazwa wskaźnika bez gwiazdki - wskazuje adres jakiejś zmiennej
nazwa wskaźnika poprzedzona gwiazdką - wskazuje na wartość tej zmiennej.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 wrz 2014, o 20:50 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 16 lut 2014
Posty: 96
Lokalizacja: Łódź
Pomógł: 6

Jak pisał Jerzy Grębosz w "Symfonii C++":

"Kiedyś tłumaczyłem pracę na wskaźnikach mojemu kilkunastoletniemu przyjacielowi, miłośnikowi fantastyki naukowej. Kiedy doszliśmy do zapisu
a = *w;
i próbowałem mu wytłumaczyć, że gwiazdka oznacza... przerwał mi i zdecydowanie powiedział kończąc jakąkolwiek dyskusję:

>>To proste: gwiazdka oznacza, że lecimy gwiazdolotem do miejsca, na które pokazuje wskaźnik w i dopiero tamtym obiektem naprawdę się zajmujemy<<

Możesz to, drogi Czytelniku, uznać za dziecinne, ale takie mnemotechniczne skojarzenia bardzo pomagają w początkowej fazie rozumienia.

Drugim skojarzeniem mojego przyjaciela było, że jednoargumentowy operator & - (znaczek ten po angielsku zwany jest AMPERSAND) zaczyna się na literę a - tak samo jak słowo ADRES.

W sumie miał on więc takie regułki:
*w - gwiazdolotem w miejsce, na które pokazuje w
&m - a, jak adres obiektu m


Przypominam, że "gwiazdolot" występuje tylko w wyrażeniach. Zupełnym wyjątkiem jest gwiazdka w linijce definicji wskaźnika. Tam ma ona przypominać sposób, w jaki wskaźnika będzie się potem używało."

:mrgreen:



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: 4 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 9 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:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO