Witam. Czy sa jakies reguly gdzie nalezy lub nie nalezy dokonywac resetu watchdog timer'a? Czy mo¿na dokonywac resetu WDT w funkcji obsl. przerwania (np. w funkcji obsl przerwania timera)?
Wezmy Dla przykladu: Pomiar temp jest dokonywany w funkcji obsl. przerwania od timera i w zaleznosci od wyniku pomiaru zalaczana jest pompa oraz wyswietlenie wyniku pomiaru na LCD . W funkcji glownej jest zamieszczona tylko obsl. klawiatury. Gdzie najlepiej resetowac w takim programie WDT.
Didn't find your answer? Ask the community — no account required.
M
Mario
roxy pisze:
Procek może utknąć w jakiejś pętli (np na skutek przestawienia jakiejś wartości rejestru lub licznika rozkazów). Będzie z tego miejsca wyrywany przerwaniem od timera ale nie będzie wracał do pętli głównej tylko do tego miejsca. Lepiej w pętli głównej dać sprawdzanie flagi ustawianej timerem i jeśli ustawiona to resetować WD. W ten sposób masz obsługę cykliczną WD i wykrywanie jeśli procek uciekł z pętli głównej.
E
entroper
U¿ytkownik "roxy" snipped-for-privacy@o2.pl napisa³ w wiadomo¶ci news:gm7o3n$281$ snipped-for-privacy@inews.gazeta.pl...
w³a¶nie przytoczy³e¶ regu³ê, gdzie nie nale¿y :)
e.
M
Marek Lewandowski
W takich punktach, jak program powinien pracowac. Przyklad: Program czyta temp. w przerwaniu, a petla glowna sie kreci w kolko i czeka na flage z przerwania. W przerwaniu resetujesz WDT, ale TYLKO poki nie ma nic do roboty. W momencie, gdy ustawiasz flage uruchomienia pompy PRZESTAJESZ zerowac WDT w przerwaniu, za to w obsludze pompy jest wstawiony reset WDT. Jesli teraz procedura nie zalapie, bo glowna petla programu poszla sie kochac, to WDT resetuje cala zabawe. Jesli w petli glownej przelatujesz obsluge klawiatury, to dodaj sobie zmienna globalna KBD_nOK i zeruj ja przy kazdym sprawdzeniu klawiatury. W przerwaniu timera ustawiaj na koncu te flage, a WDT kasuj tylko, gdy na poczatku (nastepnego) wywolania timera KBD_nOK==0 (czyli w miedzyczasie klawiatura zostala obsluzona). Itd. Ogolnie:
- przy watkach cyklicznie, ale asynchronicznie obslugiwanych wybierz sobie jeden, ktory wywolywany jest zawsze i tam kasuj WDT, ale pod warunkiem, ze wszystkie pozostale watki, ktore powinny byc wykonywane, odhaczyly swoje indywidualne flagi, po czym ustawiaj im te flagi na nowo.
- dla watkow wywolywanych acyklicznie i tez zdefiniuj flagi i rezygnuj z cyklicznego kasowania WDT, dopoki sie te watki nie zakoncza, natomiast WDT kasuj w nich samych.
No i na koniec: wszystko mozna spieprzyc.
Join the Discussion
Have something to add? Share your thoughts — no account required.
Didn't find your answer?
Ask the community — no account required
Report Content
You are reporting this content to the moderators. They will look at it
ASAP.