Elektroda.pl
Elektroda.pl
X
Elektroda.pl
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[atmega][c] - odczyt tablicy dwuwymiaraowej z pamięci falsh

03 Lip 2014 22:26 1353 6
  • Poziom 14  
    Witam, mam problem z odczytem tablicy dwuwymiarowej wysłanej do funkcji.
    Próbowałem już na kilka kombinacji ale nie mam już pomysłu i pewnie robi gdzieś błąd. Chodzi mi o to jak zadeklarować odpowiednio funkcje , jak wywołać w main(dokładnie jak zapisać argument) i jak to odczytać w funkcji.

    tablica zapisana w pamięci flash
    Kod: c
    Zaloguj się, aby zobaczyć kod



    funkcja;
    Kod: c
    Zaloguj się, aby zobaczyć kod


    i main;
    Kod: c
    Zaloguj się, aby zobaczyć kod


    Pewnie chodzi o wskaźnik na wskaźnik tylko nie bardzo wiem jak to użyć.
    Chodzi mi o to żeby za pomocą jednej funkcji można było wyświetlać różne obrazy ( tablice) zapisane w pamięci flash.

    Pozdrawiam.
  • Moderator Mikrokontrolery Projektowanie
    A nie prościej po prostu przesłać jako argument samą tablicę? Przecież nazwa tablicy sama w sobie jest wskaźnikiem.
    Kolejna rzecz - nie używaj prog_char i kolejna - użyj __flash i wywal te pgm_read_xx.
  • Poziom 14  
    tmf napisał:
    Kolejna rzecz - nie używaj prog_char i kolejna - użyj __flash i wywal te pgm_read_xx.


    Niestety nie wiem jak użyć tego "__flash" , potrzebna mi jakaś konkretna biblioteka poza pgmspace?

    Posiłkuje się user-manual dostępnym m.in tutaj

    Przy funkcji takiej, czyli gdy odczytuje tablice w funkcji a nie przesyłam za pomocą argumentu wszystko ładnie działa.
    Kod: c
    Zaloguj się, aby zobaczyć kod


    Ale dalej, mimo różnych kombinacji nie potrafię przesłać tej tablicy.
    Poza tym jak powinna wyglądać prawidłowo zadeklarowana funkcja w której elementem jest moja tablica ? nie pasuje "grafika", "*grafika" ani "**grafika" bo przy każdym sposobie mam ostrzeżenie w main: "passing argument 5 of 'lcd65_pic' from incompatible pointer type"
  • Specjalista - Mikrokontrolery
    Podaj w deklaracji funkcji typ argumentu dokładnie taki, jak w deklaracji tablicy - z wymiarami, a przynajmniej z drugim wymiarem.
  • Poziom 14  
    BlueDraco napisał:
    Podaj w deklaracji funkcji typ argumentu dokładnie taki, jak w deklaracji tablicy - z wymiarami, a przynajmniej z drugim wymiarem.

    Działa, dziękuję, ale wychodzi na to że mogę tak przesłać tablicę tylko jeśli podam jej rozmiar w deklaracji, a w moim założeniu chciałem przesyłać za pomocą funkcji dowolną tablice dwuwymiarową, o różnych wymiarach.
  • Poziom 25  
    jui napisał:
    Działa, dziękuję, ale wychodzi na to że mogę tak przesłać tablicę tylko jeśli podam jej rozmiar w deklaracji, a w moim założeniu chciałem przesyłać za pomocą funkcji dowolną tablice dwuwymiarową, o różnych wymiarach.

    Przecież przesyłasz:
    w1=y2-y1
    w2=x2-x1
    Poza tym rozmiar i tak musisz podać w deklaracji (tablicy). Chyba że zrobisz tablice dynamiczne.
  • Specjalista - Mikrokontrolery
    A skąd niby funkcja miałaby znać drugi rozmiar? Pierwszego nie musi, ale żeby policzyć adres elementu trzeba pomnożyć pierwszy indeks przez długość wiersza.

    Inny sposób - traktować tablicę zawsze jako jednowymiarową i podawać jako argument długość wiersza, a wewnątrz funkcji używać tab[wiersz * dlugosc_wiersza + kolumna].