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



Teraz jest 6 lut 2025, o 12:00


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 15 ] 
Autor Wiadomość
PostNapisane: 23 paź 2018, o 18:51 
Offline
Użytkownik

Dołączył(a): 14 lis 2017
Posty: 129
Pomógł: 0

Mam pytanie odnośnie funkcji SuperDebunce do obsługi przycisków, czy można za jej pomocą wywołać funkcję z argumentami?

Np :
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: 23 paź 2018, o 19:11 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 19 lis 2015
Posty: 219
Pomógł: 20

Można, tyle że jako wskaźnik podajesz tylko nazwę funkcji bez 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.


Tyle że wcześniej musisz ją zadeklarować z przynajmniej typami argumentów

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


Taki przykład z tymi zmiennymi



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 paź 2018, o 19:45 
Offline
Użytkownik

Dołączył(a): 14 lis 2017
Posty: 129
Pomógł: 0

A co z definicją funkcji SuperDebunce po zmianie deklaracji?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 paź 2018, o 19:50 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 19 lis 2015
Posty: 219
Pomógł: 20

No jak zmieniasz deklarację to definicję też musisz zmienić


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 paź 2018, o 20:32 
Offline
Użytkownik

Dołączył(a): 14 lis 2017
Posty: 129
Pomógł: 0

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



ale teraz w treści funkcji:

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


mam błąd

../funkcje.c:157:26: error: too few arguments to function 'push_proc'
make: *** [funkcje.o] Błąd 1



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 paź 2018, o 20:47 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 19 lis 2015
Posty: 219
Pomógł: 20

W definicji masz ze przekazujesz 3 argumenty a przy wywolaniu funkcji nic nie przekazujesz zadnego. Tak jakbys mial void



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 paź 2018, o 21:05 
Offline
Użytkownik

Dołączył(a): 14 lis 2017
Posty: 129
Pomógł: 0

jez2000 napisał(a):
W definicji masz ze przekazujesz 3 argumenty a przy wywolaniu funkcji nic nie przekazujesz zadnego. Tak jakbys mial void


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


to się kompiluje, ale nie o to chodzi


myślałem, że może tak

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


ale też źle
mam błąd

../funkcje.c:145:28: error: 'x' undeclared (first use in this function)
if(push_proc) push_proc(x,max,min); /* KEY_UP */



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 paź 2018, o 21:34 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 sty 2016
Posty: 1165
Lokalizacja: Kraków
Pomógł: 93

A tu masz błąd, że nie zadeklarowałeś zmiennej x



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 paź 2018, o 06:55 
Offline
Użytkownik

Dołączył(a): 14 lis 2017
Posty: 129
Pomógł: 0

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


Ok, mam funkcję jak powyżej jak ją odpalić za pomocą SuperDebunce?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 paź 2018, o 07:56 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 sty 2016
Posty: 1165
Lokalizacja: Kraków
Pomógł: 93

W kodzie z poprzedniego Twojego posta podajesz jako parametry wywołania funkcji zmienne x, max i min. Jakie wartości mają te zmienne przy wywołaniu?
W tej funkcji:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
zmienne x, min i max są znane. Natomiast nic mi nie wiadomo o tym, czy zmienne te są lokalne czy globalne.
Wstawisz cały kod? Będzie można coś więcej powiedzieć.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 paź 2018, o 08:08 
Offline
Użytkownik

Dołączył(a): 14 lis 2017
Posty: 129
Pomógł: 0

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.


funkcje.h

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


funkcje.c

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


Przesyłam pliki, chodzi o to, aby po wciśnięciu klawisza KL1 wykonała się funkcja SuperDebunceP, do której przekazuję funkcję zwiększenie z 3 parametrami, x1, max i min, funkcja zwiekszenie ma tylko zwiększać x1 w zadanym przedziele pomiędzy min a max.

W tej chwili SuperDebunce wywołuje funkcję zwiększenie ponieważ czyści się ekran i słychać bip() ( buzer), ale nie zwiększa mi wartości x1, przynajmniej na wyświetlaczu tego nie widzę.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 paź 2018, o 08:27 
Offline
Użytkownik

Dołączył(a): 14 lis 2017
Posty: 129
Pomógł: 0

kalani napisał(a):
Superdebounce musi "znać" parametry wywoływanej funkcji. Jeśli są one zewnętrzne wobec funkcji debounce to trzeba je podać w parametrach tejże funkcji. Żeby nie zrujnować uniwersalności funkcji debounce, parametry te należy zamknąć w strukturze, i przekazywać ją do debounce jako wskaźnik. Oczywiście dalsze przekazanie parametru do funkcji zwrotnej także musi być przez wskaźnik. W ten sposób funkcja debunce nie musi nawet znać wewnętrznej budowy parametru i może pozostać uniwersalna dla dowolnego zestawu parametrów.



Sam tego nie ogarnę nie mój poziom :(.
Właśnie o to chodzi żeby SuperDebunce Była uniwersalna, ponieważ w trakcie programu chciałem parametry zmieniać.

- trzeba utworzyć strukturę
- ale jak wstawić parametry do SuberDebunce i funkcji zwrotnej ? - tego nie potrafię.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 paź 2018, o 08:35 
Offline
Użytkownik

Dołączył(a): 14 lis 2017
Posty: 129
Pomógł: 0

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


mam strukturę temperatura jak ją przekazać do SuperDebynceP?

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: 24 paź 2018, o 09:20 
Offline
Moderator
Avatar użytkownika

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

Krzycho69 napisał(a):
mam strukturę temperatura jak ją przekazać do SuperDebynceP?

Kolega na razie jak widzę KOMPLETNIE nie rozumie callbacków :( .... Po jasny gwint przekazywać do tej funkcji superdebounce jakieś dodatkowe argumenty - toż to nieporozumienie praktycznie ... Callback tu jest po to aby nie ruszać kodu funkcji a reszta ma być robiona w funkcji callbackowej czyli tej wywołanej ....

To w niej jak kolega wyżej pisze możesz operować DOWOLNYMI zmiennymi - jakie tylko zechcesz (globalne - jakaś struktura itp) ... zapomnij najlepiej o przekazywaniu dodatkowych argumentów do superdebounce bo za chwilę wyjdzie ci z tego takie SPAGHETTI - że sam się nie połapiesz o co chodzi.

Krótko, Superdebounce wywoła twoją funkcję np:

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


no toż po co w niej jakieś argumenty skoro wiesz, że ona ma zwiększać "coś tam" - nie ważne czy temperaturę czy co innego - masz jakąś gdzieś zmienną np: temperatura to w tej funkcji napiszesz sobie:

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


chyba nie muszę mówić, że analogicznie możesz sobie zrobić funkcję:

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


i w ogóle nie ingerujesz w kod SuperDebounce() .... a wszystko działa tak jak chcesz - i może na tym przykładzie zaskoczysz - do czego są callbacki.

_________________
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 paź 2018, o 09:22 
Offline
Użytkownik

Dołączył(a): 14 lis 2017
Posty: 129
Pomógł: 0

kalani napisał(a):
Toteż piszę: zostawić superdebounce w spokoju i dane przekazywać do callbacka przez zm. globalne o zasiegu plikowym:




Wiem o co biega tak jak piszesz będzie najprościej.

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

mirekk36 napisał(a):

i w ogóle nie ingerujesz w kod SuperDebounce() .... a wszystko działa tak jak chcesz - i może na tym przykładzie zaskoczysz - do czego są callbacki.



Czaję, poszedłem nie tą drogą co trzeba.



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

Strefa czasowa: UTC + 1


Kto przegląda forum

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