<p dir="ltr">A proposito... Non è che hai la memoria piena? Fra stack heap e globali... Magari lo spazio x le globali è ristretto</p>
<p dir="ltr">Stefano<br>
Fellow FSFE</p>
<div class="gmail_quote">Il 10/apr/2016 12:19, "Samuele" <<a href="mailto:samuele.zanin@tiscali.it">samuele.zanin@tiscali.it</a>> ha scritto:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Il mio viscerale odio per il C è noto, purtroppo ogni tanto mi tocca averci a che fare.<br>
<br>
L'altro giorno, stavo tentando di fare una funzione di log su file di dati. Un'unica funzione, con due parametri, il tipo di operazione (apertura, chiusura, scrittura) ed un array di char con i dati da loggare.<br>
<br>
Inizialmente il descrittore del file era dichiarato come variabile statica. All'apertura del file, si pianta tutto.<br>
Descrittore dichiarato come variabile locale funziona.<br>
Mi turo il naso e lo dichiaro come variabile globale: blocco del programma (d'altronde da quanto leggo, statiche e globali vengono trattate allo stesso modo).<br>
Mi rituro il naso e porconando, dichiaro il descrittore come variabile locale nel main e la passo come parametro in tutte le funzioni dove mi server. Funziona (Csytemd!!!).<br>
Qualsiasi altro tipo di variabile globale che tento di dichiarare da lo stesso comportamento (ho già un'altra serie di variabili globali già in uso). Lo sò che non si devono usare, ma sono variabili tipo il buffer della seriale, gli oggetti di gpio ecc.<br>
<br>
Qualche spiegazione razionale del fenomeno?<br>
<br>
Dopo un paio d'ore mi accorgo che comunque il programma si pianta (interviene il watchdog).<br>
Di solito questo succede quando la memoria va a puttane.<br>
Peccato che senza la funzione di log, tutto vada bene.<br>
Ipotizzo che sia la dimensione del file troppo grande, quindi al raggiungimento delle 3000 righe di log, chiudo e apro un nuovo file. Adesso il programma si pianta molto prima, quindi mi vien da dire che il problema sia nella funzione di apertura del file (fileopen).<br>
<br>
Ho provato in velocità qualche programma di analisi statica del codice, ma non sono riuscito a farli andare.<br>
Da un punto di vista della logica del programma, non ho problemi, tutto è corretto, ma capire cosa fa il compilatore C £"$%£"$%£$%$"£!!! non è alla mia portata.<br>
<br>
Il programma è sviluppato su piattaforma mbed, ho 32 KB di ram, gli altri 32 sono dedicati alla ethernet.<br>
<br>
<a href="https://developer.mbed.org/handbook/Memory-Model" rel="noreferrer" target="_blank">https://developer.mbed.org/handbook/Memory-Model</a><br>
<br>
Qualsiasi consiglio è ben accetto.<br>
<br>
<br>
_______________________________________________<br>
montellug mailing list<br>
<a href="mailto:montellug@montellug.it" target="_blank">montellug@montellug.it</a><br>
<a href="http://mail.montellug.it/mailman/listinfo/montellug" rel="noreferrer" target="_blank">http://mail.montellug.it/mailman/listinfo/montellug</a><br>
</blockquote></div>