Newsgroup: it.hobby.elettronica.digitale
Titolo: PIC16F876 Program Memory piena...

Salve ho un Pic 16f876 dove ho memorizzato un programma che ha raggiunto 
il massimo del Program Memory (8K ).Volevo aggiungere ancora qualche 
riga di programma ma non ce ne sta più.C'è qualche altra soluzione oltre 
che a trasferire e adattare il programma su un chip più capiente ?
Jack


Si, la più banale sta nel compattare e ottimizzare il più possibile il
codice che hai scritto finora, e mediamente ci si riesce se devi
aggiungere solo qualche riga di codice.

Jack ha scritto:

Ciao!
Fammi indovinare...   è scritto in basic oppure c, vero?
Se la risposta è si, ti consiglio di riscrivere almeno le parti che 
richiedono più velocità in ASM, e ti assicuro che guadagni parecchio 
spazio... e segui anche il (saggio) consiglio di Enrico.
Ciao!
-- 
Stefano Martini (Italy)
Sito web: 
http://www.lemming.it
Memento Audere Semper (G. d'Annunzio)

 Fammi indovinare...   è scritto in basic oppure c, vero?
Peccato ..scoperto ! :(
Per la verità il programma era già fatto ma ho dovuto affinare un po di 
cosette e siccome è in Picbasic ho usato quello.Anche perchè ormai di 
assembler ne ricordo poco o niente degli st6..ho scritto una volta un 
programma ma ci ho messo sei mesi . Le mie mani sono + sporche di olio e 
grasso che di pasta salda nel senso che tutto quello che faccio e solo 
per le continue prove ma non perchè le ho studiate !! e con il picbasic 
e molto più semplice.
Comunque ho capito che bisogna fare un po di cura dimagrante ! e cosi 
farò e se ci riesco qualche passo in ASM !!
Grazie
Jack

 Grazie
Nada, ciao!
Stefano


 che a trasferire e adattare il programma su un chip più capiente ?
ottimizzare!
e' C o assembler o altro ?
saluti

 Peccato ..scoperto ! :(
in PicBasic è molto facile fare un po' di dieta e anche dimezzare il codice, 
iniziando con il limitare all'indispensabile le righe di debug (se ne hai).
Poi prova qua e la a sopprimere una riga e vedere quando mangia di codice, 
così ti rendi conto dove devi lavorare per ottimizzare, alcune istruzioni 
sono golosissime.
Marco 

 ne hai).
il consiglio che sento di dare consiste nel togliere nei fuses il watchdog
ed inserire DEFINE NO_CLRWDT 1

 ed inserire DEFINE NO_CLRWDT 1
Se ho intuito cosa significa l'operazione direi che forse convenga 
lasciare attivo il watchdog e inserire manualmente le istruzioni di 
reset dove servono davvero!
Ciao!
Marco / iw2nzm

 dove servono davvero!
Questa cosa anche se trattata in un altro post, non l'ho mai capita in 
fondo, cioe' come faccio a sapere dove mettere manualmente l'istruzione che 
ricarica il watchdog senza sapere nei dettagli cosa combina il compilatore? 
il PicBasiPro della Melabs genera un listato in assembler bisognerebbe 
studiare quello per capire come fare manulamente la cosa, oppure c'e' 
qualcosa come l'acqua calda che mi sfugge? 

 qualcosa come l'acqua calda che mi sfugge? 
Io non sono la persona più indicata a rispondere. Ma in generale il 
watchdog serve a evitare che un errore dovuto a una condizione anomala 
(non prevista) nel programma o anche a un problema hardware possano 
bloccare il micro. Se si farcisce il codice in maniera tale che comunque 
vada il contatore viene resettato perde la sua efficacia.
Per sapere come mettere le istruzioni immagino ci voglia un trattato... 
io nel mio piccolo le inserisco nel ciclo principale (dove sono sicuro 
che il programma passa sempre) o in qualche funzione che *so* che ha 
bisogno di tempo per essere eseguita.
Il punto è che il compilatore non sa che sta facendo il tuo programma 
quindi come può sapere dove mettere quelle istruzioni? IMHO, almeno....
Ciao!
Marco / iw2nzm

 Per sapere come mettere le istruzioni immagino ci voglia un trattato... 
Facciamo due o tre. ;-)


il programma genera assembler, il compilatore calcola dove mettere 
l'istruzione di ricarica watchdog, semplicemente analizzando il flusso 
assembler, sa per ogniistruzione quanti cicli macchina e quindi........... 

 watch-dog.
Ho inserito DEFINE NO_CLRWDT 1 e ho tolto la spunta watchdog e sono 
passato da 8062 k a 7941 k ...qualcosa ho cosi liberato per aggiunte di 
nuovo codice.
Quando avrò più tempo voglio provare a inserire qualche  pezzo di assembler.
Grazie !!
Jack