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



Teraz jest 11 kwi 2026, o 13:05


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 5 ] 
Autor Wiadomość
PostNapisane: 2 cze 2014, o 12:50 
Offline
Nowy

Dołączył(a): 07 lut 2014
Posty: 2
Pomógł: 0

Witam serdecznie!
próbuję od paru dni znaleźć błąd w moim kodzie niestety bez skutku dlatego zwracam się do Was drodzy forumowicze!

Napisałem program na atmege8 z odczytywaniem znaków w przerwaniu.
Ramka którą wysyłam z terminala ma postać -12A1234567890ABCDEF zawsze zaczyna się znakiem '-' i zawsze ma taką samą długość. Znaki odbieram pojedynczo, przeliczam aby z ASCII otrzymać liczbę szesnastkową i zapisuję do tablicy zmiennych. Dla sprawdzenia przesyłam zawartość tablicy spowrotem przez rs do PC i tu odkrywam, że nie zawsze dane są w takiej samej postaci jak je przesyłam, np. dla ciągu danych 12A1234567890ABCDEF, otrzymuję np. 12A7890123456ABCDEF. Poniżej kod obsługi przerwania:

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 cze 2014, o 17:58 
Offline
Użytkownik
Avatar użytkownika

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

Jak dla mnie ta obsługa przerwania jest za długa
(tylko ja się dopiero uczę)

jeśli dane są zawsze stałej długości to stworzyłbym tablicę (taki bufor)do
której w przerwaniu odbierałbym tylko znaki i ustawił flagę ,
że wszystkie już odebrane a w pętli głównej po odczytaniu
flagi wszystko przeliczał i zapisał do docelowej tablicy.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 cze 2014, o 09:56 

Pomógł: 0

Totalna masakra ;), w przerywaniu najwyżej umieść flagę która będzie zapalana jak przylatują dane do bufora UDR.
Czyli zasada jest taka, robisz obsługę gdzie masz buffor np. 32znaki do niego automatycznie jest pobierana dana z UDR za każdym razem jak do UDR trafia znak i to procesor robi w przerywaniu tylko.
Następnie robisz potwierdzenie że bufor się zapełnia i sprawdzasz w pętli głównej tą flagę i dopiero jak ona się "zapala" to obsługujesz bufor, dzięki czemu masz bezkolizyjną obsługę uarta.

Masz może książki Mirka?
W zielonej książce jest dobre rozwiązanie twojego problemu. Ewentualnie możesz obejrzeć poradniki na temat calbacków i eventów i samemu spróbować napisać kod.

PS. Kod w przerywaniu ma być jak najszybszy/najkrótszy czyli wykonujący się błyskawicznie by nie blokować głównej pętli programu.



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 3 cze 2014, o 14:33 
Offline
Nowy

Dołączył(a): 07 lut 2014
Posty: 2
Pomógł: 0

Dzięki za pomoc Panowie, zmieniłem kod obsługi przerwania tak aby odbierał tylko znaki i zapisywał je to tablicy, a obliczenia na elementach tej tablicy przeniosłem do pętli głównej. Niestety po kilku testach wynik jest ten sam



Ostatnio edytowano 3 cze 2014, o 14:42 przez wojtawsl, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 cze 2014, o 14:39 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27452
Lokalizacja: Szczecin
Pomógł: 1045

wojtawsl napisał(a):
Pytanie czy dane wysłane w momencie gdy obsługa przerwania była wyłączona zostaną obsłużone w momencie ponownego zezwolenia na obsługę?


No to chyba musiałby być cud :(

koledzy wyżej już pisali - zainteresuj się implementacją buforów cyklicznych do obsługi RS232 bo to jest słuszna droga

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



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 1 gość


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:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO