[MontelLUG] Impossibilità di utilizzare variabili statiche o globali

Gianluca Moro giangiammy a gmail.com
Dom 10 Apr 2016 15:10:09 CEST


la prima cosa che mi viene in mente sono
problemi di stack che cresce troppo ....
(paragrafo collision del link che hai postato)

ciao
giammy

On Sunday, April 10, 2016, Samuele <samuele.zanin a tiscali.it> wrote:

> Il mio viscerale odio per il C è noto, purtroppo ogni tanto mi tocca
> averci a che fare.
>
> 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.
>
> Inizialmente il descrittore del file era dichiarato come variabile
> statica. All'apertura del file, si pianta tutto.
> Descrittore dichiarato come variabile locale funziona.
> 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).
> 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!!!).
> 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.
>
> Qualche spiegazione razionale del fenomeno?
>
> Dopo un paio d'ore mi accorgo che comunque il programma si pianta
> (interviene il watchdog).
> Di solito questo succede quando la memoria va a puttane.
> Peccato che senza la funzione di log, tutto vada bene.
> 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).
>
> Ho provato in velocità qualche programma di analisi statica del codice, ma
> non sono riuscito a farli andare.
> 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.
>
> Il programma è sviluppato su piattaforma mbed, ho 32 KB di ram, gli altri
> 32 sono dedicati alla ethernet.
>
> https://developer.mbed.org/handbook/Memory-Model
>
> Qualsiasi consiglio è ben accetto.
>
>
> _______________________________________________
> montellug mailing list
> montellug a montellug.it
> http://mail.montellug.it/mailman/listinfo/montellug
>


-- 
Gianluca Moro                  Technology explorer
HSK Poster/Android APP http://www.giammy.com <http://www.giammy.com/hsk>
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://mail.montellug.it/pipermail/montellug/attachments/20160410/2195e496/attachment.html>


Maggiori informazioni sulla lista montellug