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



Teraz jest 5 sty 2025, o 06:03


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 12 ] 
Autor Wiadomość
PostNapisane: 9 mar 2013, o 23:07 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 09 mar 2013
Posty: 71
Lokalizacja: Kraków
Pomógł: 5

Jestem zupełnie nowy na forum i dopiero zaczynam przygodę z językiem C dla AVR, proszę więc o wyrozumiałość nawet jeśli moje pytania wydawać by się mogły zupełnie banalne dla kogoś. Jakiś już czas kupiłem książkę Pana Mirka, przeczytałem "część toretyczną" do rozdziału warsztaty no i odłożyłem na półkę, pomyślałem że jest dla mnie za trudna. W zeszłym tygodniu wróciłem spowrotem do niej, przeczytalem wszystko raz jeszcze do tego samego rozdziału i tym razem już stwierdziłem że nie jest wcale za trudna ale wybitna, mogę to potwierdzić raz jeszcze, ponieważ książek o programowaniu AVR mam wiele. W porównaniu z innymi w skali ocen 1 do 6 wystawiłbym jej ocenę celującą, o ocenie innych tutaj nawet nie wsponę bo względem tej naprawdę wypadły by blado.
Ale do rzeczy, przy opisie działania funkcji (na stronie 108 książki) autor podaje następujący przykład wywołania funkcji (fragment kodu):

PORTB=waga_bitu(5); // wywołanie funkcji i wynik na port B
uint8_t zapal_bit (uint8_t nr) // definicja funkcji

Moje pytanie brzmi: skąd wzieła się nazwa waga_bitu i dlaczego ona (nazwa waga_bitu) wywołuje funkcję o nazwie zapal_bit
Drugi podobny przykład (ze strony 181 i fragment kodu):

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


[ kody programów proszę na przyszłość umieszczać w znacznikach [ syntax = c ] dobrze ? - możesz wyedytować sobie ten post i podejrzeć jak poprawiłem - mirekk36 ]

Dzialania dokładnego tej funkcji również nie za bardzo rozumiem, bardzo bym prosił o wyjasnienie krok po kroku działania i sposobu wywołania tej funkcji.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 mar 2013, o 23:34 
Offline
Użytkownik

Dołączył(a): 26 sty 2013
Posty: 28
Pomógł: 0

http://www.atnel.pl/download/ksiazka/errata_01.pdf
str. 4

Jeśli chodzi o drugi przypadek to musisz dobrze zrozumieć dyrektywy preprocesora a w szczególności #define ( str. 132).

Argumentem funkcji klawisz_wcisniety jest KEY1_PIN. KEY1_PIN jest zdefiniowane przez dyrektywę preprocesora:
Kod:
#define KEY1_PIN (1<<PC6)

przed funkcją main(). Kompilator składa to sobie w całość i wyczodzi coś takiego:
Kod:
klawisz_wcisniety(1<<PC6)


Czego dokładnie nie rozumiesz, której linijki kodu? Postaramy się pomóc.



Ostatnio edytowano 9 mar 2013, o 23:45 przez Pyciek, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 mar 2013, o 23:35 
Offline
Moderator
Avatar użytkownika

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

Witamy na forum ;)

A czy kolega czyta aby najświeższe informacje na naszej stronie ? ;) np to ?

http://atnel.pl/errata.html

tam jest wyjaśnienie że nastąpiła pomyłka z nazwami tych funkcji - proszę zajrzeć do PDF z erratą - jest tam akurat opisany ten błąd ze strony 108 - więc myślę że wszystko się wyjaśni ok ?

A w tej drugiej funkcji klawisz_wcisniety() czego kolega dokładniej nie rozumie ? .... bo tak to się ciężko odnieść - w książce jest przecież kod z komentarzami, które tutaj kolega pominął - a przecież one już wyjaśniają trochę podstawy działania 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.


więc proszę się do tego odnieść i napisać co jest jasne w niej a co niejasne OK ... to wtedy pomożemy

bo warto te podstawy starać się jak najszybciej zrozumieć ..... i po to jest też to forum ;)

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

aha proszę też do dalszych prac z książką i z płytą DVD - mam nadzieję że kolega oglądał lekcje VIDEO z płyty DVD ??? ... ale też poczytać to:

http://atnel.pl/uaktualnienia-programow-do-dvd.html

że nie wspomnę już o poradnikach video i nie tylko video do książek i nie tylko na blogu

www.mirekk36.blogspot.com

no i sporej już kopalni wiedzy na naszym forum

_________________
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: 9 mar 2013, o 23:46 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 09 mar 2013
Posty: 71
Lokalizacja: Kraków
Pomógł: 5

Bardzo Dziękuję za odpowiedz na pierwsze pytanie (teraz już wszystko jasne) a co się dotyczy tego drugiego fragmentu kodu to w definicji funkcji klawisz_wcisnięty argumentem jest nazwa klawisz która jak rozumiem przyjmuje wartość jednobajtową , proszę o wyjaśnienie czy to jest tak że pod nazwę argumentu klawisz podstawiana jest definicja pinu np. KEY1_PIN czy dobrze rozumiem? jeśli nie to prosiłbym o wyjaśnienie poniższej linijki kodu:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Ostatnio edytowano 9 mar 2013, o 23:51 przez Maksio, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 mar 2013, o 23:50 
Offline
Użytkownik

Dołączył(a): 26 sty 2013
Posty: 28
Pomógł: 0

Dobrze rozumiesz. Może poczytaj jeszcze o argumentach funkcji, funkcjach, typach zmiennych i preprocesorze. Są to naprawdę bardzo podstawowe zagadnienia bez dokładnego ich zrozumienia będziesz miał problemy ze zrozumieniem i pisaniem coraz to bardziej zaawansowanych programów.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 mar 2013, o 00:31 
Offline
Moderator
Avatar użytkownika

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

Dokładnie jak pisze kolega wyżej - dobrze rozumiesz

pierwszy etap kompilacji robi PREPROCESOR i on podmienia w kodzie wszystkie makra na kod czyli KEY_PIN1 zostanie podmienione dla KOMPILATORA na to co było wyżej w #define ;) i dokładnie wartość tego wyrażenia - bo to jest wyrażenie czyli jakaś liczba zostaje przekazana jako argument do funkcji - natomiast IF sprawdza rezultat tej funkcji czyli to co ona zwróci.

_________________
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: 11 mar 2013, o 16:03 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 09 mar 2013
Posty: 71
Lokalizacja: Kraków
Pomógł: 5

Jeszcze raz Dziękuję za pomoc, za dużo chyba kawy wtedy wypiłem i jakoś nie mogłem się skoncentrować 8-)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 paź 2014, o 20:23 
Offline
Nowy

Dołączył(a): 19 wrz 2014
Posty: 11
Pomógł: 0

Po przeszukaniu forum uznałem że ten temat jest idealny dla moje problemu - zapewne banalnego ale nie wiem czy już tak zmęczony że nie potrafię powiedzieć co jest w moim kodzie nie tak. Początkowo napisałem nieco obszerniejszy kod z wykorzystaniem funkcji, który nie działał więc w imię nauki osobistej przeszedłem do całkowitych podstaw jeśli chodzi o operacje na funkcjach. Poniżej zamieszczam kod który wiem że jest banalny jednak ja nie potrafię powiedzieć co jest nie tak mimo że wydaje mi się że doskonale wiem co tam się dzieje

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


Zasadza działania funkcji według mnie:
W funkcji main tworzymu dwie zmienne uint8_t a,b. Zmiennej b nadajemy wartość b=2, natomiast zmienna a jest wykorzystywana do przechowywania wyniku operacji funkcji "mnozenie". Do funkcji "mozenie" wysyłany jest jako argument wartość zmiennej b = 2. W tejże funkcji następnie tworzona jest zmienna "wynik" w której znajduje się działanie "b*2" (przypomnę że zmienna b jest przesłana do funkcji ), czyli w rezultacie otrzymamy wynik =4 i wartość ta jest zwrócona przez tę funkcję i zapisana w main pod zmienną 'a" . Następnie znajduje się warunek który sprawdza czy zmienna "a=4" jeśli tak to ma dioda ma zmienić swój stan na przeciwny (aby jakoś dla ok uwidocznić poprawne działanie)
I proszę o pomoc gdyż w ogóle wywala mi błędy i nie mogę tego skompilować,zapewne jest to jakiś banalny błąd ale niestety zaczynam dopiero zabawę w C i nie potrafie powiedzieć gdzie leży błąd , naczytałem i w internecie i w BB i nie potrafię powiedzieć gdzie znajduje się błąd więc będę wdzięczny za każdą pomoc.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 paź 2014, o 20:28 
Offline
Moderator
Avatar użytkownika

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

xardes napisał(a):
Następnie znajduje się warunek który sprawdza czy zmienna "a=4"


to nie jest warunek który sprawdza stan czy zmienna a=4

to jest warunek panie w którym MASZ PRZEDE WSZYSTKIM WARNINGA JAK BYKA po kompilacji który ci krzyczy, że robisz źle

dlaczego ?

bo co to znaczy ? jak myślisz ?

a=4

to znaczy kochanieńki że właśnie napisałeś że zmienna a ma przyjąć wartość 4 rozumiesz ?

gdybyś zaś użył operatora dwuczłonowego logicznego == to już byłoby inaczej

a==4

to wyrażenie przyjmie wartoś albo TRUE albo FALSE

a żeby się ochronić przed takimi głupimi błędami ZAWSZE pisz w warunku tak

if( 4==a ) ....

bo wtedy jak się walniesz tak jak wyżej i napiszesz

if( 4=a ) ... to kompilator już nie rzuci warningiem tylko wyraźnie ci powie że nie można przypisać wartości zmiennej a do stałej dosłownej 4

rozumiesz ?

_________________
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: 3 paź 2014, o 22:29 
Offline
Nowy

Dołączył(a): 19 wrz 2014
Posty: 11
Pomógł: 0

Aaaa no faktycznie macie racje obaj - czarodzieje :D
Po waszych uwagach nagle wszystko działa , tak więc dziękuje Panie Mirku oraz kolego "mokroswski" za pomoc :)
Spędziłem cały dzień nad ogarnięciem funkcji mimo że wydawało mi się że już dosyć to rozumiem to miałem jakieś klapki na oczach że tego nie zauważyłem.
Jeszcze raz wielkie dzięki za pomoc :) i startuje dalej ze sterowaniem bramy :>



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 paź 2014, o 01:45 
Offline
Nowy

Dołączył(a): 19 wrz 2014
Posty: 11
Pomógł: 0

Jednak problemów ciąg dalszy, widzę że jeszcze dużo przede mną i mam nadzieje że nie nadużyję waszej cierpliwości :/ prosiłbym o sprawdzenie krótkiego kodu :
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Problem tym razem leży w tym że nie rozumiem dlaczego nie następuje wywołanie funkcji w tym kodzie , gdyż według mnie dodatkowa funkcja "zalaczenie" wykrywa wciśnięcie klawisza i na jego podstawie zwraca wartość 0 lub 1, która jest zapisywana w funkcji main w zmiennej "przycisk" , następnie sprawdzany jest warunek czy zmienna "1 == przycisk" jeśli TAK > to ma zaświecić diodę, jednak tak się nie dzieje :(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 paź 2014, o 06:49 
Offline
Moderator
Avatar użytkownika

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

masz na blogu pokazane jak użyć w funkcjach tego typu sprawdzania klawiszy - więc poczytaj tam najpierw ok ? i sprawdź opisane tam sposoby

_________________
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  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 12 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

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