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-23 12:54:08
    Temat: Re: AVR - przerwania zewnętrzne, usypianie i budzenie
    Od: Michoo <m...@v...pl> szukaj wiadomości tego autora
    [ pokaż wszystkie nagłówki ]

    On 23.02.2013 08:59, Atlantis wrote:
    > W dniu 2013-02-22 21:00, Michoo pisze:
    >
    >> Ale czemu atmega miała się zresetować?
    >
    > W powodu watchdoga?

    To jest skutek równoważny z - "dlaczego watchdog zadziałał" - bo coś go
    nie zresetowało, ale dlaczego?

    > Może inaczej. Czy przypadkiem mikrokontrolerowi nie zdarza się czasem
    > (choćby niezmiernie rzadko) zawiesić się, tak po prostu zaprzestać
    > pracy?

    Po odliczeniu błędów zasilania - nie. [1] To by oznaczało, że nie można
    go bezpiecznie używać.


    [1] W teorii możesz mieć przypadek w którym jakiś błąd jest zależny od
    czasu i temperatury, ale prawdopodobieństwo jest minimalne. W praktyce
    zdarza się czasami jakiś błąd w przerwaniach (na krzemie) i w określonym
    przypadku procesor się nie budzi, ale to będzie raczej tylko missed
    interrupt a nie zwis, w bardzo specyficznych warunkach (no i trafi do
    erraty). Może też oberwać cząstką wysokoenergetyczną, ale to raczej na
    orbicie.

    > Jeśli tak, to chodzi mi właśnie o ochronę przed taką sytuacją.

    Taka sytuacja byłaby nielogiczna - na co komu urządzenie, które się
    losowo zawiesza?

    Załóżmy, że masz szansę na zadziałanie w cyklu 6? - to by oznaczało, że
    procesor lecący na 20MHz zawiesza się średnio co 25 sekund...

    > Bo rozumiem, że czasem jakiś niuans w samym kodzie (np. pętla, która w
    > określonych okolicznościach zacznie się wykonywać w nieskończoność) może
    > spowodować zawias, ale to na razie pomijam.

    Błędnie - to jest jedyne z czym się będziesz musiał mierzyć w typowych
    przypadkach.

    >
    >
    >> Oznacza to:
    >> a) błąd w programie. należy go wyeliminować
    >> b) błąd w module albo zakłócenie w komunikacji. stan systemu jest
    >> prawdopodobnie niespójny. Twardy reset jest w takiej sytuacji
    >> najbezpieczniejszym wyjściem.
    >
    > Dla jasności: nigdy takiej sytuacji nie miałem. Nie zdarzyło mi się,
    > żeby moduł albo uC się zawiesił. Wszystkie przypadki, kiedy coś działało
    > nieprawidłowo okazywały się efektem jakiegoś drobnego błędu w programie.

    Oczywiście. Weź tylko pod uwagę, że moduł to też jakiś uC z jakimś
    oprogramowaniem.

    >
    > A co do twardego resetu, to modem D15 nie ma nawet odpowiedniego pinu.

    PMOS na zasilaniu.

    > Jedynym rozwiązaniem z tego co widzę jest odcięcie zasilania, a to mogę
    > zrobić ręcznie.

    W sprzęcie bateryjnym trochę z tym gorzej - dlatego robi się obwód
    resetu na długim przytrzymaniu włącznika.


    >
    >
    >> Ja bym w takim wypadku zrobił sprawdził na ile stan wygląda "dobrze" i w
    >> rzie czego zrobił power-cycle. Skoro był reboot to znaczy, ze coś się
    >> poważnie spieprzyło. Nic ci nie gwarantuje, że moduł będzie po czymś
    >> takim pracował poprawnie.
    >
    > Proces inicjacji modułu GSM oczywiście przeprowadza elementarną
    > diagnostykę, nawet jeśli zastanie go w stanie włączonym.

    A co robi jeżeli uC zwisł w trakcie komunikacji? (Wysłał pół polecenia,
    przyszło przerwanie, gdzieś nie było volatile i resetuje się w momencie
    gdzie moduł dostał jakieś śmieci?)

    > Jeśli coś jest
    > nie tak, zgłasza kod błędu migając diodą.

    Jest to jedno z podejść "skontaktuj się z serwisem". Drugim jest
    "spróbujemy się zrestartować".

    >
    > Tak swoją drogą co zwraca "+CPAS: 001" gdy modem jest niedostępny albo
    > "+CPAS: 005" gdy znajduje się w stanie uśpienia, skoro przecież jest
    > niedostępny albo znajduje się w stanie uśpienia? ;)

    Moduł. Moduł składa się z:
    - radia
    - modemu
    - uC, który nim steruje
    (czasami w jednym scalaku)

    A spora część współczesnych SoC ma odrębne bloki funkcjonalne z
    niezależnym wejściem zegara i asynchroniczne moduły komunikacyjne po to,
    żeby cała reszta mogła spać.

    >
    >> A jeżeli zgłosił 1,2,5?
    >
    > Jeszcze niezagospodarowane, ale to kwestia dodania kolejnego "case"
    > wewnątrz instrukcji switch().

    No tak, ale właśnie w ten sposób - przez zostawienie nieobsłużonych
    przypadków - tworzy się zawieszające się urządzenia. Dobra praktyka -
    zawsze dajesz default a jak nie wiesz co tam wstawić to wstawiasz
    logowanie błędu + reset.

    > Jak już mówiłem funkcja odpowiedzialna za
    > obsługę CPAS czeka po prostu aż przyjdzie stała część komunikatu (+CPAS:
    > 00) a potem czeka na pojawienie się ostatniej cyferki, pobiera ją,
    > konwertuje z ASCII na liczbę i zwraca programowi.

    A co w momencie gdy przyjdzie zakłócenie i zamiast cyferki przyjdzie coś
    niezrozumiałego?

    --
    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: