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

[Atmega8][C/Linux] Przerwania sprzętowe i funkcje

brzydal91 18 Kwi 2011 12:49 1365 10
REKLAMA
  • #1 9414109
    brzydal91
    Poziom 12  
    Witam. Próbuję nauczyć się korzystać z przerwań. Napotkałem taki oto problem. W moim programie mam funkcję która wczytuje określoną ilość bajtów z USART by wydać odpowiedni rozkaz. Kiedy funkcja ta "trwa" czyli czeka aż wpiszę te bajty do terminala to przerwania nie działają albo mikrokontroler nie odbiera w ogóle tych bajtów. Ktoś wie jak to zrobić? Mój kod wygląda następująco:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    Funkcja USART_Receive_Bytes ma dwa argumenty, pierwszy to ilość bajtów do odebrania a drugi to bajt stopu czyli jeśli wprowadzony bajt będzie równy temu podanemu jako argument to funkcja przestaje pobierać dalej informacje.
    Sęk w tym że przerwanie działa jak wyłączę tę funkcję a funkcja działa jak wyłączę przerwanie. Takie błędne koło. Pozdrawiam
  • REKLAMA
  • REKLAMA
  • REKLAMA
  • REKLAMA
  • #6 9414786
    Konto nie istnieje
    Konto nie istnieje  
  • #8 9416473
    dondu
    Moderator na urlopie...
    brzydal91 napisał:
    Kiedy funkcja ta "trwa" czyli czeka aż wpiszę te bajty do terminala to przerwania nie działają

    Jeżeli dobrze przeanalizowałem Twój kod to przerwanie działa prawidłowo, a problem leży w kodzie. Dlaczego?

    Bo:
    - przerwanie prawidłowo ustawia flaga=1
    - ale program czeka w pętli: while (!(UCSRA & (1<<RXC)) );
    - więc nie może dojść do miejsca, w którym flagę sprawdzasz: if(flaga == 1)

    Czy napisałem zrozumiale?
  • #11 9417521
    Konto nie istnieje
    Konto nie istnieje  
REKLAMA