
|
![]() | #1 (permalink) Top |
User Data registr.: 16-11-2008 Residenza: Riva del Garda - TN
Messaggi: 429
| pic con memoria insufficiente
salve a tutti ![]() sono un nuovo appassionato di elettronica e mi hanno chiesto di fare una scheda con dei pulsanti e un LCD alfanumerico per un aggiornamento di dati in calssifica per il tiro con l'arco (possibilità di classifica quasi in tempo reale in poche parole). l'interfaccia è molto comoda, al momento del recupero delle frecce si inseriscono i dati e durante il tiro un operatore usa un interfaccia per pc che manda un segnale sulla seriale e riceve di ritorno i dati dal paglione che ha "chiamato". scriverlo così è difficile ![]() ora il grande problema, la programmazione del pic la sto facendo in c (comidità perchè sviluppo anche per windows e il c è praticamente universale) e il grande problema è che non riesco a ridurre troppo il codice e al momento della compilazione mi dice che non c'è abbastanza ROM. in poche parole non c'è abbastanza memoria nel pic giusto? (il pic lo scelgo all'inizio del programma). le librerie che uso sono messe a disposizione dal programma. il pic da me utilizzato è il pic 16F628 al momento del codice non ancora finito (lo compilo man manno per evitare di dover fare grandi correzioni alla fine di tutto il programma) attualmente il file .hex generato è di 11KB. è probabile sia troppo grande per il pic? è possibile chhe altrimenti l'errore sia dato a causa del programma (sono in versione demo e c'è scritto che l'output è limitato a 2000 parole di compilazione ![]() in caso il problema sia dato dalla mmemoria non sufficiente devo ricorrere alle EEPROM? se sì come si usano? ![]() grazie in anticipo, spero di essermi spiegato. Lol21 |
![]() | ![]() |
![]() | #2 (permalink) Top |
User Data registr.: 10-06-2007 Residenza: Sansepolcro (Ar)
Messaggi: 1.948
|
La eeprom non la puoi usare come memoria di programma. Il tuo problema è probabilmente dovuto al limite del compilatore, guarda bene se ti scrive sotto che è la demo quando compili. Penso che parli di MikroC, giusto? Se è come Mikrobasic, ti da anche le statistiche che offrono info sull'occupazine della memoria. |
![]() | ![]() |
![]() | #3 (permalink) Top |
User Data registr.: 06-08-2007 Residenza: Empoli
Messaggi: 1.813
|
A me risulta che il 16f628a disponga di 2048 word di memoria programma. Decisamente molto meno di quello che risulta essere il tuo programma compilato, da quanto scrivi... La prima impressione, ma parlo senza conoscere i dettagli, è che il tuo programma sia poco ottimizzato e includa libreria già pronte delle quali forse puoi fare a meno. Certo, con questo pic non puoi permetterti molto; considera pic con più memoria. Ad esempio, il 18F2455 con 24K.
__________________ ....... |
![]() | ![]() |
![]() | #4 (permalink) Top |
User Data registr.: 16-11-2008 Residenza: Riva del Garda - TN
Messaggi: 429
|
uhm.. ![]() effettivamente il codice che sto scrivendo non è poi corto, contate che devo fare un sacco di giri di pulsanti, se volete posso allegare il codice. come righe di codice sono arrivato a 193 ma non ho finito perchè devo fare ancora 2 cicli di switch. il compilatore è mikroc pro e le librerie sono quelle incluse, tengo le indispensabili ovvero per le stringhe, per i lavori sull'lcd, le librerie per il controllo dell'lcd appunto e le software_UART per il controllo dell'uart. il datasheet del pic dichiara 2048 parole. non potrebbe esserci un modo per limitare i cicli di switch? nel senso, ora io ogni volta scrivo: Codice: switch(PORTA){ case 1: freccia[nf] = 1; break; case 2: freccia[nf] = 2; break; case 4: freccia[nf] = 3; break; case ecc... } grazie comunque fin'ora lol21 p.s.: le statistiche di mikroc indicano che ho 2048 parole di programmazione in totale appunto, e ho fin'ora usato 2006 parole. probabilmente più avanti cambierò pic, ma per ora ho questo per il primo prototipo (ne devo fare ben 11). |
![]() | ![]() |
![]() | #5 (permalink) Top | |
User Data registr.: 06-08-2007 Residenza: Empoli
Messaggi: 1.813
| Citazione:
Codice: switch(PORTA){ case 1: freccia[nf] = 1; break; case 2: freccia[nf] = 2; break; case 4: freccia[nf] = 3; break; case ecc... } Codice: freccia[nf] = PORTA; ![]()
__________________ ....... | |
![]() | ![]() |
![]() | #6 (permalink) Top |
User Data registr.: 16-11-2008 Residenza: Riva del Garda - TN
Messaggi: 429
|
uhm... ci sto riflettendo, per ora posso dirti che non posso fare come fai tu perchè in realtà (come avrai sicuramente capito) i numeri lì rappresentati sono le traduzioni in decimale dei numeri binari. potrei però fare una cosa un po complicata con un array giusto? in caso dovrei dichiarare un int con 128 elementi? ma se io richiamo PORTA il valore mi ritorna in decimali o binario? ![]() non ci ho mai provato, certo risparmierei un sacco di righe ciao lol21 |
![]() | ![]() |
![]() |
Bookmarks |
| |
![]() | ||||
Discussione | Autore discussione | Forum | Commenti | Ultimo Commento |
alimentatore insufficiente??? | molale81 | Batterie e Caricabatterie | 2 | 09 aprile 09 23:35 |