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

Atmega 8 - Jak stworzyć wydajny protokół komunikacji po RS232?

phanick 13 Lis 2013 21:13 1836 4
REKLAMA
  • #1 12948992
    phanick
    Poziom 28  
    Potrzebuję stworzyć wydajny protokół do komunikacji Atmegi 8 z PC oraz w drugą stronę po RS232. Wiem jak wysyłać pojedyncze bajty. Napisałem też pewien prosty protokół, poniżej kluczowe funkcje (send_packet, receive_packet)

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Czyli w skrócie - protokół składa się z:
    * 4 bajtów synchronizacyjnych (0xAA, 0x55, 0xAA, 0x55)
    * bajtu określającego długość pakietu
    * kolejnych bajtów pakietu
    * bajt zawierający crc z bajtów pakietu oraz długości.


    Po stronie PC napisałem program w C# do odbierania/wysyłania danych.
    W nim są oczywiście funkcje send/receive napisane podobnie jak powyżej na AVR-rze.

    Jaki jest więc problem? Ano taki, że często gubione są bajty (retries dość mocno wzrasta). Czy można jakoś temu zaradzić?
  • REKLAMA
  • #2 12949628
    BlueDraco
    Specjalista - Mikrokontrolery
    Najpierw pomyśl, od czego zaczyna się transmisja. Włączasz urządzenie - i co się dalej dzieje?

    Styl programowania fatalny(zbędne goto), mylące nazwy zmiennych (suma kontrolna xor nazwana "crc", zapewne dla zmylenia przeciwnika), niekonsekwentne typy - char i int zamiast uint8_t.
  • REKLAMA
  • REKLAMA
  • #4 12950020
    excray
    Poziom 41  
    Na chwilę obecną masz program tak skonstruowany że odbierasz dane pomiędzy linijkami programu. Jeśli program nie wykonuje się wystarczająco szybko albo wystąpi jakieś dłuższe przerwanie które go przyblokuje to zgubisz pakiet danych. Proponowałbym Ci zastosowanie bufora kołowego w przerwaniu od odbioru i w wątku głównym czytanie danych z tego bufora. Poza tym popraw detekcję ciągu 0xAA, 0x55.
  • #5 15641679
    phanick
    Poziom 28  
    Wina leżała po stronie przejściówki RS232->USB firmy Profilec, którą używałem. Przy podłączeniu do starego komputera z natywnym RS232 problem nie występował.
REKLAMA