da
grandegiove » 3 giu 2014, 11:34
Ciao a tutti:
Update:
del bug nemmeno l'ombra. Però spero di aver creato un sistema di diagnostica efficace.
Sostanzialmente ho predisposto un finto watchdog con un timer.
I PIC32 consentono 7 livelli di priorità di interrupt.
Ho rivisto i livelli degli interrupt che utilizzo nell'applicazione in modo da non avere nessun interrupt a priorità 7 (la più alta).
Ho quindi predisposto un timer il cui overflow scatena per l'appunto un interrupt di livello 7.
Ho quindi attivato il watchdog con periodo T e settato il timer con periodo T/2. Il watchdog e il timer vengono azzerati nello stesso punto del main. (T/2 è già un tempo che presuppone il blocco dell'esecuzione da qualche parte).
In questo modo in caso di blocco del codice da qualche parte, prima scatta l'interrupt del timer, ho modo di salvare nella eeprom una variabile "punto del programma" che ho assegnato qua e la nel codice e solo dopo interverrà il watchdog che resetterà il PIC permettendo alla macchina di continuare a lavorare.
Tutto ciò funziona se il blocco è comunque all'interno del codice e gestibile quindi via firmware, in questo caso il finto watchdog funziona. Per qualsiasi altro blocco o overflow che "disorienti" il program counter credo che il WDT intervenga senza che il timer abbia modo di fare il suo lavoro.
Scusate la spiegazione poco chiara ma spero che l'idea si capisca..
cosa ne dite ragazzi?
