logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Jak wyciąć znaki z danych RS232 na AVR i przesłać dalej?

szaro 13 Kwi 2005 18:40 1712 6
REKLAMA
  • #1 1402402
    szaro
    Poziom 19  
    Posty: 411
    Pomógł: 10
    Ocena: 17
    Witam
    mam pewien problem z napisaniem programu majacego za zadanie przechwycenie a dokladnie wyciecie kilku znakow lecacych po RS232 (powiedzmy bloker :D ) sprzetowo ma to wygladac tak dana wchodz na RX uP i po modyfikacji wychodza TX-em .zastanawialem sie nad buforem ale mnie specjalnie wiem jak go zrealizowac
    Pozdrawiam
  • REKLAMA
  • #2 1402680
    ko_rex
    Poziom 19  
    Posty: 253
    Pomógł: 38
    Ocena: 2
    Napisz ile tych danych chcesz dokładać i jak wygląda ruch na łączu. Pozwoli to oszacować wielkość bufora. A jak go zrobić? Jedno z rozwiązań kogłoby wyglądać tak: gdy nie wstawiamy żadnych danych do łącza, to wysyłamy od razu to, co przychodzi z zewnątrz. Gdy chcemy wstawić dane, to wysyłamy to, co wstawiamy, a to, co przychodzi, wrzucamy do bufora, którego wielkość musi być co najmniej taka, jak ilość danych wstawianych (może okazać się za mała, jeśli często wstawiasz itp...). Pamiętać trzeba tylko, zaby opróżniać ten zapchany bufor.
  • REKLAMA
  • #3 1402709
    szaro
    Poziom 19  
    Posty: 411
    Pomógł: 10
    Ocena: 17
    ale ja niehce wstawiac danych wylko wycinać np.
    mam taki tekst (na RX uP) "Ala ma kota" a ja chce sie pozbyc kota wiec na wyjsciu chce miec "Ala ma" (na TX uP)
  • #4 1402758
    ko_rex
    Poziom 19  
    Posty: 253
    Pomógł: 38
    Ocena: 2
    AAA...no źle przczytałem... przepraszam... Ale to w tym przypadku też da się łatwo zrobić... Trzeba bufor o długości co najmniej takiei jak najdłuższa wycinana sekwencja... Porównujemy ciągle co tam siedzi i wycinamy. A bufor może być cykliczny. Masz jeden wskaźnik, który sobie lata dookoła i najpierw wysyła znak, który wskazuje, a potem wstawia na jego miejsce taki, co przychodzi. Trzeba jaesz tylko sprytnie zrobić porównywanie na takim buforze i już. Problem tylko jest taki, że jak nic nie przychodzi, to w urządzeniu siedzą dane, które warto byłoby wysłać...

    Można jeszcze inaczej. Robimy bufor, ale z dwoma wskaźnikami i dążymy do tego, by był pusty. Jeśli dane przychodzą do nas, to zapełniamy bufor i działamy tak jak wyżej. Jeśli jednak nic nie przychodzi, to wypychamy dane z bufora. W takim przypadku łatwo jest również wycinać dane z bufora, poprzez odpowiedznie manipulacje wskaźników.
  • REKLAMA
  • #5 1403616
    szaro
    Poziom 19  
    Posty: 411
    Pomógł: 10
    Ocena: 17
    pierwsza propozycja jest ok ale tak jak napisales beda zalegac dane a to odpada moze masz jakis przykald gotowego kodu ???
  • REKLAMA
  • Pomocny post
    #6 1408582
    ko_rex
    Poziom 19  
    Posty: 253
    Pomógł: 38
    Ocena: 2
    Hej! Nie było mnie trochę... Ale już piszę...
    Gotowy kod powiadasz... no może bym coś skrobnął, ale napisz w czym Cie to interesuje, no i zachęć jakoś, bo to nakład pracy jest :D.
    Pozdrawiam.
  • #7 1411532
    szaro
    Poziom 19  
    Posty: 411
    Pomógł: 10
    Ocena: 17
    ok juz dziala ,ale dzieki za zainteresowanie a zacheta jest na przyszlosc :D
    Pozdrawiam
    szaro

Podsumowanie tematu

✨ Dyskusja dotyczy problemu wycinania określonych znaków z danych przesyłanych przez interfejs RS232 na mikrokontrolerze AVR oraz przesyłania zmodyfikowanych danych dalej przez TX. Proponowane rozwiązania opierają się na zastosowaniu bufora cyklicznego o rozmiarze co najmniej równym długości najdłuższej sekwencji do wycięcia. Wskazano, że bufor powinien być zarządzany za pomocą wskaźników, umożliwiając porównywanie i usuwanie niechcianych fragmentów danych. Omówiono także problem zalegania danych w buforze i konieczność jego opróżniania, aby zapewnić ciągłość transmisji. Autor ostatecznie potwierdził działanie rozwiązania, choć nie udostępniono gotowego kodu.
Wygenerowane przez model językowy.
REKLAMA