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



Teraz jest 29 mar 2024, o 12:54


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 15 ] 
Autor Wiadomość
PostNapisane: 12 sty 2018, o 08:07 
Offline
Użytkownik

Dołączył(a): 18 cze 2015
Posty: 352
Pomógł: 0

Witam wszystkich.
Zacząłem ostatnio zagłębiać się w projekt Pana Mirka odnośnie w/w tematu. Czytam dogłębnie i staram się zrozumieć mechanizmy
w nim działające. Kompiluje się bez problemu i nawet stworzyłem jakieś własne proste iventy, które się. wykonują. Mirek pisze, że jest
to książka i projekt dla bardziej zaawansowanych. Ja to rozumiem, ale jak się ma pod ręką GB i ATB, to aż
korci, żeby trochę pokombinować, a więc proszę o wyrozumiałość.
Chciałem poprosić o łopatologiczne wytłumaczenie, do czego odnoszą się zaznaczone przeze mnie wartości. Wiem, ze to pewnie
podstawy podstaw, ale chciałbym to ogarnąć. Takie różnego rodzaju "wydłużone" makra, czy kody, gdzie jest kilka różnych argumentów
, zmiennych.... po przecinku są dla mnie niejasne.Pozdrawiam.

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


Chodzi mi konkretnie o np: 0,0,....,1,....,0,0,5,4,1,0 itd...

Często spotykałem się z tego typu zapisem przy innych kodach. Jak można słownie odczytać, co robi cała linia:

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


Napisałem tak i się wykonuje, ale te dwa zera ,0,0, dodałem na ślepo i nie wiem, czemu one mają służyć. Pozdrawiam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 sty 2018, o 08:44 
Offline
Użytkownik

Dołączył(a): 18 kwi 2013
Posty: 181
Lokalizacja: Kraków
Pomógł: 30

W pliku buf_lcd.h masz deklarację 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.


i widać, że to są współrzędne położenia warstwy na ekranie.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 sty 2018, o 08:47 
Offline
Użytkownik

Dołączył(a): 23 sty 2014
Posty: 1079
Pomógł: 73

create_obj to nazwa funkcji, wszystko co jest w nawiasie za tą nazwą to argumenty, jakie są podawane do funkcji. O tym jakiego typu będą to argumenty, ile ich będzie itd. decyduje programista, piszący daną funkcje. Żeby dowiedzieć się za co odpowiada konkretny argument trzeba zerknąć na deklarację funkcji, same nazwy argumentów już powinny być pomocne :)

------------------------ [ Dodano po: 1 minucie ]

O kolega janusz17 był szybszy i pokazał jak wygląda deklaracja funkcji create_obj :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 sty 2018, o 08:54 
Offline
Moderator
Avatar użytkownika

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

Robert_1967 napisał(a):
Jak można słownie odczytać, co robi cała linia:

No ale posłuchaj .... PRZEDE wszystkim znając język C - tzn podstawy , tzn to o czym pisałem w pierwszej części już Bluebooka - to nawet gdyby ktoś nie miał w ręku nigdy GB to zauważy, że:

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


to jest funkcja napisana przez autora programu. Widzisz bowiem nazwę i dwa nawiasy okrągłe, i jeśli zakończone jest to średnikiem, i umieszczone jest w kodzie to znaczy, że ta linijka wywołuje funkcję ...

W nawiasach okrągłych masz argumenty przekazywane do funkcji ... i teraz pytasz co one oznaczają, albo te dwa zera które tam dawałeś.

No jak myślisz ? że ja nie opisałem w książce pokazując ten kod - do czego jest ta funkcja i jak ona działa ? że nie opisałem jakie argumenty do niej podajemy ? Że nie pokazałem jak wygląda w ogóle ciało tej funkcji ?

Nie obraź się, ale to wygląda troszkę tak jakbyś zajrzał TYLKO do kodu na DVD albo na PENDRIVE a do książki ani na sekundę ... gdzie masz DOKŁADNY opis tej funkcji, nie tylko jak ją używać przecież ale po co ona jest, jak działa i jak w ogóle sobie taką funkcję napisać samemu.

Gdyby tego opisu nie było w książce to w zasadzie o kant tyłka można byłoby taką książkę obić.... Bo na co komu kody źródłowe dołączone do książki w których są jakieś przedziwne funkcje z tysiącami argumentów ...

Ok - pewnie gdyby ktoś był bardziej zaawansowany w C to przecież na nośniku jest również kod źródłowy tej funkcji i pewnie by sam powoli doszedł, który argument jest do czego - ale ja sobie DOSKONALE zdaję sprawę, że czytelnik po to sięga po książkę, żeby znaleźć w niej opis a nie się domyślać czegoś jak np w literaturze, gdzie tworzy się analizy wierszy i tego co poeta miał na myśli ;)

Dlatego proszę cię zajrzyj do książki ... poczytaj o tej funkcji a opisuję ją krok po kroku - i wtedy gdy coś będzie niejasne to tutaj śmiało dopytaj - bo po tak zadanym pytaniu to wynikałoby, że musiałbym tu na forum od nowa pisać cały rozdział czyli przepisywać książkę - jest sens ?

Tymczasem gdy się w kodzie rzuci okiem chociażby na nagłówek tej funkcji, proszę:

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


to już z samych nazw argumentów widać jak byk, że te dwa twoje zera, czyli argument drugi i trzeci

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


to zapewne współrzędne x i y - czyli już można się domyślić że chodzi o współrzędne na ekranie LCD

ale ok w zależności od wersji książki to proszę na stronie 357 masz DOKŁADNY opis tej funkcji - więc może warto zajrzeć do książki jak się już ją ma ? ;) i jak mówiłem wyżej - przeczytać opis - a gdy jakiś jego fragment będzie niejasny to wtedy dopytać ok?

_________________
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: 12 sty 2018, o 09:45 
Offline
Użytkownik

Dołączył(a): 18 cze 2015
Posty: 352
Pomógł: 0

Dziękuję bardzo kolegom za wyjaśnienie.
Teraz załapałem, o co chodzi. Mirku, możesz wierzyć, lub nie, ale ja czytam ten rozdział i to wielokrotnie. Po prostu akurat ta dziedzina
wiedzy przychodzi trochę ciężko. Nie będę tutaj zanudzał i ciągnął zbędnych dyskusji (nie chcę marnować Waszego cennego czasu), ale
nigdy, ale to nigdy nie miałem styczności z całą tą terminologią. Nie studiowałem, nie miałem tego w szkole itd...Jestem na forum już
dosyć długo i w zasadzie powinienem być o kilka stopni wyżej, ale ja raz siedzę długo przy książkach i atb, a potem jeszcze dłużej nic
w tym temacie nie robię. To jest tylko moje hobby, które zresztą baaardzo mnie fascynuje, ale praca zawodowa zupełnie nie związana z C i walka o byt nie pozwalają mi spędzać więcej czasu. Mam BB i GB, czytam, zaglądam
do kursów w necie i tak, jak mówiłem czasem nie rozumiem tego, co czytam.
Mógłby ktoś powiedzieć "to daj sobie spokój", ale przecież wszystko jest dla ludzi, a gdzie mam szukać pomocy,jak nie tu. W końcu tak
sobie myślę, ze chyba za bardzo natrętny to nie jestem :lol:
Druga sprawa, że tok nauki pewnie jest zły. Jedno do końca nie opanowane, a już idziemy dalej...W szkole to były sprawdziany, zaliczenia i ktoś nas kontrolował, a tu wolna amerykanka i to jest chyba główna przyczyna niepowodzeń wielu początkujących.
Kończąc raz na zawsze te marne usprawiedliwienia :oops: jeszcze raz dzięki Wam za pomoc. Jak będą jakieś konkretne pytania w tym
temacie, to się zgłoszę. Pozdrawiam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 sty 2018, o 10:23 
Offline
Moderator
Avatar użytkownika

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

Robert_1967 napisał(a):
Mógłby ktoś powiedzieć "to daj sobie spokój",

No ja bym tego nie powiedział NIGDY nikomu, wręcz odwrotnie - jak tylko starczy ci sił i ochoty to próbuj DALEJ ;)

życzę POWODZENIA bo widzę sporą nutkę zacięcia żeby się tego jednak nauczyć ! zobaczysz przyda się ;)

_________________
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: 26 sty 2018, o 12:35 
Offline
Użytkownik

Dołączył(a): 18 cze 2015
Posty: 352
Pomógł: 0

Chciałem prosić o pomoc, ponieważ testuję sobie wyświetlanie buforowe na lcd z tego projektu i kiedy chcę wysłać znak
"char" , to dostaję taki oto błąd:

make all
'Building file: ../main.c'
'Invoking: AVR Compiler'
avr-gcc -Wall -Os -fpack-struct -fshort-enums -ffunction-sections -fdata-sections -std=gnu99 -funsigned-char -funsigned-bitfields -mmcu=atmega16 -DF_CPU=16000000UL -MMD -MP -MF"main.d" -MT"main.o" -c -o "main.o" "../main.c"
../main.c: In function 'main':
../main.c:31:3: warning: passing argument 1 of 'buf_char' makes pointer from integer without a cast [enabled by default]
buf_char('@');
^
In file included from ../main.c:11:0:
../buf_lcd.h:35:6: note: expected 'char *' but argument is of type 'int'
void buf_char(char * wbf, char z);
^
../main.c:31:3: error: too few arguments to function 'buf_char'
buf_char('@');
^
In file included from ../main.c:11:0:
../buf_lcd.h:35:6: note: declared here
void buf_char(char * wbf, char z);
^
make: *** [main.o] Błąd 1

Inne funkcje, które do tej pory używałem działają poprawnie. Proszę podpowiedzieć, co robię źle. Kod:


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: 26 sty 2018, o 12:41 
Offline
Moderator
Avatar użytkownika

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

Cytuj:
void buf_char(char * wbf, char z);


no panie - masz funkcję do której masz podać 2 argumenty a ty podajesz jeden

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


i dziwisz się, że kompilator krzyczy że jest "nie halo" ?

_________________
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: 26 sty 2018, o 12:51 
Offline
Użytkownik

Dołączył(a): 18 cze 2015
Posty: 352
Pomógł: 0

Dziękuję Mirku za tak błyskawiczną odpowiedź.
Gapa ze mnie :oops: . Sprawdzę wieczorkiem.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 sty 2018, o 07:43 
Offline
Użytkownik

Dołączył(a): 18 cze 2015
Posty: 352
Pomógł: 0

Witam.
Dopiero mam dostęp do eclipsa. Pan Mirek zwrócił mi uwagę, ze powinienem podać dwa argumenty zamiast jednego.

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


Zapewne chodzi o char z, ale proszę mi wybaczyć, nie za bardzo rozumiem, o co chodzi z tym argumentem. Przetrzepałem
GB i przejrzałem ćwiczenie z pendriva, ale nie rozumiem, co dokładnie podstawić do kodu. No nie wiem
po prostu :oops: , a chciałbym dalej poćwiczyć wyświetlanie na lcd przy pomocy buforowania. stanąłem w miejscu.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 sty 2018, o 07:52 
Offline
Moderator
Avatar użytkownika

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

no przecież opisuję w GB, że zamieniliśmy sobie funkcje do wyświetlania na LCD na nasze własne funkcje do że tak powiem "wyświetlania" w buforze ram czyli np zamiast

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


stworzyliśmy sobie funkcję

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


ta druga po prostu wrzuca tekst nie bezpośrednio na LCD ale do bufora w pamięci RAM procka - do jednej z warstw

no właśnie - więc? .. .chyba trzeba określić do którego bufora, do której warstwy

i są na to przecież przykłady w tym kodzie w GB ... nie mów że na Pendrive nie ma kodu w którym nie widać użycia tej funkcji w kodzie właśnie ;) już nie mówiąc że i w książce dokładnie opisuję również i tę funkcję ...

a więc może na początek zajrzyj do tego kodu i później napisz pytanie czego nie rozumiesz w kodzie ok? Bo pierwszy argument to właśnie wskaźnik do bufora do warstwy.

_________________
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: 29 sty 2018, o 08:10 
Offline
Użytkownik

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

Wydaje mi się, że masz problem ze zrozumieniem co jest argumentem funkcji, wiec gorąco namawiam do przestudiowania BB.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 sty 2018, o 08:31 
Offline
Użytkownik

Dołączył(a): 18 cze 2015
Posty: 352
Pomógł: 0

Dziękuję Mirku za chęć pomocy.
Może źle zrobiłem, że na początku nie napisałem dokładnie, co akurat robię. Często spotykałem się z opinią przewagi "sterowania"
buforowego wyświetlacza lcd nad sprzętowym i postanowiłem się temu bliżej przyjrzeć. Znalazłem "inne" przykłady w necie,
przystosowałem je do moich aktualnych testów, jeśli chodzi o obsługę wyświetlacza lcd (4x20), ale ja wole używać Twoich funkcji,
ponieważ zacząłem przygodę z C dzięki Twoim książkom, atb i poradnikom, z czego jestem bardzo zadowolony. Dalej będę korzystał
z Twoich materiałów, a wiec nie chcę mieszać sobie w głowie różnymi źródłami wiedzy w tym zakresie.
Ja skompilowałem lekcję L19 i trochę się w niej "pokręciłem", ale jak sam widzisz, muszę się jeszcze wiele nauczyć, a wiec odłożyłem
ją chwilowo na bok, a skupiłem się tylko na obsłudze lcd (wyświetlenie różnych tekstów na różne sposoby), a żeby porzucić sterowanie
sprzętowe na poczet sterowania z pamięci ram.
W związku z powyższym skopiowałem pliki buf_lcd.c, oraz h, zmieniłem cols i rows dla mojego lcd i zacząłem wysyłać stringi w oparciu
o te pliki. Czyli są one oderwane jakby od całości Twojego projektu. Wszystko było dobrze, dopóki nie chciałem wysłać znaku typu
char. I z tego powodu powstały te pytania. Będę próbował dojść, co jest nie tak, ale bardzo szkoda mi czasu, a jest jeszcze tyle rzeczy
, których nie rozumiem. Ot i cała prawda. Pozdrawiam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 sty 2018, o 11:06 
Offline
Moderator
Avatar użytkownika

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

Przyznaję, że projekt jest nieco rozbudowany bo oprócz warstw dałem tam jeszcze prawie że obiekty i rozumiem, że to może budzić lekką konsternację

ale jeszcze raz króciutko

tak jak napisałem wyżej, powiedz mi czy to rozumiesz, że ZAMIAST na LCD wysyłamy tą funkcją lcd_char() znak do bufora w RAM ? czy to jest jasne ?

a skoro tych buforów jest więcej bo każda warstwa to oddzielny bufor no to trzeba wskazać adres bufora w pierwszym argumencie funkcji a w drugim po prostu dajemy pojedynczy znak do wysłania

tym adresem bufora może być nazwa tablicy bo przecież bufor to jakaś tablica w RAM

_________________
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: 29 sty 2018, o 12:08 
Offline
Użytkownik

Dołączył(a): 18 cze 2015
Posty: 352
Pomógł: 0

Dziękuje Mirku za cierpliwość.
Ja rozumiem różnicę pomiędzy działaniami na buforze i bezpośrednio na lcd. Otóż udało mi się przerobić funkcje do prawidłowego
wyświetlania stringów i czarów. u mnie jest tylko jeden główny bufor, ponieważ, jak napisałem wcześniej że testuje w/w funkcje
na moim wyświetlaczu, a żeby potem użyć już w konkretnym celu. Zrezygnowałem z active_buf, bo akurat w moim przypadku
jest mi zbędny (na razie), zmniejszyłem liczbę argumentów w funkcjach (tych w/g mnie zbędnych) i wszystko pomału zaczyna
śmigać. Potem chcę jeszcze zrobić wyświetlanie długich liczb, tak , jak kiedyś prosiłem o pomoc odnośnie sprzętowego sterowania itd...
Bardzo ciekawi mnie projekt L19 ponieważ, jak napisałeś w GB, to ma on wielki potencjał i nie spocznę, póki go nie "opanuje", ale na ta chwilę nie chcę popełniać starych błędów i iść do przodu bez zrozumienia poszczególnych części programu.
Tak, to ja się będę męczył, a przy mnie i Wy :lol: . Tak, ze na ten moment ogarnąłem, no i idę dalej po kolejnych funkcjach do lcd.
dzięki za cierpliwość.



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

Strefa czasowa: UTC + 1


Kto przegląda forum

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