Hlídání watchdog a kontrola flash u řídicích systémů AMiT

Vytvořil jsem algoritmus pro watchdog programu a kontrolu flash.
Primární funkce algoritmu je hlídání provedení procesu Proc00 s periodou 100mS pro načtení vstupů a zápisu výstupů řídicího systému alespoň jednou za 500mS, jinak se vyhodnotí program jako "zaseknutý" a provede se restart.
Sekundární funkce algoritmu je v hlídání kontrolního součtu paměti flash a pokud nesouhlasí CRC součet po druhém a dalším restartu, tak je řídicí systém restartován až do souhlasného CRC.


K algoritmu: Parametrem Timeout modulu Watchdog se udává doba, za kterou se modul Watchdog musí občerstvit. Tzn., musí vám do zadané doby alespoň jedenkrát proběhnout proces, ve kterém je modul Watchdog na daném kanále aktivní. Skutečná doba, po které vypršení limitu vyvolá restart systému, může být až o 100 mS delší, než je hodnota parametru Timeout. V této závěrečné fázi před restartem (po vypršení zadaného limitu) ovšem nelze zaručit, že případná obsluha vypršeného hlídacího časovače zabrání restartu systému. Minimální hodnota parametru Timeout modulu Watchdog je 320 mS. Pokud chceme provést restart bez zacyklení programu (řízený restart od špatného CRC paměti flash), je nutné umístit kód do procesu s periodou minimálně 420 mS, aby hodnota periody procesu byla větší než minimální zadatelný čas + 100mS. Nyní k "magické" hodnotě 320 resp. 420 mS. Pokud do parametru Watchdog zadáte jakoukoliv hodnotu, menší jak 320 mS, bude tato automaticky v modulu Watchdog zvětšena na 320 mS tj. parametr Timeout můžete zadat v rozmezí 0 .. XYZ, vždy se ale bude počítat v rozmezí (320 .. XYZ)+100. Toto neplatí pro větší hodnoty.
U řídicích systémů s novým procesorem (řada "S") je počítání kontrolního součtu paměti flash zatím nefunkční (problém modulu MemCheck PSP3.53 a nižší). Následně má být tato nefunkčnost odstraněna.
Příklad algoritmu v souboru.

Soubory: