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



Teraz jest 28 mar 2024, o 09:55


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 18 ] 
Autor Wiadomość
PostNapisane: 14 sty 2018, o 19:41 
Offline
Użytkownik

Dołączył(a): 28 maja 2016
Posty: 469
Lokalizacja: Katowice
Pomógł: 1

Cześć. Napisałem prostą funkcję ze zmienną globalną, którą przekazuję jako argument do funkcji. Argument ma wartość początkową =2.
Po obliczeniach funkcji powinna przyjąć wartość =4 i powinna być zwrócona na PORTC. Jednak tak się nie dzieje. Pojawiły się krzaczki w linijce 10 pętli głównej. Możecie mi podpowiedzieć dlaczego tak się dzieje? Wiem,że to są podstawy, ale męczę się z tym od rana z przerwami na obiad ;)
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

_________________
Nikt nie mówił,że będzie łatwo...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 sty 2018, o 19:44 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 09 gru 2014
Posty: 1540
Pomógł: 269

Funkcja ta wymaga argumentu typu uint8_t, a Ty wywołujesz ją bez:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Zrób na przykład tak:
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: 14 sty 2018, o 19:45 
Offline
Użytkownik
Avatar użytkownika

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

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

do funkcji nie przekazujesz żadnego argumentu



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 sty 2018, o 19:50 
Offline
Użytkownik

Dołączył(a): 28 maja 2016
Posty: 469
Lokalizacja: Katowice
Pomógł: 1

ok, ale chciałbym uzyskać efekt taki,że nie będę ręcznie wpisywać tej dwójeczki do linijki nr 10. tylko,żeby się to samo wpisywało w zależności jaką wartość przypiszę zmiennej a. Jak to zrobić? Byłem przekonany,że ta dwójka automatycznie po obliczeniach w funkcji wstawi się w miejsce nazwy funkcji w linijce 10

_________________
Nikt nie mówił,że będzie łatwo...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 sty 2018, o 19:51 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 09 gru 2014
Posty: 1540
Pomógł: 269

Możesz napisać tak:
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: 14 sty 2018, o 19:54 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 lis 2015
Posty: 1448
Lokalizacja: okolice Warszawa
Pomógł: 149

wojciechgorzolka napisał(a):
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Co to ta Matylda? :)
jeżeli chcesz zwrócić pole kwadratu to trzeba wpisać w nawiasach funkcji, pole kwadratu ale jakiej wartości.
może być przecież pole kwadratu z argumentem 2 albo 3 albo 10 albo max 16. bo wynik nie może przekroczyć uint8_t.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 sty 2018, o 19:57 
Offline
Użytkownik

Dołączył(a): 28 maja 2016
Posty: 469
Lokalizacja: Katowice
Pomógł: 1

Ja tu chyba źle rozumuję Drodzy koledzy. Poprawcie mnie jeśli źle to rozumiem. Mam funkcję jak w przykładzie o nazwie pole kwadratu(). I uwaga, takie jest moje myślenie:
1. Do funkcji przekazuję argument - czyli przed obliczeniami procesor przekazuje zmienną 'a' do funkcji 'uint8_t pole_kwadratu(uint8_t a)' w miejsce gdzie w nawiasie jest napisane '(uint8_t)' i to jest właśnie ten argument. Mam zdeklarowaną zmienną a=2 i tą dwójkę tak wrzuca. Następnie oblicza i w miejsce nazwy funkcji ' pole kwadratu' wrzuca wynik. Następnie ja przypisuję ten wynik do PORC w postaci takiej jaka jest w linijce nr 10.

_________________
Nikt nie mówił,że będzie łatwo...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 sty 2018, o 20:00 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 09 gru 2014
Posty: 1540
Pomógł: 269

Jeżeli powołałeś funkcję z argumentem to w momencie jej wywołania musisz podać argument.
Ta zmienna globalna uint8_t a = 2; nie ma nic wspólnego z argumentem w Twojej funkcji, bo musi on być przekazany jako parametr.
Poczytaj w BB o funkcjach, przekazywaniu argumentów przez wartość, argumentach funkcji, formalnych i aktualnych, strona 116.
Powinno Ci się rozjaśnić. ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 sty 2018, o 20:04 
Offline
Użytkownik

Dołączył(a): 28 maja 2016
Posty: 469
Lokalizacja: Katowice
Pomógł: 1

ok, już się zabieram. skupiłem się na stronie 110 :) i z informacjami z innej książki. pewnie wrócę za chwilę do pytań do Was :)

Bo tak naprawdę ,że by zapalić diodę numer dwa na ATB nie musiałbym pisać żadnej funkcji, tylko mogę przypisać do PORTC cyfrę 2 i wyszło by na to samo, tylko że bez funkcji, a nie o to mi chodzi. Ale zerkam na stronę 116

_________________
Nikt nie mówił,że będzie łatwo...



Ostatnio edytowano 14 sty 2018, o 20:06 przez wojciechgorzolka, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 sty 2018, o 20:05 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 09 gru 2014
Posty: 1540
Pomógł: 269

Masz rację Daro69, ale tutaj chyba nie chodzi o pole kwadratu tylko o funkcję, która ustawi coś na porcie PORTC.

wojciechgorzolka przanalizuj sobie taki przykład, z Twojego poprzedniego postu ;) :
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: 14 sty 2018, o 20:17 
Offline
Użytkownik

Dołączył(a): 28 maja 2016
Posty: 469
Lokalizacja: Katowice
Pomógł: 1

zobrazuję na przykładzie sokowirówki o co mi chodzi. owoce to są jakieś zdeklarowane liczby, sokowirówka to jest moja funkcja. Mam też PORTC jako kubek. I teraz wrzucam dwa różne owoce , jabłko =2 i banan =2, w sokowirówce pięknie się to miksuje (dodaje), aż ślinka cieknie i zmiksowany soczek wlewam do kubka czyli na PORTC i zapala mi się dioda nr 3 :):):):) Czyli wynik automatycznie przypisze mi się w linijce nr 10 mojego przykładu.

_________________
Nikt nie mówił,że będzie łatwo...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 sty 2018, o 20:39 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 lis 2015
Posty: 1448
Lokalizacja: okolice Warszawa
Pomógł: 149

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

:)


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 sty 2018, o 20:40 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 09 gru 2014
Posty: 1540
Pomógł: 269

Jest tak jak mówisz tylko, że dajesz gościowi (Twojej funkcji) jabłko i banana, on Ci je oddaje i tworzy sobie ich kopie, to je sobie miksuje i powstaje soczek. :D
To się nazywa przekazywanie argumentów przez wartość. Przekazujesz oryginalne argumenty do funkcji, które nazywamy argumentami aktualnymi czyli Twoje owoce. Następnie funkcja tworzy sobie w pamięci ich kopie i powstają argumenty formalne. Na nich właśnie wykonywane są wszystkie operacje wewnątrz funkcji. Po wykonaniu tej funkcji są one tracone, to znaczy kopie tych Twoich owoców. Prawdziwe owoce istnieją nadal, nawet nie nadgryzione. :D Str 117 w BB

Aby nie kopiować danych wystarczy zastosować referencję. O tym też jest mowa w BB. ;)
Wtedy Twoje owoce faktycznie już będą w postaci płynnej po przemieleniu przez sokowirówkę i to nieodwracalnie.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 sty 2018, o 20:49 
Offline
Użytkownik

Dołączył(a): 28 maja 2016
Posty: 469
Lokalizacja: Katowice
Pomógł: 1

oo super. Dzięki za pomoc, o to mi właśnie chodziło . przykład ze strony 119 jest tym czego szukałem. Teraz go muszę poprzerabiać mod moje upodobania smakowe i chyba będzie gitarka. Dziękuje za cierpliwość i wyrozumiałość dla mnie :) Jak tylko to przećwiczę, to dopytam o jeszcze jedną rzecz nad którą się męczę, ale to już w następnym owocowym odcinku :) ps. jak się czyta BB to często coś umyka z nadmiaru informacji, a w tej magicznej księdze jest wszystko :)

------------------------ [ Dodano po: 45 minutach ]

Super wszystko działa i zrozumiałem Wasze tłumaczenie. Ale teraz jeszcze chciałbym Aby jako bonus wyświetlana była wartość obliczonej funkcji na wyświetlaczu.
Bazując na bibliotece Pana Mirka mam stworzoną funkcję do wyświetlania , jednak kłopot mam z wstawieniem do niej wyniku, tego który przypisuję na POTC.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Kiedyś Daro69 pokazywał mi jak się to robi, tzn wyświetlałem sobie licznik zliczający cyfry, ale nie mam już tego przykładu. A moja pamięć jest ulotna. Przyrównywałem lcd_str dofunkcji sok, niestety nie działa to rozwiązanie.

_________________
Nikt nie mówił,że będzie łatwo...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 sty 2018, o 22:12 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 lis 2015
Posty: 1448
Lokalizacja: okolice Warszawa
Pomógł: 149

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

;)

------------------------ [ Dodano po: 4 minutach ]

zauważ że lcd_str("jablko"); wysyła napis "jablko"
a funkcja lcd_int(jablko); wysle wartość tego jabłka, czyli 2.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 sty 2018, o 22:34 
Offline
Użytkownik

Dołączył(a): 28 maja 2016
Posty: 469
Lokalizacja: Katowice
Pomógł: 1

dziękuję. Widzę właśnie,że te funkcje są w bibliotece LCD. jutro się tym pobawię . :):):) Uciekam spać.

_________________
Nikt nie mówił,że będzie łatwo...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 sty 2018, o 20:56 
Offline
Użytkownik

Dołączył(a): 25 lip 2013
Posty: 2561
Pomógł: 126

Dlatego warto miec 2 BB. Jeden do 'mazania' zakreślaczem a drugą do trzymania pod kloszem jako eksponat :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 sty 2018, o 21:17 
Offline
Użytkownik

Dołączył(a): 28 maja 2016
Posty: 469
Lokalizacja: Katowice
Pomógł: 1

ja wolę maziać i maziać. moja książka jest mocno popisana ołówkiem. ;)

_________________
Nikt nie mówił,że będzie łatwo...



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 4 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