eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronikaAVR - przerwania zewnętrzne, usypianie i budzenieRe: AVR - przerwania zewnętrzne, usypianie i budzenie
  • Data: 2013-02-22 00:26:44
    Temat: Re: AVR - przerwania zewnętrzne, usypianie i budzenie
    Od: Michoo <m...@v...pl> szukaj wiadomości tego autora
    [ pokaż wszystkie nagłówki ]

    On 21.02.2013 18:46, Atlantis wrote:
    > W dniu 2013-02-20 23:56, DJ pisze:
    >
    >> Tak musisz program przemyśleć żeby miał okazję resetować watchdoga, jako
    >> objaw normalnej pracy. Np przerwaniami z timerów, czy czegokolwiek
    >> innego co występuje zawsze częściej niż okres watchdoga.
    >> Jeśli chcesz uśpić uC na amen na 30 minut, bo np po takim czasie
    >> przjdzie Ci INT0/1, to watchdoga w tym czasie użyć nie możesz.
    >
    > Czyli tak jak myślałem... Czy w takim razie duże jest zagrożenie
    > zawieszeniem się uC w trybie uśpienia?

    Jeżeli projekt jest poprawnie zaprojektowany to nie istnieje ryzyko
    "zawieszenia".

    Przykład 1 - Czytasz dane z GPS po UART i zapisujesz na kartę.
    - Procesor po starcie resetuje zewnętrzne urządzenia i przeprowadza
    inicjalizację.
    - Procesor przechodzi w tryb IDLE.
    - Przerwania UART powodują pakowanie bajtów do bufora i sparsowanie
    wiadomości po \n.
    - Przerwanie zegarowe rozpoczyna zapis na kartę po SPI.
    - Przerwania obsługują transmisję po SPI.
    - Jeżeli nie będzie przez dłuższy czas komunikacji od GPS, albo zamrze
    komunikacja z kartą watchdog wywoła reset pozwalając.

    Szablon wygląda +- tak:
    main(){
    if(watch_dog_reset){
    report_error();
    GPS->force_reset();
    CARD->force_reset();
    }
    GPS->setup();
    CARD->setup();
    //...
    for(;;)
    sleep();
    }

    Przykład 2 - czekasz na naciśnięcie przycisku i otwierasz zamek jeżeli
    się zgadza karta.
    - Procesor po starcie resetuje zewnętrzne urządzenia i przeprowadza
    inicjalizację.
    - Procesor przechodzi w tryb STANDBY.
    - Jedynym zdarzeniem na które czeka procesor jest przycisk, więc wd jest
    wyłączony.
    - W czasie kiedy następuje komunikacja z kartą włączasz wd.

    Szablon wygląda +- tak:
    main(){
    if(watch_dog_reset){
    report_error();
    cleanup();
    }
    BTN1->setup();

    for(;;){
    sleep();
    wd_enable();
    CARD->setup();
    if(CARD->verify_access()){
    DOOR->open();
    busy_wait();
    DOOR->close();
    }
    wd_disable();
    }
    }
    --
    Pozdrawiam
    Michoo

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: