Memoria esaurita PIC error: (1250), usando PIC 16f628
Salve ragazzi buon giorno
, sto programmando in c un PIC 16f628, utilizzando come compilatore xc8 della mplab e come ide x-mplab, ho un problema nella gestione della ram dati del PIC, in pratica nel mio codice ho dichiarato quattro Array, di tipo caratteri, con questa dimensione fissa
64 byte
22 byte
3 array da 11 byte…. Quindi con un totale di 119 byte
Ora la cosa che non capisco è perche il compilatore, mi restiturisce error 1250, cioè di memoria esaurita, eppure lo stesso compilatore mi dichiara in fase di compilazione che ho ancora disponibili altri ben 72 byte di memoria liberi, dei 224 del PIC 16f628 (vedi foto):
Ma se provo ad avviare la compilazione
Log dell'errore 1250 del compilatore :
Mi chiedo quale sia il problema, in pratica riesco a compilare solo se diminuisco l'array più grande da 64 byte a 58 byte, eppure se compilo array a 58 byte il compilatore come dicevo prima mi dichiara 70 byte di memoria disponibili
.
Come prima impressione, mi viene da pensare, che essendo la memoria del PIC divisa in diversi banchi, il compilatore in fase di allocazione vada a cercare una memoria libera contigua, e quindi anche se risultano 72 byte liberi questi sono su 2 banchi separati, dando l'erroe 1250. Mi chiedo se c’è un modo per ovviare a questo problema in c, è possibile dichiarare degli array magari forzando il compilatore a usare per uno specifico array un banco piutosto che un altro ?
Oppure errore è da ritrovarsi altrove ?
Grazie sempre per la gentilezza e della professionalità .... che mettete a disposizione di tutti
64 byte
22 byte
3 array da 11 byte…. Quindi con un totale di 119 byte
Ora la cosa che non capisco è perche il compilatore, mi restiturisce error 1250, cioè di memoria esaurita, eppure lo stesso compilatore mi dichiara in fase di compilazione che ho ancora disponibili altri ben 72 byte di memoria liberi, dei 224 del PIC 16f628 (vedi foto):
Ma se provo ad avviare la compilazione
Log dell'errore 1250 del compilatore :
- Codice: Seleziona tutto
main.c:43: error: (1250) could not find space (64 bytes) for variable _dte
nbproject/Makefile-default.mk:135: recipe for target 'dist/default/production/ComSeriale.X.production.hex' failed
make[2]: Leaving directory 'D:/Dati/Elettronica/Progetti C/ComSeriale/ComSeriale.X'
nbproject/Makefile-default.mk:78: recipe for target '.build-conf' failed
make[1]: Leaving directory 'D:/Dati/Elettronica/Progetti C/ComSeriale/ComSeriale.X'
nbproject/Makefile-impl.mk:39: recipe for target '.build-impl' failed
(908) exit status = 1
make[2]: *** [dist/default/production/ComSeriale.X.production.hex] Error 1
make[1]: *** [.build-conf] Error 2
make: *** [.build-impl] Error 2
BUILD FAILED (exit value 2, total time: 1s)
Mi chiedo quale sia il problema, in pratica riesco a compilare solo se diminuisco l'array più grande da 64 byte a 58 byte, eppure se compilo array a 58 byte il compilatore come dicevo prima mi dichiara 70 byte di memoria disponibili
Come prima impressione, mi viene da pensare, che essendo la memoria del PIC divisa in diversi banchi, il compilatore in fase di allocazione vada a cercare una memoria libera contigua, e quindi anche se risultano 72 byte liberi questi sono su 2 banchi separati, dando l'erroe 1250. Mi chiedo se c’è un modo per ovviare a questo problema in c, è possibile dichiarare degli array magari forzando il compilatore a usare per uno specifico array un banco piutosto che un altro ?
Oppure errore è da ritrovarsi altrove ?
Grazie sempre per la gentilezza e della professionalità .... che mettete a disposizione di tutti

... pero non riesco a capire come fare, ci sono epr caso esempi da cui posso studiare e trarre spunto, magari qualche suggerimento, non dico il codice già bello è fatto ma come procedere nella maniera migliore :/.