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][Gcc]Przerwania, freemodbus port.

__Maciek__ 14 Maj 2009 14:00 1697 2
REKLAMA
  • #1 6529074
    __Maciek__
    Poziom 20  
    Witam.
    Mam oto takie pytanie ponieważ nie znalazłem jednoznacznej informacji ( może słabo szukałem ... )
    Otóż w demonstracyjnych procedurach portu freemodbus dla AVR jest tak oto rozwiązany problem sterowania przepływem w sieci RS485 ( samo wyłącznie nadawania ) :
    
    #ifdef RTS_ENABLE
    SIGNAL( SIG_UART_TRANS )
    {
        RTS_LOW;
    }
    #endif


    I teraz pytanie Co jeśli koniec wysyłania nastąpi w momencie wystąpienia sekcji krytycznej ?
    cli() ; 
    ( sekcja krytyczna )
    sei();

    ( freemodbus używa sekcji krytycznych, mój program równierz )

    Według tego co znalazłem w opisie biblioteki avrgcc to stracę to przerwanie, ale nie jestem tego na 100% pewien.

    Fakt faktem że urządzenie funkcjonuje poprawnie, ale zdarza się że zablokuje kanał transmisji i trzeba całość restartować i wydaje mi się że to właśnie przegapienie tego fragmentu może być przyczyną.
  • REKLAMA
  • #2 6529105
    _Robak_
    Poziom 33  
    Oczywiscie ze po sei(); przerwanie sie wykona. Wiekszym problemem nie jest sprawdzic w symulatorze :>
  • #3 6529106
    BoskiDialer
    Poziom 34  
    Przerwanie jest wywoływane jeśli jest ustawiona odpowiednia flaga w rejestrze io (wyjątkiem jest tylko INT od poziomu). Przerwania nie są gubione, co najwyżej mogą być opóźnione względem wystąpienia zdarzenia. Nawet jedno przerwanie może przyblokować inne, wtedy po zakończeniu jednej funkcji przerwania zostanie wykonana jedna instrukcja kodu właściwego po czym nastąpi przejście do kolejnego przerwania. Wyjątkiem od tego, to kiedy jawnie w sekcji krytycznej kasuje się flagę przerwania (wpisując w odpowiednie miejsce jedynkę) - wtedy zdarzenie traktuje się jako obsłużone. Innym wyjątkiem, to kiedy układ sam skasuje flagę od przerwania, co może się zdarzyć np po wpisaniu bajtu do nadajnika uartu (wtedy flaga UDRE jest kasowana).
REKLAMA