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



Teraz jest 28 mar 2024, o 17:31


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 65 ]  Przejdź na stronę 1, 2, 3  Następna strona
Autor Wiadomość
PostNapisane: 4 kwi 2013, o 21:01 
Offline
Moderator
Avatar użytkownika

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

Obrazek

Tylko uprzedzam - nie będzie to krótki poradnik tekstowy ani nie będę w nim zajmował się tłumaczeniem podziału na pliki. Przy okazji podpowiem że przykłady są MEGA uproszczone bo chodzi o przekazanie istoty z tematu, a nie np dyskusje o tym czy będą tu działać drgania styków czy nie. Mówię o tym na wszelki wypadek gdyby znowu pojawił się na naszym forum przedstawiciel XXX pod przebraniem w masce zorro chcący znowu udowadniać że takie funkcje do obsługi drgań styków nie działają i tak dalej ble ble ble.

Ok do rzeczy, poniżej prosty trywialny przykład - stworzyłem "WIELKĄ" bibliotekę do obsługi klawisza ;)

Obrazek

proszę poniżej trzy pliki:

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


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


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


i teraz co my tu mamy ? ;) .... Pomyśl sobie .... w main.c pięknie zdefiniowałem sobie LED1 a nawet makro LED1_TOG, i mogę go używać sobie nawet w całym programie gdybym gdzieś te definicje makr poprzerzucał - jednak specjalnie nie przerzucałem i w LIB'sie KEYS w pliku keys.c w funkcji moj_klawisz() wręcz migam diodą LED specjalnie za pomocą wprost kodu

Kod:
PORTD ^= (1<<PD7);


obrzydlistwo - zamiast LED1_TOG; No ale teraz sobie wyobraź, że to TWÓJ kod tzn mówię o tej "bibliotece" (załóżmy że jest mega rozbudowana i wypasiona na maxa ;) ) .... No i miałeś ją dla mnie napisać i mi przesłać. Tyle że ja prosiłem cię abyś tak ją napisał - żebym ja mógł sobie zainkludować tego LIB'sa tylko tak:

Kod:
#include "KEY_LIB/keys.h"


i chciałbym móc sam decydować do będzie się działo gdy wywołam twoją super funkcję mój_klawisz(), ale kicha :( .... ty ją napisałeś jak napisałeś - jak widać wyżej. I dałeś mi instrukcję.

Cytuj:
"Panie Kardaś - jak chcesz pan mieć swoją reakcję na klawisz to wejdź w plik keys.c , wyedytuj go - i w linijce gdzie jest miganie diodą LED wywołaj własną funkcję - jaką ci się tylko spodoba"


O Matko! .... tfuuu przez lewe ramię - nie interesuje mnie żadne grzebanie się w twoim kodzie ! :( powiedział zleceniodawca Kardaś .... Zadanie źle wykonane i nie zapłacę grosza za taki koci kod!

;) Sam widzisz - że troszkę żartem ale zleceniodawca miał prawo się wkurzyć bo wprawdzie ten LIB's to kilka linijek i łatwo się połapać co, gdzie i jak .... Ale przecież zwykle LIB'y są TŁUSTE i jest w nich kupa.... kodu - i weź się człowieku grzeb w tym kodzie - brrrrrr - nigdy - koniec koszmaru ! Pomyślał kiedyś STWÓRCA języka C bo właśnie przyśnił mu się sposób zwany CALLBACKIEM ;)

A zatem - projekt do POPRAWKI z sugestią - że MASZ to zrobić od nowa na takiej zasadzie - żeby skorzystać ze wskaźników do funkcji, które można przecież przekazać jako argument do innej funkcji. CZYLI ...... czyli masz to napisać tak że jeśli ja Kardaś otrzymam LIB'sa to nie będę zmuszony nawet JEDEN raz otworzyć pliku keys.c żeby patrzeć na kod tam zawarty. Ja NIE CHCĘ go widzieć na oczy, ja chcę tylko mieć możliwość przekazania wskaźnika do swojej funkcji którą sam napiszę .... żeby została wywołana przez twoją funkcję obsługi klawisza.

no to jedziemy - tzn jedziesz i piszesz nowszą wersję LIB'sa oto nowe pliki libsa

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


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


widzisz co się stało? specjalnie zaznaczyłem ZMIANY ;) ... okazuje się, że teraz przekazałeś jako argument wskaźnik do funkcji. UWAGA!!!!!!!!! wskaźnik do NIEOKREŚLONEJ funkcji, nawet nie wiesz jakiej ;) .... ale zadziała to tak , że Kardaś wywoła twoją funkcję mój_klawisz() podając wskaźnik do swojej funkcji akcji, a TY ją wywołasz zwrotnie - zrobisz CALLBACK !!!

tak to jest CALLBACK - czyli zwrotne wywołanie funkcji z innej funkcji. Przy czym autor tej nadrzędnej funkcji NAWET wcale nie musi wiedzieć - co ta zwrotnie wywoływana będzie w przyszłości realizować. Może nawet zostanie wykorzystana do niecnych celów ??? ;) ... trudno tak klient chciał to niech ma ;) ... więc wysyłasz teraz takiego LIBS'a do Kardasia a on pisze swój własny plik main.c i powołuje sobie do życia swoją funkcję o nazwie moje_miganie_led(), spójrz:

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


i co ? SAM widzisz, że teraz Kardaś nie musiał nawet zaglądać do pliku keys.c !!! ;) a pomimo to wywołał swoją własną funkcję - napisaną przez siebie - o której istnieniu o jej ciele ty nawet nie śniłeś ;) a jednak się udało. Czyli Kardaś skorzystał z mechanizmu CALLBACKA - którego ty mu podałeś do użytku.

No dobra czy to już koniec poradnika ?

Nie to pierwsza część - ale chciałbym teraz ew usłyszeć pytania do tego ? jeśli ktoś ma? żeby ktoś powiedział czego nie rozumie ? itd - bo bez zrozumienia TEGO - nawet nie ma co myśleć o dalszych rzeczach.

Tylko liczę na to, że nie będzie pytań np:

"a co to jest za dziwny zapis void (*fun_wsk)(void) ?" ;) ... mam nadzieję, że tu każdy już chociaż troszkę z Bluebookiem przygotuje się odpowiednio do tego poradnika - żeby nie zaczynać tłumaczenia od początku świata ok?

_________________
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 21:11 
Offline
Użytkownik
Avatar użytkownika

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

Bardzo fajnie opisane, z przykładami, czyli tak jak powinno być. Dzięki wielkie ;)

_________________
sig off ;(



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

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

Anty - dobrze kumasz - ale jest jeszcze jeden jakby ważny powód takiej rejestracji zamiast tej pokazanej tu metody - pozwól jednak że to postaram się przekazać wszystkim w kolejnej części poradnika - niech się tylko jeszcze kilka osób wypowie - że zaskoczyło to co tu jest ;) .... to potem hurtowo załatwimy pozostałe tematy ;)

_________________
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 21:54 
Offline
Użytkownik

Dołączył(a): 17 sty 2013
Posty: 327
Lokalizacja: Białystok
Pomógł: 14

Wspaniale! Wreszcie zaczynam rozumieć po co to i na co;) Wielkie dzięki i czekam z niecierpliwością na następne teksty!



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

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

Antystatyczny napisał(a):
... no ale to tylko takie moje głosne gdybanie...


Anty ty stanowczo za dużo wiesz ;) przekażę to kpt. Klosowi żeby cię zlikwidował ;) .... no i zaraz wszystko wygdybasz - nie będzie o czym drugiej części robić hahahaha ;)

_________________
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: 5 kwi 2013, o 07:08 

Pomógł: 0

Świetny poradnik, zaraz się zabieram za przetrawianie :).......

Anty jak ty na to wszystko znajdujesz czas, że tak szybko tego słonia pożerasz ;).



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 5 kwi 2013, o 07:45 
Offline
Użytkownik

Dołączył(a): 11 lut 2013
Posty: 140
Lokalizacja: Kraków
Pomógł: 10

a co to jest za dziwny zapis void
(*fun_wsk)(void) ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 kwi 2013, o 07:56 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 29 lis 2011
Posty: 582
Lokalizacja: okolice Wrocławia :)
Pomógł: 24

matisek1233 napisał(a):
a co to jest za dziwny zapis void
(*fun_wsk)(void) ?


mirekk36 napisał(a):
Tylko liczę na to, że nie będzie pytań np:

"a co to jest za dziwny zapis void (*fun_wsk)(void) ?" ... mam nadzieję, że tu każdy już chociaż troszkę z Bluebookiem przygotuje się odpowiednio do tego poradnika - żeby nie zaczynać tłumaczenia od początku świata ok?


;)

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 kwi 2013, o 08:02 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 31 sie 2012
Posty: 52
Lokalizacja: Toruń
Pomógł: 1

ten dziwny zapis "(*fun_wsk)(void)" a w zasadzie "void (*fun_wsk)(void)" to wskaźnik na funkcję, którą Ty dopiero w pliku main.c stworzysz do własnych potrzeb. Czyli w miejsce wskaźnika "void (*fun_wsk)(void) " jest "wstawiana" Twoja własna funkcja, która w tym przypadku jest bez parametrów i nic nie zwraca.

Piotr



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 kwi 2013, o 08:24 
Offline
Moderator
Avatar użytkownika

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

Dziękuję p_zag za pomoc ;) ---> jeśli możesz to postaraj się w tym zakresie jeszcze pomóc koledze matisek1233 gdyby miał kolejne pytania - bo ja na razie nie mogę ok ? Będę wdzięczny ...

A matisek1233 mam nadzieję, że mnie zrozumie w tym względzie i mam nadzieję, że przed oczami ma BlueBooka - i go usilnie wertuje ??? bo tam też to jest opisane.

_________________
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: 5 kwi 2013, o 08:29 
Offline
Użytkownik

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

Widzę, że mój pierwszy post w tym temacie był takim callbackiem ze strony Mirka ;) Oto chodziło :) Super przykład.

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

będę musiał obsłużyć kilka przycisków np o nazwach moj_klawisz_a, moj_klawisz_b, to oczywiście w pętli będę musiał je umieścić, czyli będzie to wyglądało tak:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Jak się domyślam (być może błędnie) ale te klawisze będzie można połączyć w EVENT(); ??? Czyli byłoby coś takiego:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 kwi 2013, o 08:33 

Pomógł: 0

Ty to masz zdrowie ;), mnie kiedyś fajnie wyłożył Mirek eventy na przykładzie obsługi rs232, ale długo nie zaglądałem do tego i wyparowało szybciej niż zdążyłem zrozumieć ;).



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 5 kwi 2013, o 08:44 
Offline
Moderator
Avatar użytkownika

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

qutrit --> mam nadzieję, że nie obrazisz się, że na razie zdecydowanie nie odpowiem na twoje pytanie ponieważ zahacza ono o kolejną część tego poradnika - a ty troszkę na razie właśnie mieszasz pojęcia. Ale odpowiem tak....

na razie na tym etapie nie istotne jest w ogóle jaka jest zawartość tej naszej funkcji w naszym "SUPER" Lib'sie ;) to z tą obsługą klawisza to był tylko taki CZYSTO MEGA ABSTRAKCYJNY przykład - i nawet nie chciałbym kontunuować wątku jak rozbudować funkcję do obsługi kilku klawiszy na tej zasadzie bo dojdziemy do nikąd - a na tym (sam przyznasz nam nie zależy) .... wręcz przewrotnie podszedłem i specjalnie użyłem prostej funkcji do obsługi klawisza z mojego bloga - czując że wcześniej czy później (nie mówię tu teraz broń boże o tobie) pojawią się wrogie siły Phenianu .... atakujące ten poradnik za to - że przecież ta funkcja nie nadaje się do eliminacji drgań styków ble ble ble ;) .... a niech sobie wrogie siły bleblają )

ale ok znowu się rozgadałem nie na temat - więc kolego qutrit .... jeśli chodzi o SEDNO twojego pytania to powiem tak - moim zdaniem choć mogę się mylić - nie ma sensu tworzenia nawet funkcji, która będzie obsługiwała na raz kilka przycisków (chyba że znowu także tobie chodziło TYLKO o taki abstrakcyjny przykład - to OK rozumiem)..... bo w takie funkcji obsługującej tylko kilka przycisków nie ma żadnej uniwersalności - jak już to trzeba byłoby sięgnąć po obsługę klawiatury matrycowej - wtedy poziom uniwersalności nagle zwiększa się o 100% a tam już można użyć kilka callbacków.

reasumując - jeśli interesuje cię użycie kilku CALLBACKÓW w jednej funkcji - to spójrz proszę na kod funkcji SuperDebounce() z Bluebooka ok....

a w pozostałych kwestiach proszę poczekaj na kolejną część poradnika dobrze?

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

Tak rezasurmar ma rację - bo właśnie ogromne zalety takiej CALLBACZNOŚCI że tak się brzydko wyrażę, ujawniają się nam w pełnej okazałości (jak efekt 3D w filmie AVATAR) ... ;) ... dopiero na takich bardziej zaawansowanych przykładach - czyli np możliwości podmiany calbacków w locie itp itd ....ale o tym później .... chociaż spor jest też w GreenBook'u

_________________
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: 5 kwi 2013, o 08:50 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 25 maja 2012
Posty: 296
Lokalizacja: Chebzie Dolne
Zbananowany użytkownik

Pomógł: 6

O ile to zrozumiałem to fajna rzecz w tym jest taka, że funkcja:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


jest przezroczysta i nie blokuje pętli głównej jeśli użytkownik biblioteki nie zarejestrował wskaźnika to swojej funkcji migającej diodką:)

_________________
Inspekcja TV kanalizacji
Programowanie



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 kwi 2013, o 08:59 

Pomógł: 0

mirekk36 napisał(a):
bo właśnie ogromne zalety takiej CALLBACZNOŚCI że tak się brzydko wyrażę, ujawniają się nam w pełnej okazałości (jak efekt 3D w filmie AVATAR) ... ;) ... dopiero na takich bardziej zaawansowanych przykładach - czyli np możliwości podmiany calbacków w locie itp itd ....ale o tym później .... chociaż spor jest też w GreenBook'u
Ty to masz zdrowie ;), mnie kiedyś fajnie wyłożył Mirek eventy na przykładzie obsługi rs232, ale długo nie zaglądałem do tego i wyparowało szybciej niż zdążyłem zrozumieć ;).

Gdzie tam rację, bez waszej pomocy nigdy bym tego na calbakach wtedy nie uruchomił :).

Mirku bardziej by tu pasował Hobbit w 3D, bo Avatar to tylko 3D, a zero treści ;).

O podmianie w locie było bodajże w poradniku o Snake z tego co pamiętam robiłeś tam myka z tym.



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 5 kwi 2013, o 09:05 
Offline
Moderator
Avatar użytkownika

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

rezasurmar napisał(a):
Mirku bardziej by tu pasował Hobbit w 3D, bo Avatar to tylko 3D, a zero treści ;).

hahaha dlatego mówiłem tylko o efektach 3D a nie o treści ;) dla mnie ten film pod tym względem pozostaje najlepszy, ale pod względem 3d ;)

rezasurmar napisał(a):
O podmianie w locie było bodajże w poradniku o Snake z tego co pamiętam robiłeś tam myka z tym.


Dokładniuśko .... i dobrze że ten przykład tu także podałeś - tam też odsyłam zainteresowanych walką z callbackami:

http://mirekk36.blogspot.com/2012/12/ws ... a-bez.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  
PostNapisane: 5 kwi 2013, o 09:12 
Offline
Nowy

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

Jasne i proste... Ja wołam jego funkcję i podaję wskaźnik na swoją funkcje która ma być wywołana przez jego funkcję jak warunek spełniony. Ok. A rejestracja callback-a to rozumiem tylko taki prototyp funkcji żeby kompilator wiedział co wołać tak?. Czy może to chodzi o to że rejestrujemy adres wskaźnika na funkcję? i dlatego nazywa się to rejestracja funkcji zwrotnej?



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

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

wojtek_2 napisał(a):
Jasne i proste... Ja wołam jego funkcję i podaję wskaźnik na swoją funkcje która ma być wywołana przez jego funkcję jak warunek spełniony. Ok. A rejestracja callback-a to rozumiem tylko taki prototyp funkcji żeby kompilator wiedział co wołać tak?. Czy może to chodzi o to że rejestrujemy adres wskaźnika na funkcję? i dlatego nazywa się to rejestracja funkcji zwrotnej?


z tym czekamy do kolejnego odcinka proszę ok ? a będzie może dzisiaj wieczorkiem - bo widzę, że to co tu zostało podane - chyba jest jasne - sądząc po wypowiedziach waszych ;) co mnie bardzo cieszy.

_________________
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: 5 kwi 2013, o 10:35 
Offline
Użytkownik

Dołączył(a): 11 lut 2013
Posty: 140
Lokalizacja: Kraków
Pomógł: 10

ten moj tekst byl tak bardziej troche dla jaj, bo mirek pisal zeby nikt niepisal to napisalem. :lol:



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 kwi 2013, o 11:36 
Offline
Użytkownik

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

matisek1233 napisał(a):
ten moj tekst byl tak bardziej troche dla jaj, bo mirek pisal zeby nikt niepisal to napisalem. :lol:

Może dla kogoś był w formie żartu, ale dla mnie wytłumaczenie kolegi p_zag tego żartu było bardzo przydatne :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 kwi 2013, o 14:17 
Offline
Użytkownik

Dołączył(a): 11 lut 2013
Posty: 140
Lokalizacja: Kraków
Pomógł: 10

no wiec przepraszam kolege i mam nadzieje ze wybaczy mi moj blad ale i rowniez dziekuje za pomoc

------------------------ [ Dodano po: 29 minutach ]

ale jak wroce ze szkoly i usiade z eclipsem to zapewne okaze sie ze jego pomoc byla pomocna



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 kwi 2013, o 10:04 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 31 sie 2012
Posty: 52
Lokalizacja: Toruń
Pomógł: 1

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

na pewno nie jest to optymalny sposób, i pewnie dużo można tu poprawić, ale na dzień dzisiejszy tak ja te "Callback'i" rozumiem. Jak by ktoś ten mój sposób zoptymalizował to bym był bardzo wdzięczny. Celowo nie rozbijałem na pliki, żeby łatwiej było to ogarnąć (no przynajmniej tak mi się wydaje).

Piotr



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 kwi 2013, o 11:10 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 06 maja 2012
Posty: 233
Lokalizacja: Gdynia
Pomógł: 15

Antystatyczny napisał(a):
A ja własnie zachodzę w głowę jak to podzielic na pliki i nie bardzo mam na to jakiś mądry pomysł.


Ja 'Eventy' traktuję jako hermetyczne moduły i pakuję do osobnych plików natomiast własne funkcje 'callback' umieszczam w pliku common.c dzięki czemu nie zaśmiecam pliku main.c, który staje się bardziej przejrzysty.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 kwi 2013, o 11:38 
Offline
Moderator
Avatar użytkownika

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

bardzo ładnie panowie ;) .... sehr gut ;)

_________________
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: 6 kwi 2013, o 18:25 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 31 sie 2012
Posty: 52
Lokalizacja: Toruń
Pomógł: 1

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

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

bo co będzie jak w pliku main.c nie umieścisz (zarejestrujesz) swojej funkcji:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

wtedy flaga int0_flag będzie rosnąć w nieskończoność.

Piotr



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 kwi 2013, o 19:45 
Offline
Moderator
Avatar użytkownika

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

Antystatyczny napisał(a):
Hmm, masz rację, ale wtedy cenne impulsy od INT0 przepadną... W mojej wersji softu, przy braku callbacka, zmienna się w końcu przekręci. Żadna z wersji nie jest idealna...


A nie można tak kompromisowo? ;)

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


wtedy w EVENT'cie można spokojnie dekrementować także gdy zarejestrowany jest 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: 7 kwi 2013, o 09:33 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 06 maja 2012
Posty: 233
Lokalizacja: Gdynia
Pomógł: 15

Antystatyczny napisał(a):
No... to też jest dobry pomysł :)
Niestety, mimo najszczerszych chęci nie udaje mi się zgrabnie i skutecznie przekazać callbacka z argumentami.


Zapodaj jakiś kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 kwi 2013, o 10:07 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 06 maja 2012
Posty: 233
Lokalizacja: Gdynia
Pomógł: 15

Podczas rejestracji callbacka nie przekazuj dodatkowych argumentów

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


czyli

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


oraz zmień to

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


następnie w funkcja wywołująca twojego callbacka przekazuje mu odpowiedni argument:

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


Z tym żeby to miało sens to argument powinien być 'produkowany' w 'evancie' czyli jakieś odebrane znaki, zwiększony licznik itp.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 kwi 2013, o 10:17 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 31 sie 2012
Posty: 52
Lokalizacja: Toruń
Pomógł: 1

Antystatyczny popatrz jak ja to robię:

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


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


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


Piotr



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 kwi 2013, o 10:39 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 06 maja 2012
Posty: 233
Lokalizacja: Gdynia
Pomógł: 15

Antystatyczny napisał(a):
Jeszcze tylko coś napiszę w celu upewnienia się, że to absolutnie dobrze rozumiem: parametry przekazujemy DO callback'a, a nigdy odwrotnie, tak?


Argumenty są przekazywane do twojego callbacka, inaczej nie miało by to sensu.



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: 65 ]  Przejdź na stronę 1, 2, 3  Następna strona

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