Creative Commons BY-NC-ND 2.5Questo sito e tutto il suo contenuto sono distribuiti sotto la licenza Creative Commons Attribuzione - Non Commerciale - Non opere derivate 2.5 Italia e con le condizioni d'uso definite nel disclaimer: siete pregati di leggere entrambi questi documenti prima di usufruire dei contenuti di questo sito. Per alcuni contenuti è necessaria una registrazione gratuita: non è necessario pagare e non è necessario accumulare punteggi per accedere agli articoli e scaricare i sorgenti. Basta solo essere onesti. Se volete che questo sito continui a rimanere attivo, a contribuire ogni giorno alla diffusione della cultura libera, non copiate il materiale per ripubblicarlo in altri luoghi : chi fa questo è solo un miserabile e un perdente. Se volete partecipare su settorezero e rendere le vostre idee, i vostri progetti, fruibili da tutti senza limitazioni, come dovrebbe essere in un paese civile e acculturato, potete farlo tranquillamente.

Hitec-C : Risolvere l’errore fixup overflow storing

Autore: Giovanni Bernardo | Data pubblicazione: 3 settembre 2010
Categorie: PICmicro 10/12/16

A volte i compilatori non sempre vengono in aiuto, come in questo caso in cui l’Hitec-C mi ha fatto penare non poco anche per la scarsità di documentazione al riguardo. Durante la compilazione di un lungo programma per picmicro mi si presentava di continuo questo errore odioso:

Fixup Overflow Storing

In un primo momento sospettavo si trattasse di un superamento del limite di memoria imposto dalla versione LITE dell’ Hitec-C, ma in realtà non poteva trattarsi di una cosa del genere in quanto avevo soltanto aggiunto poche istruzioni a fronte di un consumo di memoria, prima dell’aggiunta, che mi consentiva di inserire ancora parecchia altra “roba” (80%).

Cercando un po’ in giro, dopo tanti patimenti, ho trovato questa illuminante discussione sul forum dell’ htsoft:

http://forum.htsoft.com/all/showflat.php/Cat/0/Number/114682/an/0/page/7

In pratica si evince che lo spazio, in termini di memoria programma, occupato da una funzione, deve risiedere tutto all’interno dello stesso banco di memoria.

E’ vero che con l’Hitec-C, e comunque con tutti i linguaggi di programmazione di alto livello, non dobbiamo preoccuparci dei banchi di memoria in cui allocare variabili e funzioni in quanto il compilatore effettua la miglior scelta in automatico, ma è altrettanto vero che una singola funzione, se troppo grande, non può essere suddivisa in due o più banchi: un’intera funzione deve risiedere in un solo banco.

Qualora le dimensioni di una funzione superano lo spazio di un banco, ecco che si presenta l’errore Fixup Overflow Storing (che suona più o meno come: correggere l’immagazzinamento in “sovrappiù”).

L’errore si risolve, quindi, spezzettando la funzione “enorme” in più pezzi in maniera tale che ogni singola funzione possa essere alloggiata in un banco.

Teniamo conto che la funzione main sia quella “enorme” e che contenga un certo quantitativo elevato di istruzioni:

void main(void)
   {
   istruzione1;
   istruzione2;
   istruzione3;
   ...
   istruzioneN;
   }

Sarà il vostro buon senso a farvi capire qual è la funzione che causa l’errore: è quella che contiene più istruzioni di tutte

Possiamo dividerla in questo modo:

void main(void)
   {
   funzione1();
   funzione2();
   funzioneN();
   }
 
void funzione1(void)
   {
   istruzione1;
   istruzione2;
   istruzione3;
   }
 
void funzione2(void)
   {
   istruzione4;
   istruzione5;
   istruzione6;
   }
 
void funzioneN(void)
   {
   istruzione7;
   istruzione8;
   ....
   istruzioneN;
   }

Ovviamente non è necessario spezzettare la funzione “grossa” in diecimila funzioni: magari  a volte basta anche rimanere alcune istruzioni in maniera normale e altre farle richiamare da un’altra funzione ecc.

Insomma fate in modo che il codice sia sempre leggibile e raggruppate le istruzioni in maniera che il nuovo arrangiamento abbia comunque un senso logico.

Articoli che potrebbero interessarti

L'articolo ti è piaciuto o ti è stato utile per risolvere un problema? Supporta e mantieni in vita questo sito, ci basta soltanto un caffè o una birra.
Se desiderate che settorezero continui a rimanere gratuito e fruibile da tutti, non copiate il nostro materiale e segnalateci se qualcuno lo fa

Puoi lasciare un commento, o un trackback dal tuo sito.

  1. Ancora nessun commento.

Devi essere collegato per lasciare un commento.

  1. Ancora nessun trackback
settorezero.com e il logo Zroid™ ©2007÷2012 Giovanni Bernardo - E' vietata la copia e la distribuzione anche parziale dei contenuti di questo sito web senza l'esplicito consenso dell'autore.
I contenuti di settorezero.com sono distribuiti sotto una licenza Creative Commons Attribuzione-Non Commerciale-Non Opere derivate 2.5 Italia a cui vanno aggiunte le condizioni d'uso definite nel disclaimer.
settorezero.com e tutti i suoi contenuti sono tutelati dalla legge sul diritto d'autore per cui i trasgressori sono perseguibili a norma di legge.
Creative Commons BY-NC-ND 2.5
Il tema di questo sito è basato sul tema Fusion per wordpress, realizzato originariamente da digitalnature e fa uso del plugin Wassup per il computo delle statistiche. Per contattare l'autore siete pregati di utilizzare la sezione contatti.
Per essere aggiornato con tutte le novità di settorezero.com seguici anche anche su Facebook Twitter Tumblr Blogspot Youtube.