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

[ATMEGA32][C] USART - Odbieranie danych w przerwaniu

A.T. 12 Maj 2012 23:39 1736 5
REKLAMA
  • #1 10890098
    A.T.
    Poziom 20  
    Witam
    czy może ktoś spojrzeć na ten prosty kod i powiedzieć gdzie tkwi problem. Gdy wysyłam jakiś znak z klawiatury przez Hyper-Terminal, to procesor ma go od razu zwrócić, a on zwraca jakieś dziwne znaczki. Dodam, że w obsłudze przerwania występuje takie ostrzeżenie przy kompilacji: "usart.c:60: warning: passing argument 1 of 'USART_puts' makes pointer from integer without a cast".
    Tylko nie wiem o co w nim chodzi, wszystkie typy zmiennych się zgadzają.
    Pozdrawiam
    A.T.

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #2 10890249
    stanleysts
    Poziom 27  
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #3 10890257
    kiziu13
    Poziom 17  
    Zakładając, że konfiguracja USARTa jest w porządku, to problemem są typy. Próbujesz użyć funkcji wysyłającej ciąg znaków do wysłania pojedynczego znaku. Opcje masz dwie: w przerwaniu odbierzesz znak, wpiszesz go do to tablicy o minimum 2 elementach (drugi element to null character) i podasz do funkcji _puts (BTW nazwa pochodzi od PUT String), albo skorzystasz z funkcji _transmit, która wysyła tylko jeden znak.

    EDIT: co do odpowiedzi użytkownika stanleysts, to oczywiście masz rację, ale tak na prawdę to nic to nie zmienia w kodzie i nic nie rozwiązuje, bo oczywiście chodzi o inkrementację wskaźnika, a nie inkrementację wartości, która jest w tym wypadku bezsensowna.
  • REKLAMA
  • #4 10890268
    stanleysts
    Poziom 27  
    zgadza się
  • REKLAMA
  • #5 10890419
    krru
    Poziom 33  
    A.T. napisał:
    Dodam, że w obsłudze przerwania występuje takie ostrzeżenie przy kompilacji: "usart.c:60: warning: passing argument 1 of 'USART_puts' makes pointer from integer without a cast".
    Tylko nie wiem o co w nim chodzi, wszystkie typy zmiennych się zgadzają.


    Nieprawda, podajesz char tam gdzie powinno być char *.

    Ale po prostu wołasz złą funkcję. W przerwaniu od odbiornika wołaj USART_transmit
    zamiast USART_puts. Ta funkcja właśnie robi to, co potrzebujesz.
  • #6 10890566
    A.T.
    Poziom 20  
    Nie wiem czy mi uwierzycie ale na samym początku spróbowałem USART_Transmit, tak samo rozumowałem, że wysyłam tylko 1 znak, ale wyskakiwało identyczne ostrzeżenie. Próbowałem to na win XP na chyba starszej wersji WinAvr. Teraz spróbowałem z USART_Transmit na najnowszym WinAvr na Win7 64 bit. I nie ma żadnego ostrzeżenia. Czy to mogło być powodem. Do układu program wgram za 2h, dopiero wtedy będę miał pod ręką układ.
    Dziękuję
    Pozdrawiam
REKLAMA