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

Jak uzyskać dostęp do zmiennej klasy w obsłudze przerwania UART w C++?

rpal 29 Cze 2016 18:46 777 5
REKLAMA
  • #1 15776565
    rpal
    Poziom 27  
    Witam,
    problem dość banalny ale ugrzązłem w nim.
    Deklaruję klasę obsługi rs232 jako obiekt, obsługa nadchodzących danych jest zrealizowana poprzez przerwanie UART i kolejne wypełnienie bufora przez odbierane bajty. Oczywiście bufor danych to zmienna zadeklarowana wewnątrz stworzonej klasy.
    Problem polega na tym, jak z poziomu obsługi przerwania dokopać się do tej zmiennej ?
  • REKLAMA
  • #2 15776613
    excray
    Poziom 41  
    Przez wskaźnik.
  • REKLAMA
  • #3 15776623
    grko
    Poziom 33  
    Obiekt musi być widoczny globalnie albo musisz mieć jakąś funkcję zwracającą adres (albo w C++ referencje) obiektu.

    Więc obsługa przerwana powinna wyglądać mniej więcej tak (bardziej funkcja, która jest wywoływana we właściwym wektorze):

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


    Alco dla C++:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Właściwy wektor przerwania:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #4 15776628
    rpal
    Poziom 27  
    no tak, zapomniałem dodać że chodzi o avr gcc a tam obsługa przerwania nie pozwala na przekazywania innych parametrów niż wektor tego przerwania. W sumie kłopot rozwiązany ale w sposób mało elegancji bo obiekt (powiedzmy rs232) zadeklarowałem jako publiczny jednak nie specjalnie mi się to rozwiązanie podoba.
  • REKLAMA
  • #5 15776636
    grko
    Poziom 33  
    @rpal Wybacz, ale taka jest natura przerwań. Widziałeś gdzieś przerwania, które pobierają parametry? ;) W sumie to wektor przerwania może być funkcją zaprzyjaźnioną klasy. Wtedy będziesz mógł bezpośrednio dobierać się do danych prywatnych. Jednak obiekt (albo referencja do niego) musi być jakoś "dostarczona" do wektora przerwań.
  • #6 15776654
    rpal
    Poziom 27  
    OK. wybaczam :-)
REKLAMA