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



Teraz jest 16 kwi 2024, o 15:34


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 12 ] 
Autor Wiadomość
PostNapisane: 16 lut 2018, o 22:26 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 17 lut 2013
Posty: 148
Lokalizacja: KTT
Pomógł: 1

Witam,
Ostatnio testuję drukarkę termiczną z kasy fiskalnej. Piszę do niej bibliotekę i utknąłem na funkcji drukującej tekst z pamięci flash.
Funkcja
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
drukująca tekst z RAM-u działa w porządku, ale coś mnie przyćmiło przy przerabianiu jej na funkcję
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
drukującej tekst z PROGMEM.


Pewnie chodzi o jakąś pierdołę w zapisie... Czy ktoś coś podpowie, naprowadzi na właściwy trop?

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

_________________
Gordon



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 lut 2018, o 22:48 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 19 cze 2014
Posty: 820
Lokalizacja: Tam gdzie PYRY są
Pomógł: 64

gordon10 napisał(a):
// warning wywala przy probie zapisania do wskaźnika znak = (adres pierwszego znaku stringa z flash)


Nie bardzo wiem jak robisz, że Tobie nie wychodzi?? Robisz tak??

znak=pgm_read_byte(str);

_________________
IntegraMETEO
WordCLOCK
IntegraTOUCH



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 lut 2018, o 08:20 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 17 lut 2013
Posty: 148
Lokalizacja: KTT
Pomógł: 1

gordon10 napisał(a):
Nie bardzo wiem jak robisz, że Tobie nie wychodzi?? Robisz tak??

znak=pgm_read_byte(str);


Właśnie tak zrobiłem i wywala warning:
warning: assignment makes pointer from integer without a cast

_________________
Gordon



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 lut 2018, o 08:43 
Offline
Użytkownik

Dołączył(a): 01 lis 2013
Posty: 302
Pomógł: 32

Witaj,

A tak nie było by dobrze ?

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

_________________
Pozdrawiam,
sq8mvy, Paweł



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 lut 2018, o 08:47 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 17 lut 2013
Posty: 148
Lokalizacja: KTT
Pomógł: 1

gordon10 napisał(a):
A tak nie było by dobrze ?

void tprint_print_str_P (int x, const char * str)

Właśnie taką postać ma funkcja docelowa. Wcześniej wkleiłem funkcję drukującą string z pamięci RAM.

------------------------ [ Dodano po: 5 minutach ]

OK. wklejam funkcję docelową (drukującą z PROGMEM).

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


w linii: znak = pgm_read_byte(str); wywala warning: assignment makes pointer from integer without a cast
pewnie dlatego, że chodzi o to, żeby do wskaźnika 'znak' zapisać adres pierwszego elementu drukowanego stringa a nie wartość tego elementu.

------------------------ [ Dodano po: 19 minutach ]

Przy takim zapisie:
znak = pgm_read_byte(&str);
też wywala warning:
warning: assignment makes pointer from integer without a cast

_________________
Gordon



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 lut 2018, o 09:21 
Offline
Użytkownik

Dołączył(a): 01 lis 2013
Posty: 302
Pomógł: 32

Witaj,

Ach, z tą spacją po * się zapędziłem....

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

Znak, czy wskaźnik do znaku ?

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

_________________
Pozdrawiam,
sq8mvy, Paweł



Ostatnio edytowano 17 lut 2018, o 09:46 przez gizmo5418, łącznie edytowano 2 razy

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 lut 2018, o 09:31 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 17 lut 2013
Posty: 148
Lokalizacja: KTT
Pomógł: 1

Ta spacja po * nie ma znaczenia...

------------------------ [ Dodano po: 8 minutach ]

Już chyba mam to :)

chodziło o magiczny zapis:
znak = pgm_read_ptr(str);

później przetestuję na żywym organizmie.

_________________
Gordon



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 lut 2018, o 12:55 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 17 lut 2013
Posty: 148
Lokalizacja: KTT
Pomógł: 1

No niestety... nie drukuje nadal. Chyba coś jeszcze skopałem. Chociaż warningu już nie wywala.

_________________
Gordon



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 lut 2018, o 18:01 
Offline
Użytkownik

Dołączył(a): 07 cze 2016
Posty: 563
Pomógł: 143

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


Gdyby Cię to interesowało, to w poniższym poradniku masz opisane w jaki sposób napisać jedną funkcję, która obsłuży jednocześnie dane z pamięci RAM i z pamięci FLASH.

_________________
AVR-GCC - dane w pamięci FLASH


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 lut 2018, o 18:44 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 17 lut 2013
Posty: 148
Lokalizacja: KTT
Pomógł: 1

No racja kolego andrews :)
Skupiłem się na tej jednej linijce ze wskaźnikiem znak=...., a reszta jakoś tak umknęła...
Jak usiądę do sprzętu to sprawdzę i dam znać czy hula.

_________________
Gordon



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 lut 2018, o 20:36 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 17 lut 2013
Posty: 148
Lokalizacja: KTT
Pomógł: 1

No niestety. Też to nie działa. Drukuje całkiem pustą linię. Coś tu cholewa jeszcze pewnie umknęło po drodze...

------------------------ [ Dodano po: 46 minutach ]

Działa działa :):):)
Wcześniej zapomniałem zmienić jeszcze tą linijkę: znak = pgm_read_ptr(str); na taką jak podpowiedział andrews: znak = str;

Tylko jeszcze mała zagadka. Teraz działa, ale pokazuje warning
warning: assignment discards 'const' qualifier from pointer target type
Dlaczego i jak go zlikwidować?

------------------------ [ Dodano po: 52 minutyach ]

ok przy deklaracji dopisałem const i warning zniknął
const char * znak;

Trochę już mózg mi się przegrzał i przestaję czaić dlaczego to tak musi być, ale tak to jest jak do programowania się siada raz na jakiś czas. Najważniejsze, że działa.

Dzięki andrews. Będę musiał prześledzić twój poradnik i przerzucić się na kwalifikator __flash.

_________________
Gordon



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 lut 2018, o 21:53 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 17 lut 2013
Posty: 148
Lokalizacja: KTT
Pomógł: 1

Jeszcze mały problem widzę z przesuwaniem tekstu na pozycję x. Może jutro nad tym posiedzę. Teraz chyba czas na mały reset ;)

_________________
Gordon



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 4 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