spacer.png, 0 kB

Torna indietro   Roboitalia.com - Il primo portale in Italia sulla robotica amatoriale > Robotica di base > Arduino

Rispondi
 
Strumenti discussione Modalità  visualizzazioe
  #1  
Vecchio 27-01-2014, 10.42.53
bigmike bigmike non è collegato
Robottaro senior
 
Data registrazione: 12-01-2013
Residenza: Treviso
Messaggi: 55
Potenza reputazione: 31
bigmike E' per ora ancora un mistero
Predefinito Gestione memoria per variabili stringa.

Sto realizzando una sorta di pannello di controllo, o forse sarebbe meglio dire un piccolo terminale, con Arduino UNO, un LCD e un Keypad 4x4.

La funzionalità del software non mi crea grossi problemi, anche perché piuttosto semplice e ricorsiva.
Quello che mi preoccupa è la gestione delle stringhe di testo.
Dovendo visualizzare numerose serie di menu e sottomenu, temo di saturare lo spazio di RAM a disposizione.

Osservando il messaggio che compare dopo la compilazione del software, ho notato che all’inserimento o meno di un’istruzione del tipo:


String myStr = “0123456789”;


corrisponde l’esatta differenza di 10byte sul file binario generato.

Considerato che tali stringhe non saranno mai oggetto di modifica, è corretto pensare che le stesse saranno allocate nella memoria di programma e non andranno ad occupare l’area RAM riservata alle variabili?
Rispondi citando
  #2  
Vecchio 27-01-2014, 10.49.14
L'avatar di sergio_camici
sergio_camici sergio_camici non è collegato
Administrator
 
Data registrazione: 24-05-2002
Residenza: Binasco (MI)
Età : 55
Messaggi: 2,665
Potenza reputazione: 304
sergio_camici La sua reputazione è oltre la sua famasergio_camici La sua reputazione è oltre la sua famasergio_camici La sua reputazione è oltre la sua famasergio_camici La sua reputazione è oltre la sua famasergio_camici La sua reputazione è oltre la sua famasergio_camici La sua reputazione è oltre la sua famasergio_camici La sua reputazione è oltre la sua fama
Predefinito

non ho la certezza ma credo che aggiungere const sia meglio.
comunque fai in un attimo a fare una prova mettendo un tot di stringhe a caso e vedere se ti consuma la ram
__________________
ciao
Sergio
---
Hai deciso di costruire un robot? Bene...
Cominciamo dalle brutte notizie: non e' facile...
Rispondi citando
  #3  
Vecchio 27-01-2014, 11.09.36
L'avatar di marnic
marnic marnic non è collegato
Administrator
 
Data registrazione: 24-05-2002
Residenza: Monselice (PD)
Età : 58
Messaggi: 5,458
Potenza reputazione: 423
marnic La sua reputazione è oltre la sua famamarnic La sua reputazione è oltre la sua famamarnic La sua reputazione è oltre la sua famamarnic La sua reputazione è oltre la sua famamarnic La sua reputazione è oltre la sua famamarnic La sua reputazione è oltre la sua famamarnic La sua reputazione è oltre la sua famamarnic La sua reputazione è oltre la sua famamarnic La sua reputazione è oltre la sua fama
Predefinito

I menu/sottomenu nonchè i messaggi che vai a scrivere sul display mangiano memoria, sicuramente programma, per la RAM non conosco arduino e compilatore.
Se stai usando un LCD seriale con keypad annesso stai usando probabilmente il bus I2C, nel caso io ho semplicemente aggiunto una memoria tipo 24LC256 dove memorizzo le frasi da 16 o 20 caratteri a seconda dei caratteri per riga del display poi da SW impostavo ad esempio frase=1, quel valore moltiplicato 16 o 20 rappresenta l'indirizzo eeprom da dove iniziare a leggere tutta la riga
La cosa interessante di questo sistema è che ad esempio se hai dall'indirizzo 1 al 1000 le frasi in italiano, dal 1001 al 2000 quelle in inglese dal 2001 al 3000 in francese tu puoi:

lingua_scelta=1 (oppure 2 o 3)
frase=1
indirizzo da leggere= frase*16+lingua_scelta*1000

Ottieni che puoi avere i messaggi in tutte le lingue che vuoi semplicemente aggiornano la eeprom e la riga di programma che definisce quante lingue hai
__________________
Marnic
Roboitalia Staff
www.fabbrimarco.com
Rispondi citando
  #4  
Vecchio 27-01-2014, 11.30.35
L'avatar di marnic
marnic marnic non è collegato
Administrator
 
Data registrazione: 24-05-2002
Residenza: Monselice (PD)
Età : 58
Messaggi: 5,458
Potenza reputazione: 423
marnic La sua reputazione è oltre la sua famamarnic La sua reputazione è oltre la sua famamarnic La sua reputazione è oltre la sua famamarnic La sua reputazione è oltre la sua famamarnic La sua reputazione è oltre la sua famamarnic La sua reputazione è oltre la sua famamarnic La sua reputazione è oltre la sua famamarnic La sua reputazione è oltre la sua famamarnic La sua reputazione è oltre la sua fama
Predefinito

Visto che mi sgrido da solo perchè nelle righe di programma non si dovrebbero MAI usare numeri... te la riscrivo meglio:

Costanti:
italiano=1
inglese=2
francese=3
....
caratteri_per_riga=16 (oppure 20, 40, 8....)
offset_lingue=1000 (o quello che vuoi)

lingua=italiano
frase=x (x rappresenta il numero di frase che ti serve scrivere)
ind_da_leggere=frase*caratteri_per_riga+lingua*off set_lingue

avrai poi un ciclo o un'istruzione che legge i "caratteri_per_riga" indirizzi successivi a "ind_da_leggere"
__________________
Marnic
Roboitalia Staff
www.fabbrimarco.com
Rispondi citando
  #5  
Vecchio 27-01-2014, 13.05.33
bigmike bigmike non è collegato
Robottaro senior
 
Data registrazione: 12-01-2013
Residenza: Treviso
Messaggi: 55
Potenza reputazione: 31
bigmike E' per ora ancora un mistero
Predefinito

Avevo già provato con "const", ma almeno visivamente dava gli stessi risultati.

Da quanto ho letto in giro, sembra sia un limite del sistema Arduino, non offrire una sorta la quantità di RAM utilizzata.

Per quanto riguarda il suggerimento di Marnic, era un'opzione a cui avevo già pensato, solo che volevo realizzarla più in là su SD come secondo step.

Visto che non ho in progetto ulteriori estensioni del sistema, in alternativa all' I2C ho preferito cablare lcd, keypad e futura SD direttamente sui pin di Arduino.

La mia era un'occasione per capire una volta per tutte come funziona il compilatore e come ottimizzare al meglio la memoria del sistema.

Coumnque grazie.
Rispondi citando
Rispondi


Utenti attualmente attivi che stanno leggendo questa discussione: 1 (0 utenti e 1 ospiti)
 
Strumenti discussione
Modalità  visualizzazioe

Regole di scrittura
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code è Attivato
Le smilies sono Attivato
[IMG] è Attivato
Il codice HTML è Disattivato

Vai al forum

Discussioni simili
Discussione Autore discussione Forum Risposte Ultimo messaggio
da stringa a array sharky P. in C, C++ 8 08-10-2012 17.29.42
variabili argc e argv cipollino83 OpenCV 3 05-04-2010 18.57.32
Particolarità delle variabili chiccow P. in C, C++ 13 30-04-2008 16.43.45
Variabili VB deusexmachina Forum generale 4 17-02-2005 10.08.17
Memoria zen2003 Elettronica 6 08-06-2003 13.44.32


Tutti gli orari sono GMT. Adesso sono le: 13.54.56.


Basato su: vBulletin Versione 3.8.8
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
Realizzazione siti web Cobaltica Foligno
spacer.png, 0 kB