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 18 kwi 2025, o 04:07


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 16 ] 
    Autor Wiadomość
    PostNapisane: 26 lut 2017, o 22:40 
    Offline
    Użytkownik

    Dołączył(a): 06 lip 2014
    Posty: 131
    Pomógł: 0

    Cześć mam pytanie, nie rozumiem po co przekazuje się funkcję jako argument innej funkcji. np. funkcja z obsługi lcd z BB

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


    tutaj do funkcji lcd_str nie przekazujemy jako argument funkcji lcd_write_data po prostu ją sobie wywołujemy

    a w funkcji SuperDebounce jako argument przekazujemy między innymi funkcję void (*push_proc)(void) i później wewnątrz funkcjii SuperDebounce funkcja push_proc jest wywołana

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




    więc dlaczego w pierwszym przypadku przy lcd funkcji nie przekazujemy jako argument a w SuperDebounce przekazujemy? jaka jest różnica skoro i w jednym i drugim przypadku wewnątrz jednej funkcji możemy korzystać z innej.

    Analizuję funkcję Superbebounce a tę funkcję z lcd wybrałem jako przykładową mogła by być inna.

    Dzięki.



    Ostatnio edytowano 28 lut 2017, o 09:48 przez Mnich16, łącznie edytowano 1 raz

    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 26 lut 2017, o 22:50 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 01 lis 2015
    Posty: 1448
    Lokalizacja: okolice Warszawa
    Pomógł: 149

    hejka,
    Jak się dziś nie mylę - a dziś się mogę mylić. :) bo mi się już wszystko miesza. :lol:
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    ------------------------ [ Dodano po: 14 minutach ]

    a... jeszcze doczytałem dalej i myślę że w superD... wykorzystujemy inne dowolne - później dopisane funkcje, a tu konkretną jedną. :)



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 27 lut 2017, o 10:22 
    Offline
    Użytkownik

    Dołączył(a): 24 sty 2012
    Posty: 1469
    Pomógł: 56

    A czy tu przypadkiem nie chodzi o callback'i? ;-)

    _________________
    Jestem początkujący i moje porady mogą być błędne



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 27 lut 2017, o 10:33 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 01 lis 2015
    Posty: 1448
    Lokalizacja: okolice Warszawa
    Pomógł: 149

    Tu właśnie jest ta sytuacja, gdzie w przykładzie z lcd pracujemy z funkcją już określoną (powołaną),
    A w SuperDebounce nad funkcją która jeszcze nie istnieje. np. :)

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

    Utworzenie funkcji pozostawia klonowi. :)



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 27 lut 2017, o 22:35 
    Offline
    Moderator
    Avatar użytkownika

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

    MirkoT napisał(a):
    A czy tu przypadkiem nie chodzi o callback'i?

    Jakież CALLBACKI ? ;)

    toż to NAJZWYKLEJSZE wysyłanie stringa ... TAKIE SAMO zarówno dla UART, LCD, i wielu innych funkcji

    Daro69 wyżej ładnie to opisał w komentarzu ... a mówiłem też o tym w sobotę na Warsztatach w Wa-wie ;)

    _________________
    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: 28 lut 2017, o 09:51 
    Offline
    Użytkownik

    Dołączył(a): 06 lip 2014
    Posty: 131
    Pomógł: 0

    Panowie nie chodzi mi o to jak działa ta funkcja do lcd, napisałem w pierwszym poście że to tylko funkcja przykładowa pierwsza z brzegu, chodzi mi o to dlaczego w tej funkcji do lcd nie przekazujemy jako argument funkcji lcd_write_data a z tej funkcji korzystać możemy wewnątrz funkcji lcd_str, a w funkcji Superdebounce przekazujemy jako argument funkcje push_proc. Czyli dlaczego w jednym przypadku funkcja została przekazana do innej jako argument w w drugim przypadku w SuperDebounce juz nie.

    Pozdrawiam.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 28 lut 2017, o 15:03 
    Offline
    Użytkownik

    Dołączył(a): 24 sty 2012
    Posty: 1469
    Pomógł: 56

    To ja pozwolę sobie jeszcze raz zapytać ;-)
    Czy tu przypadkiem nie chodzi o callbacki? ;-)
    Tak nie w wysyłaniu stringów do LCD tylko w superdebounce naturalnie...

    _________________
    Jestem początkujący i moje porady mogą być błędne



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 28 lut 2017, o 15:55 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 01 lis 2015
    Posty: 1448
    Lokalizacja: okolice Warszawa
    Pomógł: 149

    :) kręcimy się z odpowiedziami w kółko. :lol:
    W funkcji lcd'ka wklejamy gotową funkcję którą już mamy.
    W funkcji superdebounce funkcja pushproc jeszcze nie istnieje,
    To tylko nazwa-miejsce na przyszłą funkcję, do której wskaźnik umieścimy w miejscu pushproc.
    np. SuperFebounce( fun );

    Tak mi się to widzi. :)

    Albo niech ktoś mnie poprawi. :?



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 28 lut 2017, o 16:42 
    Offline
    Moderator
    Avatar użytkownika

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

    Daro69 napisał(a):
    :) kręcimy się z odpowiedziami w kółko. :lol:
    W funkcji lcd'ka wklejamy gotową funkcję którą już mamy.
    W funkcji superdebounce funkcja pushproc jeszcze nie istnieje,
    To tylko nazwa-miejsce na przyszłą funkcję, do której wskaźnik umieścimy w miejscu pushproc.
    np. SuperFebounce( fun );

    Tak mi się to widzi. :)

    Albo niech ktoś mnie poprawi. :?

    no i taki mechanizm to już callback ;)

    _________________
    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: 28 lut 2017, o 18:46 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 15 wrz 2013
    Posty: 74
    Lokalizacja: Sierakowice/Gdańsk
    Pomógł: 9

    Może trochę pomoże to co napiszę. A piszę to co następuje:
    1. Mamy np. jakąś bardzo dużą funkcję zajmującą dużą ilość pamięci programu.
    2. Gdzieś w tej dużej funkcji wywoływana jest jakaś inna mała funkcja (nie jest ona przekazywana jako argument).
    3. Teraz w naszym głównym programie chcemy 3 razy wywołać dużą funkcję i chcielibyśmy żeby z każdym wywołaniem mała funkcja wewnątrz była inna.
    4. Żeby rozwiązać ten problem możemy napisać 3 wersje naszej dużej funkcji, których ciało różniłoby się tylko tą jedną funkcją wywoływaną wewnątrz (takie rozwiązanie zjadłoby dużą ilość pamięci programu i byłoby niepotrzebnym powtarzaniem tego samego kodu).
    5. Inaczej możemy rozwiązać to poprzez przekazanie do naszej dużej funkcji argumentu, którym będzie nasza mała funkcja. Podczas każdego wywołania w programie dużej funkcji, możemy jej "powiedzieć" jaką małą funkcję ma wykorzystać do realizacji swojego zadania. ;)



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 28 lut 2017, o 19:45 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 01 lis 2015
    Posty: 1448
    Lokalizacja: okolice Warszawa
    Pomógł: 149

    o... wojtekr51 :)
    A ja się zastanawiałem jak to ująć.
    W lcd'ku jest ciągle ta sama funkcja niskiego rzędu - więc jest wpisana na sztywno do funkcji wyższego rzędu.
    A w SuperDebounce możemy tą funkcją żonglować podmieniając ją co chwila np. na inną. ;)
    Bo tu wstawiamy wskaźnik na adres naszej noewj lub kolejnej funkcji.
    Oczy wiście :) , możemy suię uprzeć i wstawić także w lcd"ku poprzez wskaźnik, ale to wydłuży czas dostępu o
    1, przejście pod adres
    2, odczytanie czy funkcja istnieje,
    3, jeżeli tak wykonanie jej. :)

    czyli tak jak MirkoT oraz Mirekk36 napisali - callback. :)

    wiem, powtarzam się po Was innymi słowami. :)

    mam nadzieję że nie mieszam jeszcze bardziej. :P jeszcze trochę i mi się pomiesza. :lol:



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 28 lut 2017, o 19:54 
    Offline
    Użytkownik

    Dołączył(a): 14 sie 2016
    Posty: 905
    Pomógł: 39

    Daro69 napisał(a):
    mam nadzieję że nie mieszam jeszcze bardziej. :P jeszcze trochę i mi się pomiesza. :lol:

    Raczej nie mieszasz, jak tak dalej pójdzie to dojdziecie do funkcji rekurencyjnej, ale to już wyższa szkoła jazdy ;)

    _________________
    Moje porady są błędne,nie czytać,zbanować od razu.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 28 lut 2017, o 20:21 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 01 lis 2015
    Posty: 1448
    Lokalizacja: okolice Warszawa
    Pomógł: 149

    hie hie... czyli funkcja która wywołuje samą siebie. :) hmm... do pewnego momentu .
    jeszcze daleko przede mną ten temat ;)



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 28 lut 2017, o 20:29 
    Offline
    Użytkownik

    Dołączył(a): 14 sie 2016
    Posty: 905
    Pomógł: 39

    Czasami się przydają takie funkcje, ale trzeba strasznie uważać żeby nie zrobić babola, bo zamiast rekurencji zrobisz funkcje nieskończoną.
    Raz tak zatkałem serwer w pracy - program który zajmował max 5MB w pamięci, rozbujał się do prawie 30 giga(16GB ramu+swap) :P

    _________________
    Moje porady są błędne,nie czytać,zbanować od razu.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 28 lut 2017, o 20:48 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 01 lis 2015
    Posty: 1448
    Lokalizacja: okolice Warszawa
    Pomógł: 149

    @Harry, wszystkie te te tematy są arcy_ciekawe. :D
    Tylko że "troszkę" offtopujemy'" wątek kolegi "Mnich16". o kallbackach.
    Miejmy nadzieję że nam nie ma za złe.
    hmm.. niechcący podtrzymujemy wątek w świeżych postach. :D więc może wybaczy i nie zgłosi np. któremuś z zielonych, jako odpowiedzi nie na temat. ;)
    bo bananów nie lubię. :lol:



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 28 lut 2017, o 20:54 
    Offline
    Użytkownik

    Dołączył(a): 14 sie 2016
    Posty: 905
    Pomógł: 39

    Zielony może być, byle nie ten z przerośniętymi ząbkami, hihi
    To tylko lekki offtop, w końcu to też funkcja, można(na upartego) podciągnąć pod callback ;)

    _________________
    Moje porady są błędne,nie czytać,zbanować od razu.



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

    Strefa czasowa: UTC + 1


    Kto przegląda forum

    Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 6 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