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



Teraz jest 12 lis 2024, o 18:57


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: 27308
Lokalizacja: Szczecin
Pomógł: 1041

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: 27308
Lokalizacja: Szczecin
Pomógł: 1041

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 2 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