-
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
Następne wpisy z tego wątku
- 23.02.13 17:50 Atlantis
Najnowsze wątki z tej grupy
- Taki tam szkolny problem...
- LIR2032 a ML2032
- SmartWatch Multimetr bezprzewodowy
- olej psuje?
- Internet w lesie - Starlink
- Opis produktu z Aliexpress
- No proszę, a śmialiście się z hindusów.
- Zewnętrzne napięcie referencyjne LM385 1,2V -> 100mV dla ICL7106, Metex M-3800
- karta parkingowa
- Wl/Wyl (On/Off) bialy/niebieski
- I3C
- Pytanie o transformator do dzwonka
- międzymordzie USB 3.2 jako 2.0
- elektronicy powinni pomysleć o karierze elektryka
- jak szybko plynie prad
Najnowsze wątki
- 2024-11-20 "betamaxy" i inne voip-y dzisiaj
- 2024-11-21 Strach się bać
- 2024-11-21 Koniec smrodów
- 2024-11-20 Krematorium
- 2024-11-20 Taki tam szkolny problem...
- 2024-11-20 LIR2032 a ML2032
- 2024-11-20 SmartWatch Multimetr bezprzewodowy
- 2024-11-21 Środa Wielkopolska => Konsultant SAP <=
- 2024-11-21 Łódź => Spedytor Międzynarodowy <=
- 2024-11-21 Wrocław => Inżynier bezpieczeństwa aplikacji <=
- 2024-11-21 Kraków => Lead Java EE Developer <=
- 2024-11-21 Karlino => Konsultant wewnętrzny SAP (FI/CO) <=
- 2024-11-21 Warszawa => IT Recruiter <=
- 2024-11-20 Katowice => Administrator IT - Operating Systems and Virtualization <=
- 2024-11-20 Warszawa => Junior Account Manager <=