Dobre reguly programowania - WDT

Do you have a question? Post it now! No Registration Necessary

Translate This Thread From Polish to

Threaded View
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.



Re: Dobre reguly programowania - WDT
roxy pisze:
Quoted text here. Click to load it

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.

--
Pozdrawiam
MD

Re: Dobre reguly programowania - WDT

Quoted text here. Click to load it

właśnie przytoczyłeś regułę, gdzie nie należy :)

e.


Re: Dobre reguly programowania - WDT

Quoted text here. Click to load it

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_nOK3D%3D0
(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.

--
  Marek Lewandowski
 ICQ#/GG#: ask per mail.  mail: locust[X]poczta/onet/pl
We've slightly trimmed the long signature. Click to see the full one.

Site Timeline