- posted
15 years ago
Dobre reguly programowania - WDT
- Vote on answer
- posted
15 years ago
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.
- Vote on answer
- posted
15 years ago
- Vote on answer
- posted
15 years ago
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.