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

KURS HOME ASSISTANT

Chcesz zautomatyzować swój dom bez skomplikowanego kodowania?
Zastanawiasz się nad wyborem sprzętu, oprogramowania i aplikacji?
Od czego zacząć przygodę z HA? Co będzie najlepsze na start?

Nasz kurs Home Assistant nauczy Cię krok po kroku, jak łatwo zautomatyzować swój dom i oszczędzić na rachunkach za prąd i ogrzewanie. Bez chmur, bez zbędnych abonamentów. Twoja przygoda z Home Assistant zaczyna się tutaj!

↓↓↓

    Szanujemy Twoją prywatność. Możesz wypisać się w dowolnym momencie.




    Teraz jest 10 lip 2025, o 16:04


    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: 158
    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 ] [ Zaznacz wszystko ]
    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: 158
    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: 301
    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: 158
    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 ] [ Zaznacz wszystko ]
    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: 301
    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: 158
    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: 158
    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: 158
    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: 158
    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: 158
    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 9 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