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

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

jui 03 Lip 2014 22:26 1482 6
REKLAMA
  • #1 13765590
    jui
    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 / C++
    Zaloguj się, aby zobaczyć kod



    funkcja;
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    i main;
    Kod: C / 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.
  • REKLAMA
  • #2 13766186
    tmf
    VIP Zasłużony dla elektroda
    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.
  • REKLAMA
  • #3 13773346
    jui
    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 / 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"
  • #4 13773469
    BlueDraco
    Specjalista - Mikrokontrolery
    Podaj w deklaracji funkcji typ argumentu dokładnie taki, jak w deklaracji tablicy - z wymiarami, a przynajmniej z drugim wymiarem.
  • REKLAMA
  • #5 13779317
    jui
    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.
  • REKLAMA
  • #6 13779480
    el2010tmp
    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.
  • #7 13780619
    BlueDraco
    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].
REKLAMA