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 - USART: Jak poprawnie odbierać i zapisywać ciągi znaków?

AnarH 15 Sie 2015 19:25 1275 8
REKLAMA
  • #1 14923308
    AnarH
    Poziom 9  
    Posty: 13
    Witam, mam problem przeszukałem wiele forów i próbowałem kilku sposobów. Może ktoś mi doradzi, więc mam problem z zapisaniem ciągu znaków w Atmedze (tzn. odbieranie). Wiem że należy zastosować najlepiej tablice do tego celu.

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • Pomocny post
    #2 14923469
    piotrva
    VIP Zasłużony dla elektroda
    Posty: 6409
    Pomógł: 625
    Ocena: 735
    Kawałek kodu masz mocno namieszany, nie masz funkcji odczytującej daną z uartu - pokaż większy fragment kodu.

    ogólnie:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #3 14923502
    AnarH
    Poziom 9  
    Posty: 13
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • #4 14923525
    piotrva
    VIP Zasłużony dla elektroda
    Posty: 6409
    Pomógł: 625
    Ocena: 735
    to od razu w tym przerwaniu zapisuj dane do bufora i je analizuj.
  • #5 14923969
    Fredy
    Poziom 27  
    Posty: 915
    Pomógł: 117
    Ocena: 28
    if(odebrana_dana ==! 0) // jezeli dana nie jest zerem

    czy nie ładniej byłoby:

    if(odebrana_dana =! 0) // jezeli dana nie jest zerem
  • REKLAMA
  • #6 14924477
    xE5150
    Poziom 25  
    Posty: 789
    Pomógł: 56
    Ocena: 82
    Fredy napisał:
    if(odebrana_dana ==! 0) // jezeli dana nie jest zerem

    czy nie ładniej byłoby:

    if(odebrana_dana =! 0) // jezeli dana nie jest zerem


    Może i ładniej, ale lepiej tak:

    if (odebrana_dana != 0) // jezeli dana nie jest zerem
  • REKLAMA
  • #7 14924500
    dondu
    VIP Zasłużony dla elektroda
    Posty: 13906
    Pomógł: 1292
    Ocena: 809
    Fredy napisał:
    czy nie ładniej byłoby:
    if(odebrana_dana =! 0) // jezeli dana nie jest zerem


    miałeś na myśli: !=

    dlatego:

    xE5150 napisał:
    Może i ładniej, ale lepiej tak:

    if (odebrana_dana != 0) // jezeli dana nie jest zerem


    a najprościej tak:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • #8 14924776
    Fredy
    Poziom 27  
    Posty: 915
    Pomógł: 117
    Ocena: 28
    Dokladnie tak Dondu, chyba te upaly daja o sobie znac. :D
  • #9 14925365
    AnarH
    Poziom 9  
    Posty: 13
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Mój kod. Dziękuje wszystkim bardzo za pomoc ;)

Podsumowanie tematu

LABEL_AI_GENERATED
W dyskusji poruszono problem odbierania i zapisywania ciągów znaków w mikrokontrolerach Atmega za pomocą interfejsu USART. Użytkownik zwrócił uwagę na błędy w kodzie, w tym niepoprawne warunki sprawdzające oraz brak funkcji do odczytu danych. Uczestnicy sugerowali użycie bufora do przechowywania odebranych danych oraz implementację przerwania (ISR) do obsługi odbioru. Podano przykłady kodu, w tym zabezpieczenia przed przepełnieniem bufora oraz poprawne warunki sprawdzające, co pomogło użytkownikowi w rozwiązaniu problemu.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA