Dobre reguly programowania - WDT

Loading thread data ...

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.

Reply to
Mario

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.

Reply to
Marek Lewandowski

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.