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

KURS HOME ASSISTANT

Chcesz zautomatyzować swój dom bez skomplikowanego kodowania?
Zastanawiasz się nad wyborem sprzętu, oprogramowania i aplikacji?
Od czego zacząć przygodę z HA w 2025? Co będzie najlepsze na start?

Nasz kurs Home Assistant nauczy Cię krok po kroku, jak łatwo zautomatyzować swój dom i oszczędzić na rachunkach za prąd i ogrzewanie. Bez chmur, bez zbędnych abonamentów. Twoja przygoda z Home Assistant zaczyna się tutaj!

↓↓↓

    Szanujemy Twoją prywatność. Możesz wypisać się w dowolnym momencie.




    Teraz jest 23 maja 2025, o 09:18


    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: 27404
    Lokalizacja: Szczecin
    Pomógł: 1043

    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: 27404
    Lokalizacja: Szczecin
    Pomógł: 1043

    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