sfinge Inserito: 6 giugno 2012 Segnala Share Inserito: 6 giugno 2012 Salve a tutti, il compilatore mi genera un'errore che sembra causato dato da un starbordamento della richiesta di memoria da il banco utilizzato.Infatti è sufficiente togliere qualche istruzione che l'errore scompare.Come posso puntare ad un banco di memoria successivo? Ho provato settando i bits RP0 e RP1 prima delle istruzioni "di troppo",ma niente è cambiato.Il micro è un PIC16F876. Grazie anticipatamente. Link al commento Condividi su altri siti More sharing options...
Livio Orsini Inserita: 6 giugno 2012 Segnala Share Inserita: 6 giugno 2012 Al termine della compilazione dovrebbe darti l'occupazione totale di memoria; sia la memoria statica che la dinamica. la scelta dei banchi dovrebbe essere effettuata direttamente dla compilatore, almenoi con il compilatore della CCS è così. Però è questa tua affermazione che mi preoccupa: "..è sufficiente togliere qualche istruzione che l'errore scompare." Perchè i banchi di memeoria selezionano la memoria RAM, mentre le istruzioni occupano la memoria FLASH. Non è che stai superando la massima capacità FLASH? Link al commento Condividi su altri siti More sharing options...
sfinge Inserita: 6 giugno 2012 Autore Segnala Share Inserita: 6 giugno 2012 Quello che posso dirti che l'occupazione del memoria se non ricordo male è al 52% Il messaggio di errore è il seguente: Can't find 0x82e words (0x82e withtotal) for psect "text223" in segment "code" (largest unused contiguos range 0x800). Utilizzo parecchie scritture di strighe su display LCD. Potrebbe essere la versione di CCS in Lite mode che mi limita il codice? GrAZIE Link al commento Condividi su altri siti More sharing options...
Livio Orsini Inserita: 6 giugno 2012 Segnala Share Inserita: 6 giugno 2012 CCS non ha versione ligth! Se intendi la versione gratuita di Microchip non è di CCS. Il micro PIC16F876 ha 8 k di FLAsh. 800h corrisponde a 2048. Verifica che tu non abbia indicato un altro micro al compilatore. Potrebbe anche essere che al versione gratuita supporti solo 2048 bytes di lunghezza di programma. in questo caso devi spezzare il programma in più segmenti, dare un'origine fissa ad ogni segmento e poi linkarli. Link al commento Condividi su altri siti More sharing options...
sfinge Inserita: 6 giugno 2012 Autore Segnala Share Inserita: 6 giugno 2012 Grazie Livio, tu dici: "in questo caso devi spezzare il programma in più segmenti, dare un'origine fissa ad ogni segmento e poi linkarli" mi puoi fare un'esempio se non è complicato? Intendi dire utilizzare la direttiva include? ciao Link al commento Condividi su altri siti More sharing options...
Livio Orsini Inserita: 6 giugno 2012 Segnala Share Inserita: 6 giugno 2012 mi puoi fare un'esempio se non è complicato? Si è abbastanza complicato, se non sai come fare è un problema spiegarlo in un messaggio. Intendi dire utilizzare la direttiva include? Se il limite sta nel compilatore nonsi può usare questo trucco. Però dovresti saperlo se è un limite dle compilatore perchè dovrebbe essere dichiarato. Link al commento Condividi su altri siti More sharing options...
sfinge Inserita: 14 giugno 2012 Autore Segnala Share Inserita: 14 giugno 2012 Ciao Livio, problema risolto. Anche se non ho ben capito cosa sia questo "PSECT" ho trovato in MPLAB sotto a Build Options l'opzione show PSECT occupation.Viene così generato a fine compilazione una tabellina di LOG con l'occupazione di memoria delle funzioni di programma. In effetti ho notato che una occupava moolto più spazio delle altre. Ho risolto splittando in due parti.Esempio: if(....){ ShowDisplay_1();//1°parte ShowDisplay_2();//2°parte } ciao Grazie Link al commento Condividi su altri siti More sharing options...
Messaggi consigliati
Crea un account o accedi per commentare
Devi essere un utente per poter lasciare un commento
Crea un account
Registrati per un nuovo account nella nostra comunità. è facile!
Registra un nuovo accountAccedi
Hai già un account? Accedi qui.
Accedi ora