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



Teraz jest 30 mar 2026, o 22:59


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 4 ] 
Autor Wiadomość
PostNapisane: 24 wrz 2015, o 18:42 
Offline
Użytkownik

Dołączył(a): 15 sie 2014
Posty: 87
Pomógł: 0

Dzień Dobry

Rozpocząłem przygodę z callbackami, wydaje mi się że w miarę załapałem, ale wolałbym się upewnić czy rzeczywiście tak jest. Obejrzałem poradnik o enkoderze a także przeczytałem poradnik na blogu i jestem w trakcie analizowania przykładów zamieszczonych na blogu Pana Mirka związanych z drganiami styków.Zmodyfikowałem nieco jeden przykład wtrącając do niego obsługę LCD.Załączę kod i zadam kilka pytań:

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


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

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


Działa to tak że gdy wciskam klawisz nr.1 to wyświetla mi się napis "Michal" a gdy wciskam klawisz nr.2 to czyszczę wyświetlacz. Działa to wszystko, ale zadam kilka pytań odnośnie callbacków.

1. Czy callback najprościej rzecz ujmując to możliwość przekazania jako argumentu funkcji, wskaźnika na jakąś inną funkcję? Czyli w tym przypadku callbackiem byłaby funkcja Ciag_znakow jak i LCD_czyszczenie_wyswietlacza?

2.Czy rejestracji callbacka zawsze dokonuję w funkcji main i czy dokonuje się tego w ten sposób np. :
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


3. W tym przypadku moj_klawisz i moj_klawisz2 to funkcje rejestrujące? O takie funkcje musi już zadbać twórca biblioteki?

4. Dlaczego tutaj jest ten if. I kiedy ten warunek nie będzie spełniony?
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Domyślam się chodzi wskaźnik i jego wartość = NULL lub różną od NULL ale tu mam wątpliwości.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 wrz 2015, o 20:22 
Offline
Moderator
Avatar użytkownika

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

moscow18-1990 napisał(a):
Domyślam się chodzi wskaźnik i jego wartość = NULL

DOKŁADNIE o to chodzi - pomyśl co się stanie jak nie podepniesz callbacka a niechcący odpalisz funkcję - to co będzie ? Restart procka - a ten IF() cię ratuje od tego - ZAWSZE się tak robi przy odpalaniu callbacka

------------------------ [ Dodano po: 1 minucie ]

To nie są żadne rejestracje - od wprost przekazujesz wskaźnik funkcji do funkcji i ciężko to nazwać rejestracją wskaźnika, co nie oznacza że tak nie może działać


Autor postu otrzymał pochwałę

_________________
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: 30 wrz 2015, o 14:36 
Offline
Użytkownik

Dołączył(a): 15 sie 2014
Posty: 87
Pomógł: 0

Ok. Nieco zmodyfikowałem program. Myślę że teraz dokonałem rejestracji. Przedstawię program i zadam kilka ważnych dla mnie pytań:

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


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


klawisz.h
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 rozumiem cały ten mechanizm. Mimo wszystko muszę dopytać o parę szczegółów, ponieważ pomoże mi to w ostatecznym zrozumieniu tego wszystkiego. Będzie trochę tych pytań... mam nadzieję że ktoś mimo to odpowie mi... to dość ważna tematyka i chciałbym to pojąć...ok więc:

1.Co to jest zdarzenie? Jest to po prostu funkcja biblioteczna? A dokładniej taka funkcja w której używam callbacków? I czy w tym przypadku moja funkcja ZDARZENIE_KLAWISZ jest takim zdarzeniem?

2.Callbackiem jest stworzona przez autora biblioteki zmienna która jest wskaźnikiem na funkcję? Tu w zasadzie jest sedno sprawy. Rozumiem jak działa ten mechanizm, ale usłyszałem(a bardziej przeczytałem) już tyle tych definicji callbacka że już sam nie wiem jak to do końca zdefiniować...Mógłby jakiś fachowiec zdefiniować to dokładnie.

3.Tutaj ważna rzecz odnośnie wskaźnika i jego wartości równej NULL. Dwa pytania:

- Jeżeli używam funkcji rejestracyjnej w main tzn. po prostu wywołuję register_key_callback to wtedy wartość wskaźnika staje się różna do NULL i warunek:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


jest spełniony? Generalnie wartość wskaźnika i spełnienie tego typu warunku zależy od tego czy ja jako użytkownik biblioteki dokonam rejestracji jakiejś funkcji w main za pomocą funkcji rejestrującej?

Myślę że na razie te trzy pytanka. Mam nadzieję że nie zamieszałem z tymi pytaniami....



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 wrz 2015, o 14:56 
Offline
Moderator
Avatar użytkownika

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

moscow18-1990 napisał(a):
jest spełniony? Generalnie wartość wskaźnika i spełnienie tego typu warunku zależy od tego czy ja jako użytkownik biblioteki dokonam rejestracji jakiejś funkcji w main za pomocą funkcji rejestrującej?

DOKŁADNIE tak

------------------------ [ Dodano po: 2 minutach ]

Cytuj:
1.Co to jest zdarzenie? Jest to po prostu funkcja biblioteczna? A dokładniej taka funkcja w której używam callbacków? I czy w tym przypadku moja funkcja ZDARZENIE_KLAWISZ jest takim zdarzeniem?

Czym innym jest ZDARZENIE przy programowaniu obiektowym na PC ... a czym innym jest ZDARZENIE w takim procku. Tu można by powiedzieć, że jest to PSEUDO ZDARZENIE - a innymi słowy mówiąc .... coś co pozwala nam w małym procku, korzystać z systemu zdarzeń na podobieństwo tego co masz w PC (przy wielkim wielordzeniowym i wielowątkowym procku) Wcale nie musisz używać callbacków w zdarzeniu ;) tego typu. Zdarzenie oznacza, że w toku działania twojego całego programu może wystąpić asynchronicznie jakaś operacja. Asynchronicznie w stosunku do pozostałych części programu.

Ja staram się pokazywać pewne metody - i jeśli ktoś zrozumie jak to działa to super. Definicje zostawiam specjalistom, którzy lubią tworzyć definicje a nawet definicje definicji ;)

_________________
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  
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 0 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