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

tablica stałych w obszarze pamieci programu avrstudio

lukasb9 24 Gru 2006 21:03 1657 5
REKLAMA
  • #1 3366857
    lukasb9
    Poziom 28  
    Posty: 1421
    Pomógł: 56
    Ocena: 70
    Witam moje pytanie jest proste ale efektywnej odpowiedzi nie znalazłem, programuje procesor atmega8 w jezyku C w kompilatorze avrstudio, napisałem sobie podprogram generujacy znaki na wyswietlaczu LCD, problem w tym że musze wywoływać "piszznak(tu numer znaku)"dla każdej literki co przy komunikatach długosci 10 literek gmatwa strasznie program...mógłbym zapisać tablice z tymi literkami na samym poczatku potem tylko w petli wywoływac mój podprogram z odpowiednik znakiem z tablicy, ale jak zapiasć taka tablice w pamieci programu? znalazłem jeden post, gdzie ktoś radzi zrobic cos takiego:

    #include <avr/pgmspace.h>
    prog_char Cyfry[16] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//przykładowe dane

    odczyt tablicy i wyswietlenie znaku:

    piszznak(PRG_RDB (&Cyfry[i]);

    ale moje avrstudio kiedy próbuje skompilowac program z takimi wstawkami sie zawiesza?!? dlaczego?, ewentualnie prosze o rade jak inaczej zapisać te dane w pamieci programu
  • REKLAMA
  • #2 3371235
    GienekS
    Poziom 32  
    Posty: 1971
    Pomógł: 139
    Ocena: 15
    lukasb9 napisał:
    piszznak(PRG_RDB (&Cyfry[i]);
    Tutaj brakuje Ci jednego zamykajacego nawiasu ")"
  • REKLAMA
  • #3 3375612
    lukasb9
    Poziom 28  
    Posty: 1421
    Pomógł: 56
    Ocena: 70
    fakt ale nie w tym rzecz...., edytowałem kod przed wklejeniem stad ta głupota.... zreszta kompilator nie zgłasza błedu składni on sie wiesza, musze zamykac aplikacje, po usunieciu tych linijek jest wszystko ok kompiluje sie
  • REKLAMA
  • #4 3375663
    zerpo
    Poziom 22  
    Posty: 463
    Pomógł: 50
    Ocena: 134
    Może spróbuj jakoś zadeklarować tą tablicę np. jako unsigned char
    A tą tablice odczytywać tak:
    piszznak(pgm_read_word (&Cyfry[i])); 

    Tylko zgaduję...
  • REKLAMA
  • #5 3375717
    Tdv
    Poziom 34  
    Posty: 2237
    Pomógł: 150
    Ocena: 55
    lukasb9 napisał:
    Witam moje pytanie jest proste ale efektywnej odpowiedzi nie znalazłem, programuje procesor atmega8 w jezyku C w kompilatorze avrstudio, napisałem sobie podprogram generujacy znaki na wyswietlaczu LCD, problem w tym że musze wywoływać "piszznak(tu numer znaku)"dla każdej literki co przy komunikatach długosci 10 literek gmatwa strasznie program...mógłbym zapisać tablice z tymi literkami na samym poczatku potem tylko w petli wywoływac mój podprogram z odpowiednik znakiem z tablicy, ale jak zapiasć taka tablice w pamieci programu? znalazłem jeden post, gdzie ktoś radzi zrobic cos takiego:

    #include <avr/pgmspace.h>
    prog_char Cyfry[16] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//przykładowe dane

    odczyt tablicy i wyswietlenie znaku:

    piszznak(PRG_RDB (&Cyfry[i]);

    ale moje avrstudio kiedy próbuje skompilowac program z takimi wstawkami sie zawiesza?!? dlaczego?, ewentualnie prosze o rade jak inaczej zapisać te dane w pamieci programu


    A co zwróci składnia &Cyfry[i] skoro zmienna Cyfry[] jest w pamięci flash? Dostęp do pamięci FLASH jest zupełnie inny niż do SRAM, czy takie przywołanie wskaźnika jest na pewno prawidłowe?
REKLAMA