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

[avr] funkcja atoi nie chce dzialac w atmedze

misiolowaty 03 Maj 2011 13:20 2964 8
REKLAMA
  • #1 9464582
    misiolowaty
    Poziom 13  
    Programuję sobie radośnie atmegę 32 w języku C. Staram się sterować portem (akurat upatrzyłem sobie PORTA) poprzez RS232. Komunikacja mi chodzi poprawnie (program testowy odsyła odebrany tekst)

    Wysyłać będę 1 znak (0...9) poprzez uart. Procesor zamienia tekst na wartość int za pomocą funkcji atoi() i tą wartość wypluwa na port gdzie podłączyłem diodki.

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


    oczywiście w przerwaniu gdy pominę funkcję atoi() i będzie tam samo :

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


    to przychodząca wartość wpada na port, ale nie jest to wartość liczby, tylko odpowiadająca jej liczba w asci...
  • REKLAMA
  • REKLAMA
  • #3 9464648
    misiolowaty
    Poziom 13  
    nie, nie, nie.

    itoa() - zamienia int na char
    atoi() - zamienia czar na int i to to powinno byc uzyte, bo w koncu przez rs wysyla sie char..
  • REKLAMA
  • #5 9464691
    misiolowaty
    Poziom 13  
    już dorzuciłem przy includach:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    nic to nie zmieniło :/
  • REKLAMA
  • #6 9464719
    janbernat
    Poziom 38  
    Może jednak wskaźnik na UDR?
    int atoi ( const char * s )
  • #7 9464727
    misiolowaty
    Poziom 13  
    eeeee, nie rozumiem wogóle linijki, którą napisałeś. to jest... no właściwie nie wiem co to jest. Bo to ze specyfikacji jak widze. Oznacza z tego co mi się wydaje, ze wynik funkcji atoi jest int, a argumentem ma byc char.
  • Pomocny post
    #8 9464739
    syslawek
    Poziom 14  
    Jeśli dobrze rozumiem, to odbierasz jedną cyfrę (w postaci kodu ASCII), a wysłać chcesz jeden bajt z wartością tej cyfry, tak?

    W takim przypadku atoi() jest zupełnie bezużyteczne, jako że służy do konwersji łańcuchów znaków do odpowiadających im liczb typu int.

    Moim zdaniem, w twoim przypadku w zupełności wystarczy coś takiego:

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


    Jeśli od kodu ASCII pewnej cyfry odejmiesz kod ASCII zera, to dostaniesz to, czego szukasz.
  • #9 9464760
    misiolowaty
    Poziom 13  
    syslawek jesteś geniuszem!!!! Obserwowałem, że kolejne cyfry maja klejne kody asci, ale na to nie wpadłem. Zamykam temat, problem rozwiązany. Dzięki!!!!!!!
REKLAMA