Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 24 sty 2025, o 06:19


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 5 ] 
Autor Wiadomość
PostNapisane: 18 sty 2015, o 01:12 
Offline
Nowy

Dołączył(a): 16 lis 2014
Posty: 3
Pomógł: 0

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:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



plik mkuart.h:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


plik main.c:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Ostatnio edytowano 18 sty 2015, o 11:00 przez golytm, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 sty 2015, o 10:14 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 mar 2013
Posty: 739
Lokalizacja: Poznań
Pomógł: 84

Wrzuć kod w znacznikach syntax=c
bo takie są zasady na forum a po drugie nie cały
kod jest widoczny



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 sty 2015, o 11:01 
Offline
Nowy

Dołączył(a): 16 lis 2014
Posty: 3
Pomógł: 0

Przepraszam z tym syntaxem - poprawiłem. Widać cały kod któy wkleiłem - nie chciałem wklejać całego kodu z plików, bo trochę tego jest. Chyba że to pomoże, to oczywiście uzupełnię.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 sty 2015, o 11:26 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 mar 2013
Posty: 739
Lokalizacja: Poznań
Pomógł: 84

co zwraca funkcja receive_status() przy poprawnym statusie
bo jeśli zero to zmienna się nie wyzeruje
ponieważ ten if się nie spełni .

Czy dioda na PB1 mruga ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 sty 2015, o 11:33 
Offline
Nowy

Dołączył(a): 16 lis 2014
Posty: 3
Pomógł: 0

receive_status zwraca 1 jeżeli wykona się poprawnie (i wykonuje się). diada dodana w celach debugowych - żeby zobaczyć jak daleko dochodzi program. Jak usunę całkowicie if(buffer_ready){}, dioda miga, "buffer_ready" zmienia wartości tak jak zmieniać powinno (wyrzuciłem to na wyświetlacz i widzę aktualną wartość tej zmiennej). Jak pozostawię ten felerny if(buffer_ready){}, to pomimo tego że na wyświetlaczu widzę że "buffer_ready" ma wartość 1, to program nie wchodzi do tego warunku ("buffer_ready" pozostaje na wartości 1, dioda nie zmienia stanu).



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 5 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 0 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO