Witam.
Mam następujący problem. Postanowiłem zrobić sobie własny protokół komunikacji za pomocą UART, którego chciałbym używać do komunikacji między Atmegami. Do testów posłużyłem się projektem Pana Mirka wyjaśniającym działanie bufora cyklicznego. Zmodyfikowałem go nieco do swoich potrzeb i pojawił się problem... modyfikacja polegała na tym, że w przerwaniu wywoływanym po odebraniu danych przez procesor, dodałem flagę która przyjmuje wartość 1 w momencie gdy odebrany bajt wskazuje na koniec sekwencji nadawania - jeżeli tak, drugie przerwanie pochodzące od timera może użyć bufora w którym znajdują się odebrane dane. Założeniem tego mechanizmu było zapewnienie pracy na buforze odbiorczym tylko w przypadku gdy zawiera dane zebrane pomiędzy bajty "FRAME_START" oraz "FRAME_STOP". Problem polega na tym, że w przerwaniu od timera, wspomniana flaga nie jest prawidłowo sprawdzana w warunku "if". Wiem to, bo wyrzuciłem wartość flagi na wyświetlacz - jeżeli w przerwaniu jest wspomniany if - flaga ma cały czas wartość 1 (ustawioną w prawidłowy sposób po pierwszej "paczce danych"), a funkcja w warunku nie wykonuje się. Jeżeli zakomentuję wspomnianego if - na wyświetlaczu widać zmianę tej zmiennej i funkcja z przerwania wykonuje się...
Nie mam już pomysłu gdzie jest problem
Proszę o jakieś sugestie - poniżej fragmenty kodu:
plik mkuart.c:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
plik mkuart.h:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
plik main.c:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.