Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Uso del watchdog nei PIC

Raccolta di codici sorgenti

Moderatore: Foto UtentePaolino

2
voti

[11] Re: Uso del watchdog nei PIC

Messaggioda Foto UtentePaolino » 3 giu 2014, 15:58

Impiegate per caso un sistema operativo?
"Houston, Tranquillity Base here. The Eagle has landed." - Neil A.Armstrong

-------------------------------------------------------------

PIC Experience - http://www.picexperience.it
Avatar utente
Foto UtentePaolino
32,6k 8 12 13
G.Master EY
G.Master EY
 
Messaggi: 4226
Iscritto il: 20 gen 2006, 11:42
Località: Vigevano (PV)

0
voti

[12] Re: Uso del watchdog nei PIC

Messaggioda Foto Utentegrandegiove » 3 giu 2014, 16:00

No Foto UtentePaolino, nessun S.O.
Avatar utente
Foto Utentegrandegiove
1.151 1 4 8
Expert
Expert
 
Messaggi: 517
Iscritto il: 18 ott 2010, 9:59

1
voti

[13] Re: Uso del watchdog nei PIC

Messaggioda Foto UtenteWALTERmwp » 3 giu 2014, 16:43

Azzardo un'ipotesi (una delle tante che, ingenerale, si potrebbero fare) a proposito di questo ...
grandegiove ha scritto:La scheda dove occorre il bug è slave di una rete RS485 a 1 Mbit ma in seguito al blocco l'UART del PIC si blocca e non c'è verso di riprendere la comunicazione.
... sono stati aggiunti altri slave ?
Il protocollo è rimasto immutato e di conseguenza anche il driver è rimasto inalterato ?
Rispetto al "passato", ci sono state delle "variazioni" nella quantità di informazioni richieste/trasmesse (sempre, si intende, col medesimo driver) ?

Saluti
W - U.H.F.
Avatar utente
Foto UtenteWALTERmwp
29,4k 4 8 13
G.Master EY
G.Master EY
 
Messaggi: 8737
Iscritto il: 17 lug 2010, 18:42
Località: le 4 del mattino

1
voti

[14] Re: Uso del watchdog nei PIC

Messaggioda Foto UtenteDanteCpp » 3 giu 2014, 16:54

Scusate se mi intrometto, premetto di non esser un'esperto controllista, ma trovo questa situazione di debugging estremo veramente interessante.

Comunque dal momento che il micro è connesso ad una rete (master-slaves), non sarebbe sufficiente che gli slaves notifichino periodicamente il loro stato al master? In questo modo se pur la comunicazione si interrompe per azione del WCD si avranno comunque informazioni preliminari alla situazione critica.

Mi sembra più pratico dell' inserire un'ulteriore strato di software da guardia!

PS. sempre che tu possa agire anche sul master.
Avatar utente
Foto UtenteDanteCpp
4.730 3 9 13
Master EY
Master EY
 
Messaggi: 1106
Iscritto il: 15 dic 2011, 18:51

1
voti

[15] Re: Uso del watchdog nei PIC

Messaggioda Foto UtenteWALTERmwp » 3 giu 2014, 17:25

Ciao Foto UtenteDanteCpp, la mia opinione a proposito di questo ...
DanteCpp ha scritto:non sarebbe sufficiente che gli slaves notifichino periodicamente il loro stato al master? In questo modo se pur la comunicazione si interrompe per azione del WCD si avranno comunque informazioni preliminari alla situazione critica.
... (a prescindere dall'accessibilità nei confronti del Master) è che alla eventuale mancata risposta sarebbe comunque estremamente improbabile associare la causa; non potresti, cioè, identificare il punto in cui il codice ha "deviato" per un percorso anomalo (un loop infinito, una perversa ricorsione, un accesso incongruente allo stack ... ) o comunque sarebbe estremamente improbabile (non impossibile, eh).
Se poi tu volessi impiegare la mancata risposta dello slave, per diagnosticare indirettamente il fault, potresti essere ingannato da un "semplice" problema di comunicazione.
Una delle ultime cosa che farei, in ogni caso, sarebbe quella di andare a "toccare" il driver sul Master (ti porteresti nel campo delle "garantite imprevedibilità") a meno che non si ritenga il programma di comunicazione talmente robusto e consolidato da poterlo padroneggiare (alterare) senza crearsi più problemi di quelli che esistono.
Tieni presente, però, che questo è il mio punto di vista e si basa su considerazioni di carattere generale.
La risposta più coerente te la potrà dare @grandegiove.

Saluti
W - U.H.F.
Avatar utente
Foto UtenteWALTERmwp
29,4k 4 8 13
G.Master EY
G.Master EY
 
Messaggi: 8737
Iscritto il: 17 lug 2010, 18:42
Località: le 4 del mattino

1
voti

[16] Re: Uso del watchdog nei PIC

Messaggioda Foto UtenteDanteCpp » 3 giu 2014, 18:14

WALTERmwp ha scritto: non potresti, cioè, identificare il punto in cui il codice ha "deviato" per un percorso anomalo (un loop infinito, una perversa ricorsione, un accesso incongruente allo stack ... ).


Come no, se il master crea un log dei dati di debug (per esempio il contenuto del puntatore di programma) o un'indicatore più grossolano aggiunto qua e la, è possibile identificare situazioni di deadlock cosi come deviazioni anomale del flusso d'esecuzione. Naturalmente non è come avere il micro attaccato alla seriale, ma almeno permetterebbe di carpire qualche informazione...
Avatar utente
Foto UtenteDanteCpp
4.730 3 9 13
Master EY
Master EY
 
Messaggi: 1106
Iscritto il: 15 dic 2011, 18:51

1
voti

[17] Re: Uso del watchdog nei PIC

Messaggioda Foto UtenteWALTERmwp » 3 giu 2014, 22:45

DanteCpp ha scritto:Come no, se il master crea un log dei dati di debug
... il fault avviene sullo slave ... e, in ogni caso, una mancata risposta (a prescindere dalla frequenza di polling) non è riconducibile, associabile, alla porzione di codice dedicata alla comunicazione (sullo slave): potrebbe essere qualunque cosa.

Saluti
W - U.H.F.
Avatar utente
Foto UtenteWALTERmwp
29,4k 4 8 13
G.Master EY
G.Master EY
 
Messaggi: 8737
Iscritto il: 17 lug 2010, 18:42
Località: le 4 del mattino

2
voti

[18] Re: Uso del watchdog nei PIC

Messaggioda Foto UtentePaolino » 3 giu 2014, 22:56

Sono un po' stanco stasera. Il mio pensiero su questo argomento è che la struttura del firmware sarebbe dovuta già essere tale da prevedere trasferimenti dèi valori degli stati di ogni slave.

Vediamo se Foto Utentegrandegiove se la cava col salvataggio dei dati in eeprom.

Ciao.

Paolo
"Houston, Tranquillity Base here. The Eagle has landed." - Neil A.Armstrong

-------------------------------------------------------------

PIC Experience - http://www.picexperience.it
Avatar utente
Foto UtentePaolino
32,6k 8 12 13
G.Master EY
G.Master EY
 
Messaggi: 4226
Iscritto il: 20 gen 2006, 11:42
Località: Vigevano (PV)

0
voti

[19] Re: Uso del watchdog nei PIC

Messaggioda Foto Utentegrandegiove » 9 giu 2014, 14:41

Ciao a tutti,

grazie a tutti per la partecipazione e il sostegno.

Cominciamo col dire che ancora non ho trovato l'inghippo. :(

Non ho ancora avuto modo di avere un feedback dalle macchine col sistema di autodiagnostica.

Alcune precisazioni: ho con tutta probabilità individuato la routine di servizio interrupt (ISR) dove avviene il blocco ed è la routine che viene servita con il livello di priorità più alto. Questo è necessario perché l'operazione svolta nell'ISR ha dei vincoli real time critici ed è il cuore dell'applicazione.

L'ISR che gestisce la ricezione dei dati sulla linea seriale è ad un livello più basso.

Esiste un sistema di monitor della comunicazione seriale così come la possibilità di verificare in qualsiasi momento la condizione dello slave. A patto però che sia attiva la comunicazione seriale.

Essendo il blocco in una ISR a priorità più alta rispetto alla gestione della seriale tutto il sistema di monitor diventa inutilizzabile. Nell'ISR critica si ha una sequenza di operazioni abbastanza complessa: normalmente è buona cosa non appesantire l'ISR ma in questo caso il vincolo temporale impone di eseguire quelle operazioni all'interno e quindi non è pensabile di rivedere i livelli di priorità. Il ritardo introdotto dalla ricezione dei dati seriali rallenterebbe in modo inaccettabile l'esecuzione dell'ISR critica.

Vediamo se arrivano sviluppi.

Buon pomeriggio ragazzi! ;-)
Avatar utente
Foto Utentegrandegiove
1.151 1 4 8
Expert
Expert
 
Messaggi: 517
Iscritto il: 18 ott 2010, 9:59

3
voti

[20] Re: Uso del watchdog nei PIC

Messaggioda Foto UtenteGuidoB » 9 giu 2014, 18:57

Ciao Foto Utentegrandegiove,
premetto che non conosco i pic32, ma penso si possano utilizzare gli stessi metodi di altre famiglie...

grandegiove ha scritto:spero di aver creato un sistema di diagnostica efficace.

Sostanzialmente ho predisposto un finto watchdog con un timer.

...

Ho quindi predisposto un timer il cui overflow scatena per l'appunto un interrupt di livello 7.

...

Mi sembra un'ottima idea! :ok:

grandegiove ha scritto: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

Qui invece mi sembrerebbe meglio salvare nella eeprom (o in una zona della ram che sopravviva al reset, se esiste) la "coda" dello stack.
Così vedi l'indirizzo di ritorno dalla routine di interrupt e, con un po' di lavoro, la catena di chiamate a procedura che ti ha portato in quel punto, i valori dei parametri passati e delle variabili locali.

Per farlo dovresti "poppare" dallo stack gli ultimi valori e salvarli in eeprom. Il più importante è il primo (o uno dei primi, dipende dal micro) che "poppi", cioè l'indirizzo di ritorno. Poi, senza aspettare il watchdog, puoi chiamare il reset da dentro l'interrupt per evitare di incasinare ulteriormente la macchina con lo stack che hai appena corrotto coi tuoi "pop". Oppure studi un meccanismo per ripristinare lo stack... vedi tu cosa ti conviene.

Leggendo dallo stack, non hai piú bisogno di settare una variabile "punto del programma" che per forza di cose metti dove tu sospetti che sia il problema. I problemi sono subdoli e tante volte non sono dove ci aspettiamo che siano...

Un problema del genere mi aveva tenuto impegnato un mese e mezzo... :evil:

DanteCpp ha scritto:trovo questa situazione di debugging estremo veramente interessante.

Questa definizione mi sembra molto azzeccata! :mrgreen:
Big fan of ƎlectroYou!       Ausili per disabili e anziani su ƎlectroYou
Caratteri utili: À È É Ì Ò Ó Ù α β γ δ ε η θ λ μ π ρ σ τ φ ω Ω º ª ² ³ √ ∛ ∜ ₀ ₁ ₂ ₃ ₄ ₅ ₆ ∃ ∄ ∆ ∈ ∉ ± ∓ ∾ ≃ ≈ ≠ ≤ ≥
Avatar utente
Foto UtenteGuidoB
17,3k 7 12 13
G.Master EY
G.Master EY
 
Messaggi: 2665
Iscritto il: 3 mar 2011, 16:48
Località: Madrid

PrecedenteProssimo

Torna a Firmware e programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 6 ospiti