ATNEL tech-forum https://forum.atnel.pl/ |
|
Parametry funkcji https://forum.atnel.pl/topic20916.html |
Strona 1 z 1 |
Autor: | wrctomi [ 25 cze 2018, o 10:32 ] |
Tytuł: | Parametry funkcji |
Witam.Mam pytanko odnośnie parametrów.Dlaczego w wywołaniu funkcji muszę wpisywać (0,0) żeby kompilator nie wyrzucał błędu?Podam przykład: język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
A jak zrobię tak to funkcja oblicza wartość. język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Pozdrawiam. ------------------------ [ Dodano po: 8 minutach ] A jak wpisze tak to wartości są brane z wewnątrz funkcji?A wartości są pomijane(100,100). |
Autor: | Marhef [ 25 cze 2018, o 10:56 ] |
Tytuł: | Re: Parametry funkcji |
wrctomi napisał(a): Dlaczego w wywołaniu funkcji muszę wpisywać (0,0) żeby kompilator nie wyrzucał błędu? Ponieważ funkcja przyjmuje dwa argumenty (oba typu uint8_t). A jeżeli funkcja jest zadeklarowana z argumentami, więc musisz je podać przy wywołaniu funkcji.wrctomi napisał(a): A jak wpisze tak to wartości są brane z wewnątrz funkcji?A wartości są pomijane(100,100). Tak się dzieje, ponieważ przy wywołaniu funkcji zmienne a i b mają wartości 100 i 100. Natomiast niżej przypisujesz tym zmiennym nowe wartości. Więc te nowe będą brane pod uwagę przy obliczeniu wyniku.
|
Autor: | wrctomi [ 25 cze 2018, o 11:27 ] |
Tytuł: | Re: Parametry funkcji |
Czyli jeśli chcę wywołać funkcje która posiada wewnątrz jakieś parametry np.2 to wywołuje ją tak funkcja(0,0);??Żeby zwróciła to co ma w środku?. A jeśli wewnątrz nie ma żadnych innych wartości np.przy dodawaniu funkcja(100,100).Przy wywołaniu funkcja zwróci wartość 200 ? ------------------------ [ Dodano po: 19 minutach ] Czy dobrze rozumuje? |
Autor: | Marhef [ 25 cze 2018, o 12:08 ] |
Tytuł: | Re: Parametry funkcji |
Chyba nie do końca. Jeśli chcesz, żeby funkcja coś zwróciła, to w funkcji używasz "return" (w Twoim przypadku return a+b -> zwraca sumę a i b) Jeżeli chcesz przekazać do funkcji jakieś zmienne, na których będziesz wykonywał obliczenia, to wtedy przy deklaracji funkcji zaznaczasz, ile i jakiego typu zmiennych chcesz używać. A potem wywołujesz funkcję z wartościami, na których chcesz operować. Spróbuj jaśniej opisać, jak to widzisz |
Autor: | wrctomi [ 25 cze 2018, o 14:58 ] |
Tytuł: | Re: Parametry funkcji |
Jeśli chcę przekazać jakieś zmienne do funkcji muszą to być zmienne globalne tak?I je można użyć jako parametry funkcji? ------------------------ [ Dodano po: 12 minutach ] uint8_t funkcja(uint8_t,uint8_t); Funkcja która zwraca uint8_t a parametry do czego służą?Mógłby ktoś napisać przykład?I wyjaśnić.Z góry dziękuje za cierpliwość. |
Autor: | rskup [ 25 cze 2018, o 15:32 ] |
Tytuł: | Re: Parametry funkcji |
wrctomi napisał(a): Jeśli chcę przekazać jakieś zmienne do funkcji muszą to być zmienne globalne tak?I je można użyć jako parametry funkcji? Nie. Zmienne globalne są widoczne w całym projekcie, więc ich nie musisz przekazywać (choc to nie jest zabronione). Przekazuje się zmienne lokalne.wrctomi napisał(a): uint8_t funkcja(uint8_t,uint8_t); To jak z obiadem. Masz wyjście (zwracany parametr), czyli coś co uzyskałeś w garnku. Ale aby funkcja mogła robić coś co nie jest zawsze tym samym obiadem, to musisz móc wkładać jej dane wejściowe poprzez parametry.Funkcja która zwraca uint8_t a parametry do czego służą?Mógłby ktoś napisać przykład?I wyjaśnić.Z góry dziękuje za cierpliwość Przekazując składniki jako parametry do funkcji gotuj obiad, dostajesz z niej wynik czyli obiad na talerzu . -- Pozdrawiam, Robert ------------------------ [ Dodano po: 2 minutach ] Jak nie przekazujesz parametrów przy wywołaniu funkcji nie ma wejściowych parametrów. Czyli przy wywołaniu nie dostarczasz jej zmiennych danych do działania. Oczywiście funkcja może bazować na zmiennych globalnych, ale nie jest to porządne rozwiązanie. |
Autor: | wrctomi [ 25 cze 2018, o 15:59 ] |
Tytuł: | Re: Parametry funkcji |
wkładać jej dane wejściowe poprzez parametry. A skąd te dane spływają.Proszę o jakiś praktyczny przykład . |
Autor: | xentis [ 25 cze 2018, o 16:29 ] |
Tytuł: | Re: Parametry funkcji |
Np masz taką funkcję do włączania ledów: język c Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod. Teraz gdy chcemy zapalić diodę led o numerze 2 poprostu wywołujemy funkcję z numerem tej diody, wywołana funkcja porówna przekazany parametr z warunkami, i jeśli któryś warunek będzie spełniony wykona instrukcję czyli zapali diodę. język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Tu masz z kolei bardziej rozbudowaną funkcję do której przekazujesz dwa parametry - numer diody i czy ma zostać zapalona czy zgaszona (0 zgaś, 1 i więcej - zapal), natomiast przed nazwą funkcji nie ma void tylko jest uint8_t co oznacza że funkcja coś zwraca - w tym wypadku stan całego portu - czyli podłączonych wszystkich ledów. |
Autor: | rskup [ 25 cze 2018, o 16:32 ] |
Tytuł: | Re: Parametry funkcji |
Np. funkcja licząca iloczyn dwóch liczb: język c Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod. -- Pozdrawiam, Robert |
Autor: | wrctomi [ 25 cze 2018, o 17:36 ] |
Tytuł: | Re: Parametry funkcji |
Zaczynam rozumieć. A jak zrobić żeby funkcja jeśli się wykona dała jak gdyby potwierdzenie wykonania,zakończenia np do zmiennej globalnej w postaci np 1. |
Autor: | Daro69 [ 25 cze 2018, o 17:39 ] |
Tytuł: | Re: Parametry funkcji |
witam, albo funkcja która nic nie zwraca, ale na podstawie parametrów coś wykonuje. język c Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod. wkodzie wpis język c Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod. taki przykład. albo np. funkcja zwracająca stan na porcie B, funkcji nie podajemy parametrów. język c Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod. albo funkcja zwracająca stan bitu 0 na porcie B, funkcji nie podajemy parametrów bo np. nie potrzebujemy. język c Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod. ...................................................... wrctomi napisał(a): A jak zrobić żeby funkcja jeśli się wykona dała jak gdyby potwierdzenie wykonania,zakończenia np do zmiennej globalnej w postaci np 1. a można w funkcji przecież zmienić jakąś zmienną globalną na 1. np. flaga_mojej_funkcji. pozdrawiam. ------------------------ [ Dodano po: kilkunastu sekundach ] dopiszę................w ostatnim przykładzie. |
Autor: | wrctomi [ 25 cze 2018, o 18:16 ] |
Tytuł: | Re: Parametry funkcji |
Muszę poćwiczyć.Dziękuje Wszystkim za podpowiedzi.Pozdrawiam |
Autor: | wrctomi [ 28 cze 2018, o 18:24 ] |
Tytuł: | Re: Parametry funkcji |
Witam.Czy można w tej funkcji zrobić while (ms++). Jak to zrobić? |
Autor: | Daro69 [ 28 cze 2018, o 22:21 ] |
Tytuł: | Re: Parametry funkcji |
Witam, Tak zetknąłem na kod i ... Po pierwsze primo: Z tego co pamiętam to funkcji _deay_ms nie podajemy parametrów z przecinkiem. Po drugie primo: Czy kolega ma świadomość że w funkcji bodajże "licz", blokuje pętlę główna pętlą while.? Po trzecie primo: ... hmm... Z uwagi na te delaye ... Chyba czas zainteresować się timerami i przerwaniami. Powaga. I wszystko stanie się prostsze. Pozdrawiam. Wysłane z mojego Lenovo K33a42 przy użyciu Tapatalka |
Autor: | Daro69 [ 28 cze 2018, o 22:24 ] |
Tytuł: | Re: Parametry funkcji |
W drugim primo, chodziło mi i funkcję "moja_fun" a nie o licz. Wysłane z mojego Lenovo K33a42 przy użyciu Tapatalka |
Autor: | wrctomi [ 1 lip 2018, o 07:39 ] |
Tytuł: | Re: Parametry funkcji |
Witam.A jak zrobić żeby funkcja nie blokowała głównej pętli (while).A co do przecinka to tam go nie ma.Jest makro definicja Chyba nazwa może być z _ ? |
Autor: | szpilek [ 1 lip 2018, o 09:34 ] |
Tytuł: | Re: Parametry funkcji |
Kolega wyżej napisał: przerwania, timery. Co do przecinka to chodzi o tą linię: _delay_ms(0.95); -> zły argument funkcji Tak nazwa makra może zawierać '_' Proponuję zacząć od nauki języka, jakaś książka, tutorial |
Autor: | wrctomi [ 1 lip 2018, o 09:56 ] |
Tytuł: | Re: Parametry funkcji |
Dzięki. |
Autor: | krish [ 1 lip 2018, o 19:06 ] |
Tytuł: | Re: Parametry funkcji |
Panowie nie wprowadzajcie w błąd. Funkcja _delay_ms() może przyjmować argumenty z "przecinkiem" Taki jest prototyp (deklaracja): void _delay_ms(double __ms). https://www.microchip.com/webdoc/AVRLibcReferenceManual/group__util__delay_1gad22e7a36b80e2f917324dc43a425e9d3.html |
Autor: | Daro69 [ 1 lip 2018, o 20:12 ] |
Tytuł: | Re: Parametry funkcji |
krish napisał(a): Panowie nie wprowadzajcie w błąd. no tak, double. z tym że w tym przypadku i tak potraktuje to 0.95 jako 1. język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
ale fakt, przyjmuje parametr double. czyli źle pamiętałem , a zapis "_delay_ms(0.95);" jest poprawny. |
Autor: | krish [ 1 lip 2018, o 22:09 ] |
Tytuł: | Re: Parametry funkcji |
Faktem jest, że później te funkcje mogą się różnie zachowywać (np. różna dokładność) i nie informować o tym. W pewnych szczególnych przypadkach dokumentacja wskazuje, że nawet nie będzie opóźnienia. |
Autor: | andrews [ 2 lip 2018, o 09:18 ] |
Tytuł: | Re: Parametry funkcji |
Daro69 napisał(a): z tym że w tym przypadku i tak potraktuje to 0.95 jako 1. Chyba niekoniecznie. Zwróć uwagę, że w miejscu, które zaznaczyłeś w kodzie, to __tmp jest porównywane z wartością1.0, a __tmp != __ms, chyba że F_CPU=4000, co jest raczej rzadko spotykane |
Autor: | Daro69 [ 2 lip 2018, o 10:08 ] |
Tytuł: | Re: Parametry funkcji |
O kurczaki, ... Racja!!! dzięki @andrews. Wysłane z mojego Lenovo K33a42 przy użyciu Tapatalka |
Autor: | Daro69 [ 2 lip 2018, o 16:51 ] |
Tytuł: | Re: Parametry funkcji |
Korekta do pierwszego primo. Po przeanalizowaniu na spokojnie. założenia: taktowanie 8MHz, dla język c Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod. __tmp = (8e6 / 4e3) *1 = 2000. ticks = __temp. _delay_loop_2(2000) , trwa 4cykle razy 2000, = 8000 cykli. 8000/8000000 = (0,001 s). dla język c Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod. __tmp = (8e6 / 4e3) * 0.95 = 1900. ticks = __tmp. _delay_loop_2(1900) , trwa 4cykle razy 1900, = 7600 cykli. 7600/8000000 = (0,00095 s). dzięki @krish, dzięki @andrews, sorka @wrctomi. musiałem naprostować. |
Strona 1 z 1 | Strefa czasowa: UTC + 1 |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |