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



Teraz jest 22 lut 2026, o 04:06


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 18 ] 
Autor Wiadomość
PostNapisane: 13 gru 2012, o 11:46 

Pomógł: 0

Jestem w trakcie kolejnego czytania rozdziału 10 zielonej książki, nie bardzo mogę zrozumieć, w jaki sposób przenieść eventy i callback na swój grunt ;)....
Z czym to się je, w jaki sposób tego użyć, brakuje mi takiego łopatologicznego wytłumaczenia jak w poradniku na temat eeproma.
Krok po kroku, bo na przykładzie bibliotek obsługujących UART jest to dla mnie zbyt zagmatwane.

Na początku myślałem, że to jakaś konkretna funkcja, procedura w C ;), ale z tego co wywnioskowałem, samemu się tworzy ten twór ;), a to mnie przerasta i to o całe dwie długości ;).

Może, jest już gdzieś to bardziej łopatologicznie opisane, ale coś nie mogę tego znaleźć.
Potrzebował bym to odarte z innych odnośników, bo nie wiem czy tylko mnie, ale wszystkie te dodatki IR, uart, UDP zaciemniają mi obraz eventów ;).



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 13 gru 2012, o 12:19 
Offline
Moderator
Avatar użytkownika

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

rezasurmar napisał(a):
............. bo nie wiem czy tylko mnie, ale wszystkie te dodatki IR, uart, UDP zaciemniają mi obraz eventów ;).


To jest tak .... one ROZJAŚNIAJĄ obraz eventów, ale hmmm ciężko to jak widać ot tak opisać - bo to też (sam przyznasz) nie przykłady proste typu miganie diodą LED, a nieco bardziej skomplikowane ....

ale obiecałem sobie że właśnie o tym będzie w poradniku o wskaźnikach pod tytułem:

"Wskaźniki - jazda bez trzymanki" ;)

I właśnie na przykładzie tego UART a szczególnie na początek IR - udowodnię (mam nadzieję, że nie tylko tobie), że taka jazda jak na rowerze bez trzymanki (pamiętasz chyba to wrażenie z młodości ? pewnie też tak próbowałeś?) .... będzie bardzo przyjemna .... eeeeeeh no świetna .... ale już widzę - że wyjaśnienie tego w pełni wyjdzie mi TYLKO przy tablicy a dopiero potem przy kodzie .... w głowie już mi się kłębi plan takiego poradnika od dawna. Zresztą mnóstwo osób mnie o to pyta i w mailach ...

a myślę że po takiej mojej pogadance - wszystko stanie się jasne - oczywiście jak zwykle w 100% powołam się na biblioteki z książek - więc trzeba mieć do poczytania co najmniej dwie .... myślę, że wielu będzie miło zaskoczonych ;)

_________________
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: 13 gru 2012, o 12:26 
Offline
Nowy

Dołączył(a): 29 sie 2012
Posty: 14
Pomógł: 0

Witam,

jest to mój pierwszy post, więc pozdrawiam wszystkich.

A wracając do pytania, to ja to rozumiem w ten sposób. Event jak to określił Autor to po prostu funkcja (napisana przez użytkownika), która wykona się tylko wtedy, jeżeli wystapi okreslone zdarzenie (event), np. uart odbierze jakieś dane, ir wykryje transmisję. Jeżeli to określone zdarzenie nie wytąpi to nasza funkcja jest "przezroczysta" z punktu widzenia pętli głównej. Czyli mamy dla przykładu funkcję UART_Event(), wewnątrz której sprawdzane jest czy nadleciały jakieś dane przez RS. Jeśli nie to dalsze wykonywanie tej funkcji jest przerywane. Natomiast jeśli są jakieś dane do odczytania to funkcja ta w reakcji na to zdarzenie wykona inną funkcję, tutaj nazywaną CALLBACK. Dodatkowo mamy możliwość zmieniania funkcji CALLBACK w zależności od stanu w jakim znajduje się program (np w jakim poziomie menu jesteśmy), poprzez przypisanie wskaźnikowi CALLBACK, wskaźnika do innej funkcji. Jeżeli popełniłem błą w rozumowaniu to proszę o poprawę.
Mnie to bardzo przypamina C++ i programowanie obiektowe, gdzie każdy obiekt posiada właściwości i zdarzenia.

Pozdrawiam



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 gru 2012, o 12:34 
Offline
Moderator
Avatar użytkownika

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

Witamy na forum ;)

Dokładnie - przypomina to C++ ;)

ale troszeczkę bym poprawił to tłumaczenie (generalnie poprawne) ale ...

Event to nie funkcja użytkownika, ja bym określił, że Event to funkcja biblioteczna. Owszem samemu też można tworzyć Eventy ale tak samo callbacki - tyle że wtedy jak się to słyszy to mi też się robi w głowie zamieszanie.....

ja wolę to widzieć i tłumaczyć tak:

Event to funkcja biblioteczna a robi DOKŁADNIE to co opisał kolega wyżej

natomiast

Callback - to właśnie funkcja użytkownika, który może sobie ją sam napisać i ten EVENT będzie ją pięknie wywoływał. Tylko hmmm jak ma ją wywoływać jeśli o niej nie wie ? czyli twórca biblioteki nie wie czy użytkownik sobie ją napisze czy nie i o jakiej nazwie ?

więc dlatego stwórca biblioteki daje użytkownikowi dodatkowy klucz francuski/żabkę - żeby ten mógł dokręcić sobie (zarejestrować) do tego Eventa - jakąś swoją własną funkcję (takie kolanko) że jak woda przeleci - to żeby jeszcze gdzieś w bok do pralki doleciała ;)

_________________
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: 13 gru 2012, o 12:34 

Pomógł: 0

Czekam w takim razie z niecierpliwością ;). Muszę to zobaczyć, bo ostatnio słowo pisane coś do mnie nie dociera ;).



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 13 gru 2012, o 14:15 

Pomógł: 0

Chyba się muszę zapisać na jakieś korki z C ;).



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 13 gru 2012, o 14:32 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 14 lis 2011
Posty: 534
Lokalizacja: Mierzyn
Pomógł: 9

GwynBleidD - najlepiej prosty przyklad wstaw wtedy zatrybi :)

_________________
pozdrawiam
Jachu



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 gru 2012, o 15:05 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 12 lut 2012
Posty: 243
Lokalizacja: wlkp
Pomógł: 2

Gwyn to chyba obok Mirka największy rzeźnik i wyjadacz w C na forum. :P aaa... i jeszcze Krauser ofc.
Rezasurmar też na CALLBACKI i EVENTY do Gwyna możemy wspólnie się wybrać na korki do Krk. :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 gru 2012, o 15:17 

Pomógł: 0

Chyba by trzeba tak zrobić, kupić skrzynkę browarów, laptopa i zestaw ATB pod pachę i na weekendowe korki się zapisac u Gwyna :).



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 13 gru 2012, o 16:40 

Pomógł: 0

Kurczę przed świętami nie dam rady: /



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 3 kwi 2013, o 13:50 
Offline
Użytkownik

Dołączył(a): 25 gru 2012
Posty: 128
Pomógł: 0

Witam,
Powoli dotarłem do tych event-ów, callback-ów i rzeczywiście ciężko jest załapać o co w tym chodzi, gdy tłumaczone jest to na przykładzie UART, IR. Stąd przyszła mi taka myśl; czy może ktoś z szanownych kolegów mógłby wyjaśnić tą ideę na przykładzie prostego diagramu, albo na 2 diodach i 2 przyciskach ?
Pozdrawiam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 kwi 2013, o 15:30 
Offline
Nowy

Dołączył(a): 28 lut 2013
Posty: 17
Pomógł: 0

Ja ma prośbę.. a może by tak zrobić prosty przykład na zasadzie ze eventem będzie przycisk (wciśnięcie) lub dwa, rejestrować będziemy callback-a który będzie wykonywał zapalanie i gaszenie diody (naprzemienne). Chodzi o proste pokazanie definiowania funkcji zwrotnej, sposobu jej rejestracji i tworzenia event-u "przyciskowego". To na pewno bardzo pomoże. Ja też się gubię w tych rzeczach (dopiero od miesiąca uczę się, ale stopniowo bo nienawidzę robić czegoś czego nie rozumiem...). Mi się wydaje że to proste, ale na 100% trochę zakręcone poprzez nazewnictwo no i kombinacje ze wskaźnikami.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 kwi 2013, o 15:56 
Offline
Moderator
Avatar użytkownika

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

No tak, zakręcone przez nazewnictwo i kombinacje ze wskaźnikami powiadacie ? ... no to sorki ale bez wskaźników i bez przejrzystych nazw - mi trudno będzie pokazać callbacka. W ogóle się obawiam że bez wskaźników to w ogóle nie możliwe.

Ja myślę że problem macie gdzieś indziej - nie możecie załapać istoty działania callbacka a jeszcze do tego wplątujecie EVENT.

Tymczasem w pierwszej książce Bluebook pokazuję w sumie prostszy przykład bez EVENT'u - ot samą funkcję do której można callbacka wstawić - SuperDebounce() .... i nie ważne nawet czy do końca ktoś na początku od razu zaskoczy jak tam ona w środku działa - bo to nie ma nic wspólnego z callbackiem.

CALLBACK to możliwość przekazania do jakiejś funkcji wskaźnika do INNEJ funkcji. Jak ktoś tego nie rozumie to ręka do góry i pytania bo żadne przykłady tu nie pomogą na razie. Tu muszą być wskaźniki i nieco bardziej zaawansowane przykłady - tego się nie zrobi na mogającej diodzie LED i _delay_ms() :( .... ale żeby to zrozumieć i podejść to najpierw trzeba sporo poćwiczyć i nabrać praktyki ze wskaźnikami - żeby nie było później tekstu - że "tu się odbywają jakieś dziwne kombinacje na wskaźnikach" ...

więc jeszcze raz - na razie opis ogólny i jak mówię jak ktoś nie zrozumie to proszę dopytywać

załóżmy że dostałeś ode mnie zadanie aby napisać mi jakąś funkcję do obsługi KLAWISZA. Ty masz zadbać o to aby wyeliminować drgania styków - mnie to nie interesuje absolutnie i w ogóle nie chcę w ten kod wnikać. Ale stawiam JEDEN warunek, funkcja którą mi napiszesz - ma mieć taką możliwość - żebym to ja w swoim kodzie gdy dostanę mailem od ciebie kod twojej funkcji, mógł wywołać SWOJĄ WŁASNĄ dowolną funkcję ze środka tej twojej - gdy już uznasz - że przyszedł czas na wywołanie akcji naciśnięcia .... rozumiesz to zadanie ?

i ja nie chcę się grzebać w kodzie twojej funkcji pod żadnym pozorem, nie chcę słyszeć od ciebie instrukcji np że wystarczy iż w linii tej i tej wstawisz wywołanie swojej funkcji. NIE, ja tak nie chcę .... Dla ciebie zadanie jest takie - żebyś tak napisał swoją funkcję do obsługi klawisza (nie ważne dla mnie jak - ma tylko działać) .... żeby mogła ona przyjąć jako argument czy jeden z argumentów jakiś WSKAŹNIK - wskaźnik do mojej funkcji.

czyli dostaję np od ciebie CZARNĄ SKRZYNKĘ o nazwie:

Kod:
MySuperKLAWISZ( )


i ja chcę mieć możliwość aby wywołać ją w programie np tak:

Kod:
MySuperKLAWISZ( pin, port, moja_funkcja_obsługi );


czyli TY - tak na prawdę musisz przyjąć wskaźnik do moja_funkcja_obsługi() .... i gdy będzie akcja - to go po prostu wywołać jak dowolną funkcję - przy czym nie interesuje ciebie co w niej będzie. TO JEST CALLBACK ! Wywołasz bowiem zwrotnie z ciała twojej funkcji jakąś inną - nawet taką, której nie znasz na etapie pisania swojej własnej funkcji do obsługi klawisza. Rozumiesz ? To twój klient czyli ja mirekk36 sam sobie chcę podkładać swoje własne funkcje do super napisanej przez ciebie biblioteki obsługi klawisza.

Pomijam tu specjalnie rejestrację i eventy żeby nie mieszać w głowie. Więc jeśli coś z tego nie jest jasne to PYTAJ i postaraj się zrozumieć tę IDEĘ ok ?

a potem przejdziemy ew do prostych kodów przykładowych.

_________________
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: 4 kwi 2013, o 16:22 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 sty 2013
Posty: 328
Lokalizacja: Rzgów k. Łodzi
Pomógł: 11

Hmm, a muszą być że tak powiem, zgodne zmienne w funkcji ? Czyli np. że do jednej funkcji można przekazywać 3 parametry, do innej 2. Czy w takim wypadku też będzie działać ?

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 kwi 2013, o 16:51 
Offline
Nowy

Dołączył(a): 28 lut 2013
Posty: 17
Pomógł: 0

Ja wskaźniki rozumie i dla mnie one są naturalnym "zwierzem" bo w ASM jak piszę program to tam praktycznie nie możesz działać bez adresowania pośredniego. W C łatwiej jest "zarządzać" wskaźnikami i doszło parę fajnych rzeczy typu tablice wielowymiarowe które przecież tez można obsługiwać wskaźnikowo a nie przez index czy np. właśnie uzyskiwanie adresu funkcji i wołanie jej przez inną poprzez zarejestrowanie tego adresu w wywołującej funkcji. Generalnie to chodzi mi o to żeby ten cały ten bałagan zrobił ktoś z żyłką dydaktyczna... a kto ja posiada ??? no.. MK.:). A więc prosta funkcja, event, callback i będzie wszystko jasne. Faktycznie, zrozumienie superDebounce oznacza że już rozumiemy cały ten proces. Do tego jeszcze wąż i w sumie jasne. Jedno jest pewne!, bez zrozumienia wskaźników ani rusz bo to się na tym opiera.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 kwi 2013, o 17:53 
Offline
Moderator
Avatar użytkownika

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

PawelGaj --> ja podałem ot taki byle przykład - tu nie chodzi o to żeby były jakieś konkretne argumenty - to czysto virtualny przykład

Anty ma też oczywiście rację że w C nie ma przeciążania ;)

ale ok postaram się napisać jakiś przykład ;)

_________________
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: 4 kwi 2013, o 17:59 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 sty 2013
Posty: 328
Lokalizacja: Rzgów k. Łodzi
Pomógł: 11

Ogólnie to rozumiem cały zamysł callbacków, nawet migałem ledem za pomocą rejestracji własnego callbacka :D Tylko że potrzeba mi jakiegoś konkretnego przykładu, wytłumaczenia ;)

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 kwi 2013, o 21:02 
Offline
Moderator
Avatar użytkownika

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

no to zapraszam:

topic2783.html

_________________
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: 18 ] 

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