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



Teraz jest 12 lut 2025, o 10:51


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 14 ] 
Autor Wiadomość
PostNapisane: 21 paź 2012, o 15:32 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 21 paź 2012
Posty: 17
Lokalizacja: Bytom
Pomógł: 0

Witam Serdecznie

Zacząłem przygodę z uC i takie sobie ćwiczonko robię i mam do Was pytanie czy poprawne jest tutaj użycie wskaźnika ?
Ogólnie zadaniem jest zapalenie diod i później ich zgaszenie.

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: 21 paź 2012, o 15:38 
Offline
Moderator
Avatar użytkownika

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

Z punktu widzenia prawidłowego posługiwania się wskaźnikiem i zrozumienia zagadnienia w podstawowym zakresie to tak - prawidłowe użycie wskaźnika.....

Rozumiem, że w ramach ćwiczenia chciałeś zamiast a użyć *ptr ? jeśli tak - to ok

nie analizuję ani nie oceniam tu samego programu - bo jak mówię - rozumiem że to tylko test

_________________
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: 21 paź 2012, o 16:18 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 21 paź 2012
Posty: 17
Lokalizacja: Bytom
Pomógł: 0

Tak, to tak w ramach przetworzenia teoria w praktykę (w teorii wydawało się trudniejsze).
Prosiłbym też może jeszcze o zerknięcie na kod, coś może jest źle albo można zrobić lepiej ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 paź 2012, o 21:17 
Offline
Moderator
Avatar użytkownika

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

Pachu80 napisał(a):
Prosiłbym też może jeszcze o zerknięcie na kod, coś może jest źle albo można zrobić lepiej ?


Tak jak pisałem wyżej - w ramach zrozumienia wskaźników - można przyjąć taki kod - ale w praktyce po prostu łatwiej byłoby się posługiwać w tym konkretnym przypadku tą zmienną a. Tutaj nikt by do życia nie powoływał wskaźnika po prostu. Więc to nie chodzi o to że jest źle - albo czy można lepiej - po prostu - to jest ćwiczenie wskaźnika....

_________________
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: 21 paź 2012, o 21:44 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 21 paź 2012
Posty: 17
Lokalizacja: Bytom
Pomógł: 0

Ok. Przyjmijmy, że zamiast wskaźnika, użyjemy normalnie zmiennej a to czy kod jest w miarę poprawny czy są jakieś błędy.
Chodzi mi głównie o to czy jest to w miarę logiczne co piszę :)
Wiem, że można inaczej rozwiązać zapalania i gaszenie się diod :D



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 paź 2012, o 21:52 
Offline
Moderator
Avatar użytkownika

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

Tak ale zawsze lepiej jest gdy ktoś kto pokazuje kod to chociaż troszkę opisze co on ma robić .... mi to zawsze ułatwia analizę ok ???

Ale wygląda OK ;) te diody 4 szt - mają się zapalać i gasić cyklicznie chyba. Sprawdzałeś to na żywym układzie ? ;) to jest zawsze najlepszy test .

_________________
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: 21 paź 2012, o 22:00 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 21 paź 2012
Posty: 17
Lokalizacja: Bytom
Pomógł: 0

Tak komentarze, zapominam o nich - będę pamiętał na przyszłość :P
Oczywiście sprawdzałem zapalają się i ładnie gaszą i tak w kółko



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 paź 2012, o 22:15 
Offline
Moderator
Avatar użytkownika

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

pomyśl też czasem nad rozwiązaniem z tablicowaniem - takich efektów - np:

Kod:
uint8_t efekty[] = {4,8,16,32,16,8};


a potem 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.


wtedy też może się przydać rozwiązanie ze wskaźnikiem, np:

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


to tak na kolanie piszę więc może jakiś błąd - ale możesz się pobawić i popróbować

_________________
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: 21 paź 2012, o 22:39 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 21 paź 2012
Posty: 17
Lokalizacja: Bytom
Pomógł: 0

Ok. Jutro przetestuję te wersje.
Pierwszy kod - zrozumiały (też robiłem na tablicy)
Drugi kod - tutaj już trochę gorzej (trzeba doczytać o wskaźnikach)

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

bo to nie pobiera adresu tylko chyba zawartość ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 paź 2012, o 22:43 
Offline
Moderator
Avatar użytkownika

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

musisz zapamiętać - że sama nazwa tablicy to od razu WSKAŹNIK na jej pierwszy element dlatego nie trzeba operatora pobierania adresu & używać, ale można byłoby i z nim tylko że tak

Kod:
uint8_t *wsk = &efekty[0];


teraz jaśniej ? ;)

czyli jak widzisz nic skomplikowanego - od tej pory wsk wskazuje na pierwszy element

_________________
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: 21 paź 2012, o 23:09 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 21 paź 2012
Posty: 17
Lokalizacja: Bytom
Pomógł: 0

no jaśniej jaśniej :D
jutro (dzisiaj po południu) przetestuje i jeszcze w między czasie poczytam o tych wskaźnikach z tablicami.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 paź 2012, o 17:17 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 21 paź 2012
Posty: 17
Lokalizacja: Bytom
Pomógł: 0

Ok. Przeczytałem jeszcze raz jeden dział o wskaźnikach, żeby wiedzieć więcej.
I teraz interpretacja kodu:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


czy dobrze to rozumuje ?
tylko jest coś, co nie daje mi spokoju czy w tej linijce nie powinno być =
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: 22 paź 2012, o 17:35 
Offline
Moderator
Avatar użytkownika

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

po pierwsze to za mało znaków = dałeś w warunku ;) dlatego jeśli już masz sprawdzać czy coś jest równe to pisz:

Kod:
if( 5 == zmienna )


zamiast

Kod:
if( zmienna == 5 )


bo się właśnie przejedziesz jak będziesz tak pisał jak wyżej

Kod:
if( (wsk-efekty) = 5 )


zobacz od tego dostaniesz tylko WARNING i możesz przeoczyć ten błąd, a jeśli napisałbyś tak:

Kod:
if( 5 = (wsk-efekty) )


to od razu miałbyś ERROR w kompilacji ;)

ale ok - a dlaczego ma być > 5 ???? a widziałeś ile jest elementów w tablicy ??? policz jeszcze raz ;) jest ich 6 ale to jest język C a nie Bascom. Bo w Bascomie wszyscy są przyzwyczajeni liczyć od 1 ....

a w C liczysz od 0 elementy tablicy - więc masz ich 6 .... a zatem jeśli różnica w tym IF'ie będzie większa niż 5 to wtedy następuje zresetowanie ...

ale sprawdź sobie to w praktyce na swoich diodach

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

A i jeszcze jedno:

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


zły komentarz :( powinien być taki:

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


doczytaj o:

post-inkrementacji czyli: zmienna++
pre-inkrementacji czyli: ++zmienna

bo to różnica, twój komentarz byłby prawdziwy gdyby kod był taki:

Kod:
*(++wsk)


oczywiście jest też w książce opisana: post-dekrementacja zmienna-- oraz pre-dekrementacja --zmienna

teraz jaśniej ? ;)


Autor postu otrzymał pochwałę

_________________
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: 22 paź 2012, o 17:55 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 21 paź 2012
Posty: 17
Lokalizacja: Bytom
Pomógł: 0

Tak, za mało znaków :D
A co do > 5 to tutaj mój błąd, liczyłem elementy tablicy i jakoś policzyłem, że jest ich 5, dlatego mi to się nie zgodziło - muszę też widocznie poćwiczyć liczenie do 10 :D. Teraz to mi się zgadza dlaczego >5 :)

Tak, oczywiście, że jest jaśniej ;)
Dzięki za pomoc



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

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Google [Bot] i 2 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