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

AVR-GCC - dostęp do programowego bufora kołowego

robiw 26 Cze 2014 22:17 1401 3
REKLAMA
  • #1 13745264
    robiw
    Poziom 26  
    Witam,
    Sprawa jest zapewne trywialna, jednak nie mogę sobie wyjaśnić typowego, prezentowanego w książkach itp., rozwiązania dostępu do programowego bufora kołowego. Jak wiadomo zawsze definiowane są 2 indexy: bieżącego miejsca zapisu do bufora (np. bufferWriteTo) i bieżącego miejsca odczytu z bufora (np. bufferReadFrom). Mimo, że niejednokrotnie używałem tej konstrukcji, zastanawia mnie czemu np.: operacja zapisu wygląda tak, że najpierw inkrementowany jest indeks zapisu a dopiero w to nowe miejsce zapisywana jest dana, np. Buffer[++bufferWriteTo] = Dana. Podobnie przy odczycie, najpierw inkrementowany jest indeks a później pobierana dana spod tego indeksu. Czemu w ten sposób? Wydaje się, że indeks w obu przypadkach powinien być postinkrementowany a nie preinkrementowany. Jakieś sensowne wytłumaczenie? robiw
  • REKLAMA
  • #2 13745501
    tadzik85
    Poziom 38  
    Index ma być inkrementowany tak by zawsze wskazywał na aktualna daną. zapis inkrementalna.
    odczyt inkrementacja.

    Wyobraź sobie ze próbujesz dostać się 2 wątkiem do bufora w momencie miedzy zapisem a inkrementacją indexu.

    A to czy index wskazuje na ostatnią zapisaną, czy na 1 wolna komórkę, to kwestia implementacji.
  • REKLAMA
  • #3 13745693
    BlueDraco
    Specjalista - Mikrokontrolery
    Nie ma sensownego wytłumaczenia. Modyfikacja indeksu powinna następować po transferze danej - tylko wtedy można zagwarantować poprawne działanie bufora przy różnych priorytetach kodu zapisującego i odczytującego bez użycia sekcji krytycznych. Jeśli modyfikujesz indeks przed transferem danych - musisz blokować przerwania lub w inny sposób zagwarantować niepodzielność obu operacji.

    Tzn. właściwe jest wytłumaczenie - autor kodu uznał, że "na ogół działa". ;)
  • #4 13746270
    robiw
    Poziom 26  
    Też tak myślałem tworząc swoje rozwiązanie bufora oparte na tablicy struktur (akurat taka była potrzeba), dlatego też zastanawiało mnie tego typu rozwiązanie, zwłaszcza, że pokazane w książce. W sumie, w przypadku, gdy jest to wykonywane w ISR, to w niczym nie przeszkadza, ale wydaje się dość dziwne. Pozdrawiam... robiw
REKLAMA