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



Teraz jest 18 mar 2026, o 17:41


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 6 ] 
Autor Wiadomość
PostNapisane: 29 gru 2015, o 15:54 
Offline
Nowy

Dołączył(a): 15 gru 2015
Posty: 3
Pomógł: 0

Witam

Mam następujący problem. Korzystam z biblioteki do USARTu opracowanej przez Pana Mirka. Staram się ją odpowiednio edytować pod własne potrzeby. Wiem, że w założeniach tej biblioteki każda ramka danych powinna zakończyć się znakiem enter. Niestety w moim przypadku muszę przyjąć założenie, że ramkę danych kończy znak, który się zmienia. Za to do odczytania zawsze mam równo 5 znaków. Zmienną ascii_line zatem inkrementuję w momencie gdy reszta z dzielenia tmp_head przez 5 jest równa 0. Wszystko działa jak należy do momentu gdy dojdę do końca bufora, wówczas odczytuję ramkę w sposób niewłaściwy tj. przesuniętą. Przykładowo jeśli mam UART_RX_BUF_SIZE=32 to mogę odebrać poprawnie 6 ramek każda po 5 znaków. Jeśli ustawię UART_RX_BUF_SIZE=8 to tylko jedną.
Jak można temu zaradzić?

Pozdrawiam



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 gru 2015, o 00:51 
Offline
Użytkownik

Dołączył(a): 13 lut 2015
Posty: 99
Pomógł: 6

Ja bym zostawił przerwanie w spokoju i w pętli głównej ładował ramki do drugiego bufora liniowego.

_________________
AVR-UART-lib
AVR-FAST-ENCODER
RFM7x-lib



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 gru 2015, o 17:41 
Offline
Użytkownik

Dołączył(a): 16 maja 2012
Posty: 349
Lokalizacja: Legnica
Zbananowany użytkownik

Pomógł: 23

No ale bufor cykliczny nie ma w zasadzie początku ani końca. Jego wielkość powinna być tak dobrana aby zapobiec utracie danych przy współpracy systemów o różnych prędkościach przetwarzania. Nie bardzo widzę w czym jest problem. Robisz bufor 5-cio bajtowy jako jedna ramka do niego ładujesz dane z bufora cyklicznego o wielkości jaka jest potrzebna do płynnej pracy układu. Czyli magazynem ramek będzie bufor cykliczny z którego będziesz pobierał 5-cio bajtowe ramki. Nie ma znaczenia czy bufor cykliczny jest podzielny przez jakąkolwiek liczbę. Zaproponowany przez Mirka bufor cykliczny ma rozmiar 2^n ze względu na sprytny sposób zapętlenia bufora ale zmieniając sposób obsługi można stworzyć bufor o dowolnym rozmiarze.

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 gru 2015, o 19:42 
Offline
Nowy

Dołączył(a): 15 gru 2015
Posty: 3
Pomógł: 0

Z tego co rozumiem w przerwaniu jeśli napotkam znak enter to inkrementuję zmienną ascii_line. Sygnalizuję tym, że nastąpił koniec ramki. Zatem jak zasygnalizować koniec ramki jeśli nie mogę zrobić tego poprzez konkretny znak, a chciałbym to zrobić po odebraniu piątego znaku. Przesyłam kod pliku main, biblioteka od UART bez zmian.

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: 30 gru 2015, o 22:20 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 mar 2014
Posty: 1475
Pomógł: 167

Jeżeli chcesz nadal wykorzystywać bufor cykliczny, to możesz przy dodawaniu i odczytywaniu danych stosować także dodatkową zmienną licznik. Jak zapisujesz coś do bufora, to go zwiększasz a jak odczytujesz to zmniejszasz. Dzięki niemu będziesz mógł sprawdzać sobie jaką masz aktualną zajętość.

Nic nie stoi na przeszkodzie byś też mógł wyliczać zajętość bufora na bieżąco na podstawie wartości head i tail.

--
Pozdrawiam,
Robert


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 gru 2015, o 00:35 
Offline
Nowy

Dołączył(a): 15 gru 2015
Posty: 3
Pomógł: 0

Wprowadzenie oddzielnej zmiennej licznik zamiast wyliczania reszty z dzielenia tmp_head przez 5 rozwiązało problem. Dziękuję za wszystkie porady.



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: 6 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 2 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:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO