da grandegiove » 11 giu 2014, 14:15
Trovato!!!!
Almeno credo e spero. Senza entrare troppo nel dettaglio: sostanzialmente un controllo prevedeva l'accesso ad un array con un indice che, in una particolare situazione, usciva dalla dimensione dell'array.
tipo:
- Codice: Seleziona tutto
unsigned int arrayValori[100];
[...]
k=150;
if(arrayvalori[k]==1)
a=b;
Poco da dire: erroraccio mio. A mio discapito posso solo dire che la condizione che dava origine allo sforamento era molto molto subdola. Ma ciò non toglie che mi fosse sfuggita in stesura e in rilettura. Torna anche il fatto che questa situazione sia possibile solo da una certa versione in poi. E dire che gli indici degli array li avevo controllati più e più volte così come le novità nella nuova versione. A volte è vero che se gli occhi son sempre quei due..
Quando ho avuto l'informazione relativa al fatto che il wdt interveniva senza dar modo al wdt fittizio di salvare il punto del programma mi sono concentrato sulle situazioni in cui si potevano avere degli "sforamenti in memoria". Ho quindi messo un accesso ad un array con un indice volutamente più grande della dimensione dell'array nel main. Quando attivavo l'acceso il micro si pianta del tutto, ISR incluse, a prescindere da dove avvenisse l'accesso. Ho quindi riesaminato ancora una volta gli indici fino a trovare l'errore. Non so se questo comportamento valga in generale o se esistano compilatori che generano un codice che previene il blocco totale in caso di accesso "fuori range" ad un array. Nel mio caso no. Approfondirò sicuramente la questione.
Esco dall'esperienza stremato ma credo di aver comunque imparato qualcosa. Fortunatamente esiste anche il modo di disabilitare quella parte di codice con l'HMI a disposizione dell'operatore sulla macchina, quindi nell'attesa di poter aggiornare il tutto il problema può essere aggirato da remoto.
Vi ringrazio per il sostegno e per le idee! Spero che il mio errore sia stato almeno utile a dar vita ad una discussione costruttiva. Meglio pensarla così
Buon pomeriggio!!