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:

Składnia: [ Pobierz ] [ Ukryj ]
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ść.

Składnia: [ Pobierz ] [ Ukryj ]
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).

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

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);
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ść
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.
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:
Składnia: [ Pobierz ] [ Ukryj ]
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ę.

Składnia: [ Pobierz ] [ Ukryj ]
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:
Składnia: [ Pobierz ] [ Ukryj ]
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.

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

wkodzie wpis

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. :)

albo np. funkcja zwracająca stan na porcie B, funkcji nie podajemy parametrów.

Składnia: [ Pobierz ] [ Ukryj ]
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.

Składnia: [ Pobierz ] [ Ukryj ]
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ć?


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

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
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
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 :D

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. :P
Składnia: [ Pobierz ] [ Ukryj ]
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. 8-)

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. :oops:
Po przeanalizowaniu na spokojnie. :)
założenia: taktowanie 8MHz,

dla
Składnia: [ Pobierz ] [ Ukryj ]
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
Składnia: [ Pobierz ] [ Ukryj ]
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ć.
:mrgreen:

Strona 1 z 1 Strefa czasowa: UTC + 1
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/