Hej,
wyposażyłem się w BB i ogólne działanie bufora cyklicznego rozumiem, natomiast mam problem z wizualizacją tego/wyobrażeniem sobie poruszania się tych wskażników Head i Tail.
Z góry proszę o wyrozumiałość, jeżeli popełniam straszny błąd. Trochę nad tym już siedzę i nie umiem tego do końca pojąć
Fragment zapisu danych do bufora w przerwaniu odbiorczym z BB:
zakładam dla prostoty, że bufor ma 8bajtów, czyli:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Początkowo zarówno Head i Tail są równe(bufor jest pusty), czyli wskazują na np. UART_RxBuf[0]. Jeżeli zostaje coś zapisane do bufora to wykonuje się ta znana funkcja:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Moje rozumowanie: Jeżeli zostanie załadowany jakiś bajt do bufora to zostanie on załadowany do UART_TxBuf[1], ze względu na zwiększony o +1 indeks Head. Gdy zostanie załadowany nie jeden, a siedem bajtów to załadowane zostaną te bajty do:
UART_RxBuf[1], UART_RxBuf[2],UART_RxBuf[3].....UART_RxBuf[7]. Rozumiem działanie maskowania, które spowoduje, że przy próbie załadowania kolejnego bajtu wskaźnik nam powróci na początek i będzie wskazywał na UART_RxBuf[0].
PYTANIE: Załóżmy, że pętla główna programu była ciągle zajęta i program nie zdążył odczytać żadnego bajtu z bufora, więc wskaźnik TAIL stale wskazuje na UART_RxBuf[0]. Wydaje się, że w tym momencie wskazują na to samo miejsce w tablicy bufora, więc nie będzie można załadować tego kolejnego bajtu, ale przecież załadowaliśmy tylko 7 bajtów do bufora 8 bajtowego pozostawiając UART_RxBuf[0] pusty. Oznacza to, że tak naprawdę możemy załadować tylko 7 bajtów do bufora 8 bajtowego? Gdzie w moim rozumowaniu jest błąd?
![Obrazek](https://obrazkiforum.atnel.pl/thumb/19707/6804d788428a47c0c8b1346630965e82.png)
Dla dopełnienia dodam tylko, że funkcja odbiorcza pierwsze co robi to sprawdza, czy Head i Tail sa sobie rowne - jeżeli tak, to uważa, że bufor jest pusty.