logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

PROGMEM i tablica stringow

wladziu22 01 Lut 2012 07:24 1642 6
REKLAMA
  • #1 10477955
    wladziu22
    Poziom 17  
    Witam,

    Mam problem z użyciem tablicy stringów umieszczonej w ROMie ATmega8.
    Definiuję ją tak:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    a uzywam ją w funkcji wypisującej na LCD-2x16:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    gdzie wypiszNaLCD_ROM ma ciało:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Efekt jest taki: na wyświetlaczu wygląda to jakby wszystkie inne zdefiniowane stringi z ROM zostały wypisane.

    Dodam ze jeśli dodam pojedyncze teksty w ROM np:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    i wypisze na LCD ta samą funkcją - wypiszNaLCD_ROM(), wszytko gra i buczy jak powinno. Oczywiście mógłbym zadeklarować kolejnych 7 stringów (rozbić tablicę stringów na pojedyncze stringi) no ale tak nie chce, bo przecież po co tak robić jak można prościej.


    Proszę o pomoc w tej sprawie.
  • REKLAMA
  • Pomocny post
    #2 10477981
    Konto nie istnieje
    Poziom 1  
  • REKLAMA
  • Pomocny post
    #3 10478051
    tmf
    VIP Zasłużony dla elektroda
    C trzyma stringi w postaci nullz, terminatorem stringa jest 0, tak samo w twojej funkcji wyświetlającej. Problem w tym, że w 2 bajtach masz dane i brak miejsca na 0. C nie zgłasza w takiej sytuacji błędu, gdyż semantycznie taki zapis jest poprawny. Więc tak jak kolega powyżej możesz zwiększyć wymiar tablicy lub wiedząc, że każdy string ma tylko 2 litery po prostu przerobić pętlę tak, aby wyświetlała tylko dwa znaki i nie czekała na 0.
  • REKLAMA
  • REKLAMA
  • Pomocny post
    #6 10482347
    mirekk36
    Poziom 42  
    kiziu13 napisał:
    A nie jest czasem tak, że tablice stringów muszą być inaczej deklarowane, żeby siedziały w PROGMEMie?


    Nie jest tak. Zwróć uwagę na różnicę między definicją tablicy wskaźników do stringów a definicją tablicy stringów. Tobie się właśnie to pomyliło.

    char *tab[] to nie to samo co char tab[]

    Tablica wskaźników do stringów musiałaby być inicjalizowana jak w podanym przez ciebie linku we wspomnianej sekcji. Natomiast tablica stringów może być definiowana jak w tym temacie, tyle że trzeba pamiętać o miejscu na znak NULL na końcu stringa, co zostało podpowiedziane autorowi wątku.
REKLAMA