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



Teraz jest 27 lis 2024, o 00:48


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 4 ] 
Autor Wiadomość
PostNapisane: 24 maja 2015, o 13:31 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 31 mar 2015
Posty: 144
Pomógł: 2

Trochę dostaję pomieszania, dlatego piszę jakby dla siebie, a może i nie tylko.

Przekazuję tak jak zrozumiałem temat z pogadanek szanownego Mirka.

Widzę w takim porządku:

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


2. Chcę na nią pokazywać wskaźnikiem rtc_callback.
Definiujemy więc ten wskaźnik o takim samym typie zwracanym i argumentach jak nasza funkcja:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


3. Definiujemy funkcję rejestrującą, która będzie inicjowała (ustawiała) wskaźnik przekazaną w argumencie funkcją.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Czyli do naszego wskaźnika rtc_callback (już bez * ) wpisywać będziemy nazwę funkcji callbackowej.

Nazwa funkcji jest jednocześnie adresem tejże funkcji. Czyli funkcja rejestrująca ustawia do wskaźnika adres przekazanej funkcji.

4. W programie przed main wykorzystujemy funkcję rejestrującą następująco:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

czyli
inicjujemy wskaźnik rtc_callback przesłaną funkcją pokazuj_date_czas:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


5. I na koniec, w pętli main wywołujemy funkcję RTC_EVENT().
W niej dopiero następuje wywołanie funkcji pokazywanej wskaźnikiem.
Po sprawdzeniu oczywiście, czy wskaźnik jest ustawiony:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


To tak samo, jakbyśmy wywoływali funkcję tak:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

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


Koniec wywodu.
Musiałem się rozpisać, aby sobie trochę w głowie to poukładać.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 maja 2015, o 15:34 
Offline
Moderator
Avatar użytkownika

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

lutekT napisał(a):
To tak samo, jakbyśmy wywoływali funkcję tak:

a co to ma wspólnego z:

lutekT napisał(a):
To tak samo, jakbyśmy wywoływali funkcję tak:


????

Wywołanie callbacka to nie to samo .... bo skąd w funkcji RTC_EVENT() możesz wiedzieć jaką ktoś nada sobie nazwę tejże funkcji callbackowej ??

Zrozum - ja podałem przykład, że tworzę sobie pokazuj_date_czas() , ale ty możesz sobie zrobić funkcję o całkiem innej nazwie np show_datetime() i co ? będziesz przerabiał funkcję biblioteczną RTC_EVENT() żeby zmienić nazwę w jej brzuchu ? To byłoby bez sensu ... dlatego w swoim programie main.c piszesz własną dowolną funkcję i ją REJESTRUJESZ za pomocą funkcji rejstrującej - inaczej mówiąc, dajesz do biblioteki informację, że ona w swojej funkcji RTC_EVENT() ma się posłużyć wskaźnikiem do tej twojej funkcji obojętnie jaką nazwę będzie miała.

Wiesz co ? KONIECZNIE obejrzyj sobie poradnik ten konkretnie:
https://www.youtube.com/watch?v=V83w0pu7MVo

o tym gdzie mówię o "rozdwojeniu jaźni" ... że czasem trzeba myśleć nad projektem nie tak jakbyś sam pisał i sam dla siebie ale trzeba umieć podzielić zadania dla kilku np dwóch zespołów programistów! Tak tak - takie podejście się przydaje nawet gdy SAMEMU dla siebie się programuje, bo daje to dużo większe możliwości

_________________
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: 24 maja 2015, o 19:53 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 31 mar 2015
Posty: 144
Pomógł: 2

Źle się wyraziłem
Cytuj:
To tak samo, jakbyśmy wywoływali funkcję tak:
Składnia: [ Pobierz ] [ Ukryj ]
język c
pokazuj_date_czas(&datetime)
GeSHi

Miałem na myśli, że tak to widzi kompilator i wywołuje przesłaną przez nas funkcję taką to właśnie linijką.

Po to jest rejestracja funkcji, raz tej, a raz innej.

------------------------ [ Dodano po: 3 minutach ]

Swoją drogą dzięki za przesłany link.

Z przyjemnością powtórzę sobie info o tych wskaźnikach i innych podstawach.



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

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

nie ma za co - a w razie czego śmiało pytaj - zawsze chętnie pomogę

_________________
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:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO