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

[c] [atmega32] - Wskaźniki na tablice i ich wyłuskiwanie

Tomq 19 Cze 2014 21:44 1158 5
REKLAMA
  • #1 13722886
    Tomq
    Poziom 38  
    Chciałbym utworzyć wskaźnik na tablice, żeby ten wskaźnik umieścić w funkcji przerwania UARTu. W pętli głównej podstawiałbym pod ten wskaźnik różne tablice, które chciałbym wysłać. Mam jednak problem z prawidłowym przypisaniem tablicy do wskaźnika na nią lub z prawidłowym pobieraniem zmiennych ze wskaźnika.


    Zadeklarowałem tablice:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Następnie wskaźnik:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod



    W "main" przypisałem adres tablicy do wskaźnika:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    I teraz wg mnie używając wskaźnika "tablica" mam dostęp do tablicy "cyfry". Więc w przerwaniu chciałbym to po kolei powysyłać UARTem każdy jej elment:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    Ale na komputerze dostaje:
    C0
    00
    00
    00
    00
    00
    00
    00
    00
    00
    00


    Pierwszy element się zgadza, a potem same zera. Cała reszta kodu jest 100% poprawna, bo gdy użyję samej tablicy zamiast wskaźnika na nią:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
    to na terminalu w komputerze dostaje wypisane wszystkie jej wartości po kolei (C0, F9, A4, B0, 99, 92, 82, F8, 80, 90, 0).


    Co jest nie tak?
  • REKLAMA
  • Pomocny post
    #2 13722943
    excray
    Poziom 41  
    tablica = &cyfry; ??
    Moim zdaniem albo
    tablica = cyfry;
    albo
    tablica = &cyfry[0];
  • REKLAMA
  • Pomocny post
    #3 13722950
    tronics
    Poziom 38  
    Cytat:
    unsigned char (*tablica)[11

    Źle używasz wskaźnika, ot co jest nie tak. Zauważ, że wskaźnik jak nazwa zobowiązuje wskazuje adres pierwszego elementu tablicy cyfry. Inkrementując wskaźnik przesuwasz się po kolejnych adresach, kolejnych elementach tej tablicy.

    @excray, ekspertem nie jestem, ale sama nazwa tablicy jest wskaźnikiem iirc więc jednakowy jest zapis *cyfry jak i cyfry[0] czyli tak jak piszesz, trzeba się na jedno zdecydować :)
  • REKLAMA
  • Pomocny post
    #4 13723050
    tadzik85
    Poziom 38  
    To ze instrumentujesz wskaźnik na tablice a nie jej element.
  • REKLAMA
  • Pomocny post
    #5 13723055
    krru
    Poziom 33  
    Bo zrobiłeś wskaźnik na _całą_ tablicę i wyświetla ci pierwsze elementy kolejnych tablic.
REKLAMA