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



Teraz jest 12 kwi 2026, o 11:34


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 10 ] 
Autor Wiadomość
PostNapisane: 6 gru 2014, o 12:47 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 paź 2013
Posty: 1988
Lokalizacja: Lipsko
Pomógł: 125

Witam,
Kombinował ktoś może z bezpośrednim drukowaniem na ekranie komendą LCD, w której zawarty jest tekst?
Chodzi mi o taki zapis"

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


Wiadomo, że tekst zawarty w cudzysłowie jest we flashu, ale jest on też przepisany do RAM co widać po jego zajętości po kompilacji w ECLIPSE. Czy może się mylę czy coś przeoczyłem? Mam sporo tekstu i nie uśmiecha mi się notować, na kartce nazwy tablicy dla każdego z nich, albo robić bliźniacze nazwy jako wskaźniki, bo mi to strasznie zamiesza w programie.

Ostatecznie pytanie brzmi - Czy można w jakiś względnie prosty sposób zrobić komendę którą zacytowałem, aby tekst w niej zawarty zapakowany był bezpośrednio do flash i nie dublował się później w RAM. Czy może jest tak, że do RAM tekst jest ładowany w ostatniej chwili tuż przed jego wydrukiem chociaż przeczyło by to pokazywanemu w ECELIPSE procentowi zajętości RAM, bo dopisanie każdego kolejnego znaku powiększa tą liczbę. Jak to jest naprawdę z tym przechowywaniem zmiennych w LCD. Dodam, że test lcd_pstr("tekst") nic nowego nie wniósł i jak był RAM zajmowany tak dalej jest.

_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 gru 2014, o 12:59 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 19 kwi 2014
Posty: 438
Lokalizacja: Zambrów
Pomógł: 22

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


Ta funkcja lcd_pstr w sobie musi używać funkcji do odczytu z pamięci FLASH.


Autor postu otrzymał pochwałę

_________________
.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 gru 2014, o 13:16 
Offline
Użytkownik

Dołączył(a): 29 mar 2012
Posty: 595
Lokalizacja: Jaworzno
Pomógł: 39

Nie wiem czy to pomoże, ale jest taka nota ATMELa, która opisuje ciekawe funkcje w tym temacie. ;-) Czytałem to jakieś trzy lata temu, ale nie sprawdzałem w praktyce.
Poszukaj "AVR106: C functions for reading and writing to Flash memory"

_________________
Pozdrawiam
PP



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 gru 2014, o 13:22 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 19 kwi 2014
Posty: 438
Lokalizacja: Zambrów
Pomógł: 22

A tak przy okazji to czym różni się funkcja pgm_read_byte od pgm_read_byte_near? Oraz jak sprawdzić czy napis znajduje się powyżej 64kB, aby zastosować tę ostatnią funkcję?

_________________
.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 gru 2014, o 14:19 
Offline
Moderator
Avatar użytkownika

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

SylwekK napisał(a):
Czy można w jakiś względnie prosty sposób zrobić komendę którą zacytowałem, aby tekst w niej zawarty zapakowany był bezpośrednio do flash i nie dublował się później w RAM.


A zajrzyj w Bluebooku - może ci umknęło - pisałem o funkcjach z suffixem "_P"

czyli zajrzyj co robi i jak robi funkcja:

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


tak samo tworzymy sobie dla UART'a np:

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: 1 minucie ]

SylwekK napisał(a):
Dodam, że test lcd_pstr("tekst") nic nowego nie wniósł i jak był RAM zajmowany tak dalej jest.


bo jak mówię pomyliło ci się troszkę ;) nie lcd_pstr tylko lcd_str_P( PSTR("tekst") ); ... teraz jaśniej ;) i zobaczysz od razu że w pamięci RAM UBĘDZIE bajtów ;)


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: 6 gru 2014, o 14:38 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 19 kwi 2014
Posty: 438
Lokalizacja: Zambrów
Pomógł: 22

Dziękuję Antystatyczny za wyczerpującą odpowiedź :D

_________________
.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 gru 2014, o 18:28 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 paź 2013
Posty: 1988
Lokalizacja: Lipsko
Pomógł: 125

No jasne :) Pamiętałem, że gdzieś to w BB widziałem, ale nie mogłem skojarzyć, że trzeba to w ten sposób ująć... To znak, że jeszcze raz muszę przeczytać wszystko od A do Z, bo o ile podstawy powiedzmy, że mam już za sobą to właśnie na takich drobiazgach (w sumie to też podstawy ;)) się wykładam. To jedna z niewielu rzeczy w C, które z punktu widzenia byłego bascomowca są dość skomplikowana i zawiła w obsłudze, którą staram się uprościć do granic możliwości. Niestety nie wiem jak to w zgrabnej funkcji wszystko podstawiać aby stworzyć sobie kolejną wygodną komendę typu lcd_f("tekst") aby nie wpisywać ciągle PSTR w głębi lcd... Jakoś ze zwykłymi wskaźnikami zmiennych nie mam tyle problemu co z tekstami i po analizie bibliotek za cholerę nie wiem co gdzie i jak przypisać. Może ktoś podsunie jakąś wędkę z przekazywaniem tych parametrów ;)

_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 gru 2014, o 19:36 
Offline
Moderator
Avatar użytkownika

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

SylwekK napisał(a):
Niestety nie wiem jak to w zgrabnej funkcji wszystko podstawiać aby stworzyć sobie kolejną wygodną komendę typu lcd_f("tekst") aby nie wpisywać ciągle PSTR


No ale widzisz - programując w C powoli przywykłeś do niektórych rzeczy w porównaniu do przyzwyczajeń bascoma - zgadza się ?

To teraz pomyśl - z tym PSTR() jest dokładnie tak - że najlepiej - jeśli już w ogóle chcesz stosować literały (czyli stałe dosłowne tekstowe) to ZDECYDOWANIE WARTO używać PSTR() w widoczny sposób w kodzie w C ... bo później od razu wiadomo że chodzi o tekst z FLASH'a rozumiesz ?

Ja przyznam ci że po Bascomie identycznie jak ty próbowałem się pozbyć PSTR() i udało mi się to poprzez zastosowanie dziwnych makr .... ale koniec końców wróciłem do PSTR() tak jak mi radziło wiele osób - i do dzisiaj jadę z tym ;) .... zobaczysz że nawet jeśli sam zakombinujesz to później jak już nasiąkniesz C do końca - to sam wrócisz do normalnych rzeczy jak PSTR() ;)

oczywiście inny normalny sposób to trzymanie tekstów w tablicach .... i wyświetlanie ich tak:

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

_________________
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: 6 gru 2014, o 19:55 
Offline
Użytkownik

Dołączył(a): 20 wrz 2013
Posty: 647
Zbananowany użytkownik

Pomógł: 101

SylwekK napisał(a):
Niestety nie wiem jak to w zgrabnej funkcji wszystko podstawiać aby stworzyć sobie kolejną wygodną komendę typu lcd_f("tekst") aby nie wpisywać ciągle PSTR w głębi lcd...

Zdefiniuj makro np.

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


Trzeba pamiętać o jednym: PSTR wstawi tyle napisów do FLASHa ile razy zostanie użyty w kodzie, nawet jeżeli te napisy będą identyczne.


Autor postu otrzymał pochwałę

_________________
+++++[>++++<-]>[>++++++<-]>.---------.+++.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 gru 2014, o 20:22 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 paź 2013
Posty: 1988
Lokalizacja: Lipsko
Pomógł: 125

mirekk36 napisał(a):
No ale widzisz - programując w C powoli przywykłeś do niektórych rzeczy w porównaniu do przyzwyczajeń bascoma - zgadza się ?

Hehe, czy przywykłem? - to za mało powiedziane :) Jestem w trakcie nowego sterownika do slidera (obecnie przy jego MENU) i już widzę, że mechanizmy z jakich mogę korzystać w C miażdżą bascoma pod wieloma względami po ich bliższym poznaniu, a już o wykonywaniu stu operacji matematycznych w jednej linii w przeciwieństwie gdzie w bascomie można było tylko jedną(!) taką operację przeprowadzić mówią same za siebie.
Z tym PSTR to chyba masz rację, bo po przemyśleniu sprawy jak się odzwyczaję od standardów to może pojawić się później problem z analizą programów pisanych przez innych programistów :)

xor napisał(a):
#define lcd_str_p(s) lcd_str_P(PSTR(s))

Trzeba pamiętać o jednym: PSTR wstawi tyle napisów do FLASHa ile razy zostanie użyty w kodzie, nawet jeżeli te napisy będą identyczne.

To zrozumiałe, gdyby była zdefiniowana tablica wtedy napis byłby tylko raz zdefiniowany, a samo makro bardzo fajne, proste i może go nawet wykorzystam kiedyś, bo chyba o takie coś mi właśnie chodziło, ale jak pisałem wyżej chyba posłucham Mirka, w końcu siedzi w tym dłużej niż ja :D

_________________
http://www.sylwekkuna.com



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

Strefa czasowa: UTC + 1


Kto przegląda forum

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