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

Suma kontrolna w Bascom (asembler)

Paszko 26 Mar 2004 23:16 3913 11
REKLAMA
  • #1 566564
    Paszko
    Poziom 12  
    Witam!

    Moj problem. Chce, zeby dwa mikrokontrolery komunikowały się między sobą po RS-232. Ramka danych składać ma się z ośmiu bajtów danych.

    Komunikacja ta ma byc możliwie odporna na zakłucenia.

    Myślę, że stosowne jest zastosowanie czegoś w rodzaju sumy kontrolnej.
    Moja prośba dotyczy gotowej procedurki w BASCOM lub ASM do obliczenia takiej sumy oraz sposobu jej wykorzystania.

    Wszelkie inne sugestie mile widziane.
    Pozdrawiam

    Przeniesiono z Programowanie Ogólne. - arnoldziq
  • REKLAMA
  • #2 566751
    elektryk
    Poziom 42  
    Jak transmisja ma mieć możliwość samonaprawienia to poszukaj opisu do kodów hamminga, jeśli tylko wykrywać uszkodzenie danych to możesz zrobić sume modulo 2 wszystkich bajtów. Jeśli ma to być jeszcze bardziej bezpieczne to niestety trzeba urzyć sum CRC (np crc32) niestety one wprowadzają nawet 4 bajty dodatkowych danych, więc na początek zrob zwykłą sume xor.
  • REKLAMA
  • #3 566756
    Paszko
    Poziom 12  
    To znaczy co mam konkretnie zrobic i jak?

    Co to znaczy "zrób sumę XOR"?

    Moze jakis przyklad.

    Prosiłbym tez o wyjaśnienie dokladniej metod obliczania "czegokolwiek" proponowanego dalej.

    Pozdrawiam
  • REKLAMA
  • #4 566844
    BoskiDialer
    Poziom 34  
    Paszko napisał:
    Ramka danych składać ma się z ośmiu bajtów danych.


    czyli jak? 8 bajtów danyh + bajt/bajty sumy kontrolnej?

    najprostszą sumą kontrolną (stosowaną w plikah .hex) jest dodawanie wszystkih bajtów, i zanegowanie... taka suma jest wystarczająca

    jak w temacie piszesz "Bascom albo asembler" to powiedz przynajmniej na jakiego procka to chcesz.
  • #5 567041
    Paszko
    Poziom 12  
    Program pisze na 89c4051.

    Ma byc osiem bajtow danych, a ile kontrolnych to juz chyba zalezy od zastosowanej metody kontroli poprawnosci wysłania tych danych.

    Wiec, mam po prostu dodac wszystkie te osiem bajtow i ta sume zanegowac i wyslac to jako 9 bajt. i w odbiorniku to samo i porownac z tym 9 odebranym?

    Czy to na pewno jest wystarczajace?

    ps. wystarczy stwierdzenie ze transmisja nie jest prawidlowa

    Dzieki za wszelkie sugestie
  • REKLAMA
  • #6 568227
    radek.kaba
    Poziom 15  
    Paszko napisał:
    Wiec, mam po prostu dodac wszystkie te osiem bajtow i ta sume zanegowac i wyslac to jako 9 bajt. i w odbiorniku to samo i porownac z tym 9 odebranym?

    Przy takim obliczaniu sumy kontrolnej, wystarczy w odbiorniku dodać 9 bajtów - jak wyjdzie 0FFh to ok. Jeżeli przy nadawaniu odejmiesz od bajtu sumy kontrolnej 1 - to w odbiorniku tylko sprawdzisz czy suma 9-ciu bajtów równa się 0 (łatwiej).
  • #7 568426
    BoskiDialer
    Poziom 34  
    radek.kaba napisał:
    Jeżeli przy nadawaniu odejmiesz od bajtu sumy kontrolnej 1 - to w odbiorniku tylko sprawdzisz czy suma 9-ciu bajtów równa się 0 (łatwiej).

    Raczej po dodaniu 1 do sumy podczas nadawania... wtedy wyjdzie 0!
    jak odejmiesz 1 to suma 8 bajtów i sumy kontrolnej wyniesie 0feh

    Paszko napisał:
    ps. wystarczy stwierdzenie ze transmisja nie jest prawidlowa

    Jeśli zakłucenia wystąpią (o ile wogule wystąpią) podczas nadawania bitów danyh (nie bitu startu i nie bitu stopu) to dane przesyłane mogą uledz zmianie.
    Najłatwiejsza pierwszożędna metoda ochrony przed zakłuceniami to kabel ekranowany.
  • #8 568683
    radek.kaba
    Poziom 15  
    Cytat:
    Raczej po dodaniu 1 do sumy podczas nadawania... wtedy wyjdzie 0!
    jak odejmiesz 1 to suma 8 bajtów i sumy kontrolnej wyniesie 0feh

    Oczywiście !, chyba za długo wczoraj pracowałem... :wink:

    ps. Była zmiana czasu, a na Elektrodzie nadal po staremu...
  • #9 568721
    BoskiDialer
    Poziom 34  
    Aha... jeszcze jedno.. lepiej podczas nadawania nieedodawać tej jedynki do sumy.. przypuśćmy że jakieś ciekawe zakłucenia spowodują transmisje 9 bajtów o wartości 0... wtedy transmisja będzie uznana za poprawną. podczas gdy bez dodawania tej jedynki do sumy wystąpi odrzucenie pakietu ponieważ wystąpi wartość 00h zamiast 0ffh
  • #10 568905
    Paszko
    Poziom 12  
    Dzieki za wszelkie sugestie.

    kabel ekranowany bedzie, ale mimo wszystko chcę to jakoś zabezpieczyc.

    Pozdrawiam :wink:
  • #11 578564
    ucy74
    Poziom 20  
    Ja, w Bascomie dodawałem poszczególne bajty do siebie a potem ałość dzieliłem modulo przez 255 i to było dodatkowym bajtem sumy kontrolnej. Działa z zewnętrznymi (nie pisanymi przeze mnie) aplikacjami, więc chyba dobrze działa ;-)
  • #12 581175
    BoskiDialer
    Poziom 34  
    jak jusz to modulo 256.. a pozatym to jest to samo co dodawanie z przepełnieniem... jak do x o wartości 255 dodasz 1 to wynik będzie wynosił 0 (zmienna 8 bitów)...(natomiast bit C będzie ustawiony).. odrazu mówie.. modulo 256 z bajtu jest stratą cykli, miejsca w programie, a pozatym nic niedaje (to tak jak dodawanie zera)
REKLAMA