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



Teraz jest 30 lis 2024, o 05:12


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 17 ] 
Autor Wiadomość
PostNapisane: 3 cze 2015, o 22:19 
Offline
Użytkownik

Dołączył(a): 16 sty 2012
Posty: 78
Pomógł: 1

Próbuję analizować kod i zrozumieć jak działa sterowanie wyświetlacza LEDowego ...
Poczytałem trochę w niebieskiej książce ... trochę zaczynam rozumieć ... no to mówię wgram sobie sobie do mikrokontrolera na próbę przykład z płyty: 04_LED.
Znalazłem erratę Mirka odnośnie kodu w pliku lcd44780.c i podmieniłem na poprawiony ...
Zrobiłem sobie płytkę do testów na Atmega 8 z LCD na której uruchomiłem kilka prostych programików i działa bez zarzutu.
Niestety przy próbie skompilowania przykładu ( kod jest dziewiczy , czyli taki jak go stworzył Mirek ) otrzymuję błędy i niestety na razie nie potrafię ich usunąć bo nie wiem za bardzo co oznacza komunikat kompilatora . Wytłumaczcie mi proszę o co chodzi jeśli ktoś kuma o co chodzi z tym komunikatem kompilatora :

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=atmega8 -DF_CPU=8000000UL -MMD -MP -MF"main.d" -MT"main.d" -c -o "main.o" "../main.c"
../main.c:17:14: error: variable 'tab1' must be const in order to be put into read-only section by means of '__attribute__((progmem))'
../main.c:22:9: error: variable 'znak_buzka' must be const in order to be put into read-only section by means of '__attribute__((progmem))'
../main.c:23:9: error: variable 'znak_termo' must be const in order to be put into read-only section by means of '__attribute__((progmem))'
../main.c: In function 'main':
../main.c:36:2: warning: passing argument 1 of 'lcd_str_P' discards 'const' qualifier from pointer target type [enabled by default]
In file included from ../main.c:11:0:
../LCD/lcd44780.h:172:6: note: expected 'char *' but argument is of type 'const char *'
make: *** [main.o] Błąd 1

A tutaj część kodu której dotyczą błędy wykryte przez kompilator:

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: 3 cze 2015, o 22:26 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 02 sty 2014
Posty: 39
Lokalizacja: Pszczyna
Pomógł: 4

Nowy toolchain Atmela wymaga dopisku "const" przy elementach pobieranych z pamięci flash np:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Dopisz const do wszystkich elementów z dopiskiem PROGMEM.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 cze 2015, o 23:04 
Offline
Moderator
Avatar użytkownika

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

tomek napisał(a):
Wytłumaczcie mi proszę o co chodzi jeśli ktoś kuma o co chodzi z tym komunikatem kompilatora :

Jak rozumiem masz jedno z NAJSTARSZYCH wydań książki, minęło już MNÓSTWO czasu od jej wydania - i WSZYSTKO poszło do przodu. Tak więc mamy już nowszy toolchain czyli kompilator, nowsze eclipse itd itp ....

żeby nadążyć możesz pójść dwoma drogami:

1. Samemu naprawiać błędy (które wynikają z tego że używasz teraz nowszego toolchaina w porównaniu do tego ze starej książki) na podstawie poradników z mojego bloga - zajrzyj sobie pan np tutaj: http://mirekk36.blogspot.com/2012/08/ec ... zytaj.html

2. albo dokupić sobie np przynajmniej samą płytkę DVD z nowszego wydania książki w naszym sklepie www.sklep.atnel.pl ... bo na niej już są kody uaktualnione do nowszego toolchaina

czytaj generalnie mojego bloga - inne poradniki z "kącika języka C" szczególnie i oglądaj inne moje poradniki na YT ....

_________________
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 cze 2015, o 23:27 
Offline
Użytkownik

Dołączył(a): 16 sty 2012
Posty: 78
Pomógł: 1

szymon12w napisał(a):
Nowy toolchain Atmela wymaga dopisku "const" przy elementach pobieranych z pamięci flash np:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Dopisz const do wszystkich elementów z dopiskiem PROGMEM.


próbowałem już dopisać const zanim napisałem na forum. niestety błąd nie znika ....



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 cze 2015, o 23:29 
Offline
Moderator
Avatar użytkownika

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

tomek napisał(a):
niestety błąd nie znika

Znika znika - tylko musisz chcieć poczytać ten link na bloga co ci podałem

_________________
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 cze 2015, o 23:54 
Offline
Użytkownik

Dołączył(a): 16 sty 2012
Posty: 78
Pomógł: 1

mirekk36 napisał(a):
tomek napisał(a):
Wytłumaczcie mi proszę o co chodzi jeśli ktoś kuma o co chodzi z tym komunikatem kompilatora :

Jak rozumiem masz jedno z NAJSTARSZYCH wydań książki, minęło już MNÓSTWO czasu od jej wydania - i WSZYSTKO poszło do przodu. Tak więc mamy już nowszy toolchain czyli kompilator, nowsze eclipse itd itp ....



Dokładnie .. Nie pamiętasz ... jak kiedyś "marudziłem" że książka nie jest zszywana i pewnie mi się rozleci ? ... ;-)
Mam wydanie I z roku 2011 . Dostałem potem od Ciebie zniżki na książki dla kumpli ale oni też kupili w tym okresie co ja więc płyty mają te same ...
Z prostymi błędami dzięki temu co wyczytałem z Twoich książek ( zieloną też zakupiłem ) jakoś tam sobie radzę ale teraz nie wiem jak to przejść ...
Nie chcę raczej kupować "gotowca" bo nic się z tego nie nauczę jak wklepię gotowy kod .... ale dzięki za linka poczytam najpierw ....

Próbowałem też trochę zaglądać do wnętrza itoa() którą używasz do konwersji z hex na stringi przy funkcji wyświetlającej znaki na LCD.
Potrzebuję wyświetlać bardzo duże liczby ( unsigned long ) i próbuję na bazie Twoich bibliotek opanować wyświetlanie i napisać obsługę wyświetlania
która będzie zawierała tylko proste wyświetlanie cyfr o wielkości rzędu 50 000 000.
Walka z problemami jakie wynikają z problemów składni której nie toleruje jak piszesz nowa wersja kompilatora jeszcze niestety mnie przerastają ....



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 cze 2015, o 00:20 
Offline
Moderator
Avatar użytkownika

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

itoa() - to Integer to ASCII

więc nie wyświetlisz tak dużej liczby

zainteresuj się więc podmianą tej funkcji na

ltoa() - czyli LONG Integer to ASCII

albo

utoa() - Unsigned Long to ASCII itp ;)

_________________
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: 4 cze 2015, o 11:15 
Offline
Użytkownik

Dołączył(a): 16 sty 2012
Posty: 78
Pomógł: 1

Tak tak już ... "przeryłem" trochę wnętrze : stdlib.h ;) i dotarłem ltoa i utoa ... Generalnie potrzebuję wyświetlać dziesiętnie na LCD liczby zapisane na 4 bajtach w hexa ....
Zanim trafiłem na itoa() i jej starszych braci próbowałem sam pisać algorytm funkcji do takiej konwersji ... to dobra gimnastyka dla umysłu tym bardziej że w zależności od tego na jakim poziomie programowania jesteś można napisać działające algorytmy mniejsze lub większe jeśli chodzi o kod ....
Ale to nie ma praktycznego sensu bo rzadko kiedy jesteśmy w stanie dogonić zawodowych programistów którzy zęby zjedli na pisaniu optymalnego kodu ...
Dziś świąteczny dzień i teoretycznie trochę wolniejszego czasu ... więc zaraz wchłonę to co podałeś mi linku ....
A swoją drogą dla Mirek jesteś tytan pracy ...kiedy to z tym wszystkim nadążasz ..... :shock:



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 cze 2015, o 11:32 
Offline
Moderator
Avatar użytkownika

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

tomek napisał(a):
.kiedy to z tym wszystkim nadążasz .....

sam się wciąż zastanawiam :lol:

_________________
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: 4 cze 2015, o 12:13 
Offline
Użytkownik

Dołączył(a): 16 sty 2012
Posty: 78
Pomógł: 1

Nauczyłem się od Ciebie wielu fajnych rzeczy jeśli chodzi o C i programowanie przez te parę lat ale teraz widząc ile spraw ogarniasz na co dzień jednocześnie, sumienie nie pozwala mi pisać do Ciebie wprost z prośbą o porady bo wiem jaki masz program dnia ..... Na szczęście na forum jest wielu mądrych a jednocześnie życzliwych osób które chętnie pomogą i naprowadzą .....
A swoją drogą Twoja Żonka to złota kobietka bo wiadomo: praca pracą .... zysk zyskiem ... ale zawsze wtedy Rodzinka spychana jest mówiąc naszym slangiem "na stos" hehe i " obsługiwana w przerwaniach " :lol:



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 cze 2015, o 16:28 
Offline
Moderator
Avatar użytkownika

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

tomek napisał(a):
hehe i " obsługiwana w przerwaniach "

:lol: :lol: nie ma to jak elektroniczne określenia .... ale fakt .... żona jest w stanie wiele mi wybaczyć w tym zakresie ... i pomaga mi dużo

_________________
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: 4 cze 2015, o 17:25 
Offline
Użytkownik

Dołączył(a): 16 sty 2012
Posty: 78
Pomógł: 1

no to jesteś prawdziwym szczęściarzem w takim razie :D ale przepraszam za ten off topic i wracam już do bajtów ..... mam chwilę to poczytam materiały z linków od Ciebie i dam znać czy opanowałem błędy kompilatora w nowej wersji ....
odpaliłem Juno i chyba ostatni toolchain Atmela ...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 cze 2015, o 21:17 
Offline
Użytkownik

Dołączył(a): 16 sty 2012
Posty: 78
Pomógł: 1

poczytałem i już kumam ... poprawiłem treść ćwiczenia, dałem swoje dane na port wyświetlacza i wszystko ładnie się wyświetla z wszystkich rodzajów pamięci .... teraz zacznę kombinować z utoa() i usunę funkcje które do mojego wyświetlania nie będą potrzebne .... zobaczymy czy gra będzie warta świeczki czyli na ile zmniejszy się objętość skompilowanego kodu ....



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 cze 2015, o 23:10 
Offline
Moderator
Avatar użytkownika

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

tomek napisał(a):
i usunę funkcje które do mojego wyświetlania nie będą potrzebne

Nie rób tego bo to nie ma najmniejszego sensu, to się robi ustawieniem dla kompilatora ... Sam w tej chwili jestem na wyjeździe i z pamięci ci tego nie powiem. W najnowszym wydaniu Bluebooka - jest to DOKŁADNIE opisane (gdzie ustawić i co w opcjach projektu) i kompilują się TYLKO te funkcje które biorą udział w programie, a te które leżą odłogiem kompilator wyrzuca jak śmieci w trakcie kompilacji ;) ..... Więc ręczne dzierganie tego nie ma najmniejszego sensu.

_________________
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: 5 cze 2015, o 07:13 
Offline
Użytkownik

Dołączył(a): 16 sty 2012
Posty: 78
Pomógł: 1

Jasne .... Moim zdaniem stworzyłeś bardzo zwięźle i bardzo dobrze dobrze napisany kod. Pewnie nawet sam Pan Bóg nie wiele tu poprawi żeby kod był bardziej optymalny.
Doskonale pomaga ogarnąć i dostosować kompilację system opcji zero - jedynkowych. Taki sposób podejścia pozwala też łatwiej zrozumieć jak działa cały mechanizm, bo i ja bez problemu to ogarnąłem .... :D
I tego ani nie kwestionuję bo to bardzo dobra i przemyślana ze wszech miar robota i się nie "czepiam" .... :D
Ale ja się tego uczę, i chciałem porobić doświadczenia...... "po swojemu" spróbować dostosować mechanizmy które stworzyłeś do moich stosunkowo prostych potrzeb.
Buduję sobie proste urządzenie ( jak zrobię to się pochwalę ;) ) którego parametry pracy mają być wyświetlane na LCD. Przyciski do sterowania mają działać interaktywnie czyli od razu po zmianie dowolnego parametru za pomocą przycisku, nowa wartość zostaje przesłana jako dyspozycja do układu wykonawczego i wyświetlacz od razu zostaje aktualizowany na bieżąco.
Ale nie ma to się robić "bezmyślnie w kółko" tylko obsługa będzie za pomocą przerwań.
Jak zrobię to się postaram "pochwalić" jak już będzie wszystko działało ... Kombinowanie nad tym sterowaniem i wyświetlaniem sprawia mi przyjemność. Pewnie jakby dobrze poszukał znalazłbym czy u Ciebie czy gdzieś w sieci gotowe rozwiązania jak to u mnie zrobić ale bardziej mi zależy żeby samemu ruszyć głową, nawet jeśli to co zrobię będzie prymitywne z punktu widzenia rasowego programisty .....
Kiedyś trochę miałem do czynienia z klasycznym C więc teraz problem sprawia mi może nie sama składnia ale to że C dla mikrokontrolerów cały czas ewoluuje co widzę właśnie chociaż po tym
że ten sam kod kompilatory z różnych okresów traktują w inny sposób. Poza tym piszemy tu na mikrokontrolery więc sama obsługa peryferiów czy interfejsów robi się bardzo dedykowana dla konkretnej rodziny scalaków ... Komunikaty błędów najczęściej są logiczne i pomagają znaleźć przyczynę jak się trochę poruszy szarymi komórkami ale w tym przypadku teraz jak ja miałem bez Twojej i kolegów z forum pomocy pewnie bym się zniechęcił i kręcił w kółko bo przecież kod napisałeś prawidłowo .....
Skoro jesteś na "łikendowym" wyjeździe ... to miłego relaksu i odpoczynku do "prądów" całej Rodzince :lol: :lol: :lol:



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 cze 2015, o 07:21 
Offline
Moderator
Avatar użytkownika

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

poczekaj może mnie źle zrozumiałeś - mi ABSOLUTNIE nie chodziło o to żeby ni e eksperymentować we własnym zakresie czy coś. ABSOLUTNIE nie chodziło mi o to żeby powiedzieć, że biblioteki z książek są najoptymalniejsze na świecie bo tak wręcz nie jest. Sporo kodu jest przedstawione w najprostszy sposób - tak żeby można go było lepiej zrozumieć .... więc własne zmiany i modyfikacje są wręcz zalecane ;)

Mi TYLKO chodziło o zwrócenie uwagi na taką fajną opcję optymaizacji, która wywala wszystkie zbędne funkcje, bo to się bardzo bardzo przydaje

_________________
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: 5 cze 2015, o 12:59 
Offline
Użytkownik

Dołączył(a): 16 sty 2012
Posty: 78
Pomógł: 1

Nie bądź taki skromny Mirku .... :D
Ale żeby nie być gołosłowny skoro mówisz o "prostocie" kodu dam Ci przykład czego się od Ciebie uczę ....
Wybrałem przykładową prostą fukcję żeby na niej wytłumaczyć o co mi chodzi ...
przykładowo:

void lcd_cursor_off(void)
{
lcd_write_cmd( LCDC_ONOFF|LCDC_DISPLAYON);
}
#endif

Jasne że funkcja jest prosta ... ale ja początkujący napisałbym coś w tym klimacie :
np.
void lcd_cursor_off(void)
{
mode= LCDC_ONOFF|LCDC_DISPLAYON
lcd_write_cmd(mode);
}
#endif
Pomijam deklaracje zmiennych itd bo nie o to teraz chodzi ...
Czyli najpierw bym policzył a potem dopiero wynik wstawił .... bo dla początkującego tak jest logiczniej ...
Nie przyszłoby mi nie do głowy że można to zapisać krócej i bardziej optymalnie .....
Dlatego właśnie próbuję kombinować "po swojemu" bo a nuż widelec uda mi się coś wymyśleć od siebie ....
Ale generalnie lubię Twoje książki właśnie z tego powodu że jest tam wiele przykładów kodu z opisem jak działa i do tego
analizując kod uczę się myśleć bardziej w języku C nabierając dobrych nawyków a mniej na sposób "ludzki" ....



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

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 0 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:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO