Arduino Forum

International => Italiano => Software => Topic started by: anerDev on Jan 01, 2013, 07:36 pm

Title: [RISOLTO] Probabile "saturazione" di risorse ram
Post by: anerDev on Jan 01, 2013, 07:36 pm
Buonasera gente !

Tanti auguri a tutti !  :smiley-mr-green:

Sto costruendo un data logger, con sensore dht, mpl115a2, gps/gsm shield e sd shield.

Quando compilo il primo sketch (pre_final3_at), ho il seguente output (tutto ok):

Quote

CONTROLLO COMUNICAZIONE MODULI IN CORSO
Modulo DHT: OK
Modulo MPL115A2: OK
Modulo GSM/GPS: OK
   Reset del GPS in corso, 60 secondi
   Attivazione del GPS in corso, 180 secondi
**************************************

0.000000;0.000000;0.000000;11.90;69.60;102.30;
3807.957847;1443.556526;67.453888;11.80;69.90;102.30;
3807.958406;1443.559435;67.726128;11.70;69.80;102.30;
0.000000;0.000000;0.000000;11.70;69.70;102.14;
3807.921071;1443.520643;65.850891;11.60;69.80;102.14;
3807.956760;1443.559905;66.605232;11.60;69.80;102.02;
3807.950549;1443.557208;67.353096;11.70;70.00;102.26;
3807.951304;1443.559770;67.430756;11.60;70.00;102.26;
3807.951304;1443.559770;67.430756;11.70;70.00;102.26;

[...]


Mentre con il secondo sketch (pre_final3_at_sd), dove viene aggiunto il necessario per scrivere sulla sd, ho il seguente output (tutto sballato):


Quote



Modulo DHT: OK



Modulo DHT: OK



Modulo DHT: OK

[...]


Può essere un problema di Ram ? Ovvero la scrittura su sd finisce le ultime risorse disponibili ?

In allegato trovate gli sketch completi di output !

Grazie
Title: Re: Probabile "saturazione" di risorse ram
Post by: marcello.romani on Jan 01, 2013, 07:56 pm
Per una rapida verifica io farei così: usa la funzione freeRam() (cercala qui o con google, ce ne sono diverse), e prova ad usare la macro F() per tutte le stringhe literal che hai.

Uno string literal è ad esempio "CIAO".
Title: Re: Probabile "saturazione" di risorse ram
Post by: anerDev on Jan 01, 2013, 08:22 pm
con lo sketch che funziona esce un 325 mentre con l'altro, dove ho aggiunto l'sd esce questo (tra l'altro si resetta dato che il controllo dei moduli deve avvenire una sola volta):

Quote

--368

Modulo DHT: OK


-368

Modulo DHT: OK


-368

Modulo DHT: OK




Quindi l'SD va a saturare gli ultimi byte di Ram ?



Title: Re: Probabile "saturazione" di risorse ram
Post by: marcello.romani on Jan 01, 2013, 08:27 pm
Non ho idea di quanta ram necessiti la libreria SD.

Comunque hai provato F() ? Dovrebbe liberare un po' di ram.
Title: Re: Probabile "saturazione" di risorse ram
Post by: anerDev on Jan 01, 2013, 08:31 pm
No, ho provato lo sketch di esempio e non vedo nessun F() !
Come si deve settare ?

Purtroppo la libreria del GPS richiede malta ram di suo.

Ma già dal fatto che si riavvia non è un buon segno o sbaglio ?
Quindi mi sa che devo passare all'Arduino Mega !

  :.
Title: Re: Probabile "saturazione" di risorse ram
Post by: marcello.romani on Jan 01, 2013, 08:40 pm
Code: [Select]
Serial.print("CIAO");

Code: [Select]
Serial.print(F("CIAO"));

la seconda versione occupa meno RAM perché la stringa non viene letta nella RAM prima di essere "stampata", ma viene prelevata direttamente dalla PROGMEM.

Effettua questa modifica su tutte le stringhe "literal", come ho detto prima, e vedi se non si riavvia più.

Il riavvio del micro è un indicatore abbastanza certo di un problema di esaurimento RAM.
Title: Re: Probabile "saturazione" di risorse ram
Post by: marcello.romani on Jan 01, 2013, 08:41 pm
PS: non vorrei sembrarti scortese, ma quando mi danno un suggerimento che non capisco di solito googlo :P
Title: Re: Probabile "saturazione" di risorse ram
Post by: anerDev on Jan 01, 2013, 09:17 pm
Hai ragione  :smiley-mr-green: :smiley-mr-green:

Niente da fare

Quote
CIAO-368

Modulo DHT: OK


devo passare al Mega
Title: Re: Probabile "saturazione" di risorse ram
Post by: pablos71 on Jan 01, 2013, 10:41 pm
Non credo risolverai con una mega .... ma tu e skosso siete la stessa persona?
perchè guarda caso il tuo sketch ha le stesse variabili di quelle di skosso che ha pubblicato ieri :)

ciao
Title: Re: Probabile "saturazione" di risorse ram
Post by: anerDev on Jan 01, 2013, 10:56 pm
Hauahau no no, forse utilizza il mio stesso modulo, SIM908 !

Comunque perché con il mega non risolvo ?

L'UNO ha 2 KB mentre il mega 8
Title: Re: Probabile "saturazione" di risorse ram
Post by: leo72 on Jan 01, 2013, 11:00 pm

Può essere un problema di Ram ? Ovvero la scrittura su sd finisce le ultime risorse disponibili ?


La libreria SD occupa un sacco di risorse. Controlla intanto il consumo statico del tuo sketch usando avr-size.
Title: Re: Probabile "saturazione" di risorse ram
Post by: pablos71 on Jan 02, 2013, 12:24 am
Si la SD prende un bel po' di ram, soprattutto in lettura e scrittura infatti nel mio progetto ho dovuto abolirla per quanto riguarda il logger, per il caricamento all'avvio del sistema e per gli aggiornamenti dei dati va bene.

Puoi provare con una mega, ma se pensi di espandere lo sketch ti ritroverai come me di nuovo con dei limiti.
Dovresti rivedere se tutte quelle matrici pubbliche le puoi spostare o passare tra le varie funzioni, verificare se gli int non superano i 255 e cambiarli in byte, alcune variabili dichiarale const se non variano .... ma soprattutto i serialprint lunghi danno un sacco di problemi. Studiare le librerie e vedere se puoi fare dei tagli, insomma rivederle. Tu attualmente stai occupando circa 290byte di variabili tutto il resto sta nelle librerie e nei tuoi messaggi seriali.

Arduino con il suo atmel sarebbe valido come strumento, ma pecca su librerie di funzionamento che hanno un po' di difetti, queste non sono ottimizzate per lavorare in simbiosi con molte altre, ciascun utente si inventa la lib usando più risorse di quelle che servono solo perchè a lui serviva quella, senza pensare che possono servirne anche altre nell'intero progetto... prendi ad esempio la libreria UDP per aggiornare i time dai server NTP, perchè mi mette una matrice da 255 byte quando il messaggio non supera i 16 byte (ma siii stiamo larghi non si sa mai), perchè molti nelle lib mettono int o long quando per certo le cifre non arrivveranno mai oltre il byte? 

La morale è prendi anche 1terabyte, ma i programmatori dovrebbero pensare di più quando inventano e pubblicano librerie e sketch apparentemente formidabili.

ciao

Title: Re: Probabile "saturazione" di risorse ram
Post by: anerDev on Jan 02, 2013, 12:44 am
@leo72: per consumo statico intendo quanto pesa tutto lo sketch ?

@pablos: non so ancora lavorare a livello di libreria, cioè scomporle per capire dove migliorare/tagliare, ma avevo pensato pure io che queste librerie non sono molto ottimizzate, ma non al livello della tua spiegazione  ;).

Oltre allo shield sd, gps/gsm, ed i due sensori, devo inserire questo trasmettitore: http://ukhas.org.uk/guides:linkingarduinotontx2

Ora, secondo voi con la Mega risolvo tutti i problemi o mi conviene usare un altro Arduino Uno al solo scopo di salvare i dati sulla sd e trasmettere ?

Ovvero nell'Arduino UNO #1 monto i sensori ed il gps/gsm shield, nell'Arduino UNO #2 monto l'sd shield e il trasmettitore, quindi collego il #1 al #2 che provvederà alla memorizzazione ?

Grazie
Title: Re: Probabile "saturazione" di risorse ram
Post by: leo72 on Jan 02, 2013, 10:26 am

@leo72: per consumo statico intendo quanto pesa tutto lo sketch ?

Sì. Ma non il consumo di Flash (quello te lo dice già l'IDE) ma quello di RAM.
http://www.leonardomiliani.com/?p=572

@pablos e anerDev:
vi consiglio la Petif FatFS:
http://elm-chan.org/fsw/ff/00index_p.html
è stata scritta per l'uso con i chip della famiglia Tiny ed ha quindi un consumo inferiore di risorse rispetto alla SD distribuita con l'IDE
Title: Re: Probabile "saturazione" di risorse ram
Post by: anerDev on Jan 02, 2013, 11:11 am
Esattamente, dove si trova avr-size ?
Per quanto riguarda il Macintosh, entro su Arduino.app > Contents > Resources > Java e qua ho tutto il programma (cartella librerie, example, reference, etc etc) ma non riesco a trovare ave-size !

Invece ho trovato il file .hex che vi allego !

Invece per quanto riguarda Petit ora vedo come implementare questa libreria su arduino !  :smiley-mr-green:

Grazie
Title: Re: Probabile "saturazione" di risorse ram
Post by: leo72 on Jan 02, 2013, 12:01 pm

Esattamente, dove si trova avr-size ?
Per quanto riguarda il Macintosh, entro su Arduino.app > Contents > Resources > Java e qua ho tutto il programma (cartella librerie, example, reference, etc etc) ma non riesco a trovare ave-size !

Non conosco il Mac.
Però se attivi la compilazione "verbose" (File/Preferenze) poi nella finestra dell'IDE in basso vedi il percorso da dove vengono richiamati i vari comandi, così trovi anche avr-size.

Quote

Invece ho trovato il file .hex che vi allego !

Non l'hai allegato  :P

Quote

Invece per quanto riguarda Petit ora vedo come implementare questa libreria su arduino !  :smiley-mr-green:

Grazie

Basta copiarla in /sketchbook/libraries (o per lo meno così mi par di ricordare, è passato 1 anno da quando l'ho usata)
Title: Re: Probabile "saturazione" di risorse ram
Post by: anerDev on Jan 02, 2013, 02:11 pm
Quote
Non conosco il Mac.
Però se attivi la compilazione "verbose" (File/Preferenze) poi nella finestra dell'IDE in basso vedi il percorso da dove vengono richiamati i vari comandi, così trovi anche avr-size.


/Applications/Arduino.app/Contents/Resources/Java/hardware/tools/avr/bin/avr-g++ ? può essere ?

Nella cartella hardware/tools avevo trovato una cartella ave, ma non c'era nessun accenno ad "avr-size" però nel verbose output viene molte volte ripetuto quel percorso !
Per si e per no ecco tutti i tool  che si trovano nella cartella bin (gli eseguibili) contenuti nella cartella avr:

Quote

ar   c++   g++   gccbug   ld   objcopy   ranlib
as   cpp   gcc   gcov   nm   objdump   strip


Quote
Non l'hai allegato 


Ancora devo smaltire i vari danni del capodanno ! hahua or al'ho allegato

Quote
Basta copiarla in /sketchbook/libraries (o per lo meno così mi par di ricordare, è passato 1 anno da quando l'ho usata)


importato ! Ma non trovo nessun sketch similar .ino ! :/ ora googlo un pò per vedere cosa trovo
Title: Re: Probabile "saturazione" di risorse ram
Post by: leo72 on Jan 02, 2013, 02:37 pm

/Applications/Arduino.app/Contents/Resources/Java/hardware/tools/avr/bin/avr-g++ ? può essere ?

Lo devi avere, fa parte della toolchain. Deve stare in quel percorso.
Se dai /Applications/Arduino.app/Contents/Resources/Java/hardware/tools/avr/bin/avr-size cosa risponde il terminale?

Quote

importato ! Ma non trovo nessun sketch similar .ino ! :/ ora googlo un pò per vedere cosa trovo

Hai scaricato questo?
http://elm-chan.org/fsw/ff/pff2a.zip

Prova allora a fare così: crei in /sketchbook/libraries una cartella denominata pff (ho visto che il file header della lib si chiama pff.h) e poi scompattaci dentro tutti i file di quell'archivio. Poi crea uno sketch e prova a mettere #include "pff.h" e vedi se ti da errore.
Title: Re: Probabile "saturazione" di risorse ram
Post by: marcello.romani on Jan 02, 2013, 02:47 pm
...ricordando di chiudere tutte le finestre dell'IDE e di rilanciarlo dopo aver scompattato i file. Se "installi" una libreria mentre è avviato, non la "vede" fino al riavvio del programma.
Title: Re: Probabile "saturazione" di risorse ram
Post by: anerDev on Jan 02, 2013, 02:58 pm
Quote
Lo devi avere, fa parte della toolchain. Deve stare in quel percorso.
Se dai /Applications/Arduino.app/Contents/Resources/Java/hardware/tools/avr/bin/avr-size cosa risponde il terminale?


/Applications/Arduino.app/Contents/Resources/Java/hardware/tools/avr/bin/avr-size: 'a.out': No such file

Quote
Hai scaricato questo?
http://elm-chan.org/fsw/ff/pff2a.zip


yes ! Ho estratto la cartella "src" l'ho rinominata in pff ed esce:

Quote
/Applications/Arduino.app/Contents/Resources/Java/libraries/pff/diskio.c:48: error: conflicting types for 'disk_writep'
/Applications/Arduino.app/Contents/Resources/Java/libraries/pff/diskio.h:28: error: previous declaration of 'disk_writep' was here


La riga 48 corrisponde a questo:

Code: [Select]
DRESULT disk_writep (
BYTE* buff, /* Pointer to the data to be written, NULL:Initiate/Finalize write operation */
DWORD sc /* Sector number (LBA) or Number of bytes to send */
)


mentre la riga 28 del diskio.h:

Code: [Select]
DRESULT disk_writep (const BYTE*, DWORD);

Quote
...ricordando di chiudere tutte le finestre dell'IDE e di rilanciarlo dopo aver scompattato i file. Se "installi" una libreria mentre è avviato, non la "vede" fino al riavvio del programma.


:smiley-mr-green: :smiley-mr-green: :smiley-mr-green:
Title: Re: Probabile "saturazione" di risorse ram
Post by: anerDev on Jan 02, 2013, 03:04 pm
Dal file in allegato che ho messo non riuscite ad estrapolare la dimensione ?

Io per si e per no ho provato con il file ave-g++ ecco il risultato:

Quote
iMac:tmp andrea$ /Applications/Arduino.app/Contents/Resources/Java/hardware/tools/avr/bin/avr-g++ /tmp/sd.cpp.elf -C
/Applications/Arduino.app/Contents/Resources/Java/hardware/tools/avr/bin/../lib/gcc/avr/4.3.2/../../../../avr/bin/ld: unknown architecture of input file `/tmp/sd.cpp.elf' is incompatible with avr output
/Applications/Arduino.app/Contents/Resources/Java/hardware/tools/avr/bin/../lib/gcc/avr/4.3.2/../../../../avr/lib/crts8515.o:(.init9+0x0): undefined reference to `main'
Title: Re: Probabile "saturazione" di risorse ram
Post by: marcello.romani on Jan 02, 2013, 03:43 pm
Il programma è avr-size, non avr-g++ (che è il compilatore). Comunque non c'è alcun allegato :P
Title: Re: Probabile "saturazione" di risorse ram
Post by: anerDev on Jan 02, 2013, 04:04 pm
Non lo trovo avr-size ! :/
Ci sono solamente questi:

Quote
ar   c++   g++   gccbug   ld   objcopy   ranlib
as   cpp   gcc   gcov   nm   objdump   strip
Title: Re: Probabile "saturazione" di risorse ram
Post by: anerDev on Jan 02, 2013, 04:32 pm
TROVATO !

Quote
iMac:~ andrea$ /Applications/Arduino.app/Contents/Resources/Java/hardware/tools/avr/bin/avr-size  /tmp/sd.cpp.elf -C
AVR Memory Usage
----------------
Device: Unknown

Program:       0 bytes
(.text + .data + .bootloader)

Data:          0 bytes
(.data + .bss + .noinit)


iMac:~ andrea$


Cosa vuol dire ?
Title: Re: Probabile "saturazione" di risorse ram
Post by: leo72 on Jan 02, 2013, 04:42 pm
Che il file è vuoto. E mi suona strano il percorso perché l'IDE di Arduino crea una cartella temporanea in /tmp/build-4875634875609348569384569834
cioè con un numero creato da una sfilza di cifre che cambia di volta in volta. Lì dentro ci sono i file dopo che hai compilato lo sketch.

Per la Petit FatFs:
allora significa che non è una libreria installabile sull'IDE di Arduino.
Sinceramente non mi ricordo come la usai. Anche perché feci dei test e nulla più.
Googlando ho trovato questo:
https://github.com/mharizanov/petit_fatfs

E' un wrapper scritto per usare la Petit FatFs con Arduino
Title: Re: Probabile "saturazione" di risorse ram
Post by: anerDev on Jan 02, 2013, 04:52 pm
Quote
Che il file è vuoto. E mi suona strano il percorso perché l'IDE di Arduino crea una cartella temporanea in /tmp/build-4875634875609348569384569834
cioè con un numero creato da una sfilza di cifre che cambia di volta in volta. Lì dentro ci sono i file dopo che hai compilato lo sketch.


avevo spostato il file per rendere più facile la scrittura sul terminale ! Ora ho incollato il percorso originale (dopo aver ricompilato il tutto):

Quote
iMac:~ andrea$ /Applications/Arduino.app/Contents/Resources/Java/hardware/tools/avr/bin/avr-size  /var/folders/3f/s78gw1_94934mb_js4ljmh240000gn/T/build6753189683464400000.tmp/pre_final3_at_sd.cpp.elf -C
AVR Memory Usage
----------------
Device: Unknown

Program:   25408 bytes
(.text + .data + .bootloader)

Data:       2390 bytes
(.data + .bss + .noinit)


iMac:~ andrea$


Quote
Per la Petit FatFs:
allora significa che non è una libreria installabile sull'IDE di Arduino.
Sinceramente non mi ricordo come la usai. Anche perché feci dei test e nulla più.
Googlando ho trovato questo:
https://github.com/mharizanov/petit_fatfs

E' un wrapper scritto per usare la Petit FatFs con Arduino


Ho installato la libreria, rinominata correttamente ma quando verifico gli esempi mi dà sempre lo stesso errore (non ho modificato minimamente il codice):

Quote
'USIDR'  was not declared in this scope


:/
Title: Re: Probabile "saturazione" di risorse ram
Post by: marcello.romani on Jan 02, 2013, 04:58 pm
Quote
Data:       2390 bytes
(.data + .bss + .noinit)


Sbaglio o questo significa che viene allocata più ram di quanta ne sia disponibile sull'UNO (2K ?)
Title: Re: Probabile "saturazione" di risorse ram
Post by: leo72 on Jan 02, 2013, 05:04 pm

Quote
Data:       2390 bytes
(.data + .bss + .noinit)


Sbaglio o questo significa che viene allocata più ram di quanta ne sia disponibile sull'UNO (2K ?)

Eh già.
Title: Re: Probabile "saturazione" di risorse ram
Post by: leo72 on Jan 02, 2013, 05:07 pm
@anerDev:
apre che quel wrapper che ti ho passato sia per i Tiny84.
Prova questo
http://arduino.cc/forum/index.php/topic,37604.0.html
Title: Re: Probabile "saturazione" di risorse ram
Post by: anerDev on Jan 02, 2013, 05:13 pm
Quote
Eh già.


Allora ho 4 soluzioni:

- provare se con petit riesco ad utilizzare meno ram;
- provare a tagliere il superfluo dalle librerie (non ho le competenze) = soluzioe da scartare;
- usare un Mega;
- usare due Uno;

e c'è ancora da aggiungere il trasmettitore ntx2: http://ukhas.org.uk/guides:linkingarduinotontx2

In definitiva, usare il Mega mi sembra la soluzione meno problematica !

o sbaglio ?
Title: Re: Probabile "saturazione" di risorse ram
Post by: anerDev on Jan 02, 2013, 05:15 pm
Uso uno shield sd, quindi questa guida è valida lo stesso ? http://arduino.cc/forum/index.php/topic,37604.0.html

EDIT:

ho verificato il demo:   spi_init(); was not declared to this scope !

Uso un Mega e finiscono tutti i miei problemi ?
Title: Re: Probabile "saturazione" di risorse ram
Post by: marcello.romani on Jan 02, 2013, 05:32 pm
Stavo provando a compilare lo sketch che hai postato all'inizio, ma non capisco che libreria DHT hai usato.

Questa, forse ?

https://github.com/ringerc/Arduino-DHT22

(edit: volevo verificare il consumo di RAM inserendo la macro F() su tutte le stringhe...)
Title: Re: Probabile "saturazione" di risorse ram
Post by: leo72 on Jan 02, 2013, 05:33 pm
@anerDev:
vedo che quel thread è del 2009, sicuramente è per una versione dell'IDE vecchia per cui potrebbero esserci problemi di compatibilità.
Anch'io ho usato la PetitFs con l'IDE 002x, non l'ho mai usata con la 1.0.x
Title: Re: Probabile "saturazione" di risorse ram
Post by: anerDev on Jan 02, 2013, 05:34 pm
Ecco la lista delle librerie:

DHT: https://github.com/adafruit/DHT-sensor-library
MPL115A2: https://github.com/adafruit/Adafruit_MPL115A2
GPS/GSM: http://code.google.com/p/gsm-shield-arduino/downloads/list

8)
Title: Re: Probabile "saturazione" di risorse ram
Post by: marcello.romani on Jan 02, 2013, 05:38 pm
pre_final3_at_sd.ino, come l'hai postato tu, mi dà:

avr-size -C sketch_jan02a.cpp.elf
AVR Memory Usage
----------------
Device: Unknown

Program:   25412 bytes
(.text + .data + .bootloader)

Data:       2391 bytes
(.data + .bss + .noinit)
Title: Re: Probabile "saturazione" di risorse ram
Post by: anerDev on Jan 02, 2013, 05:39 pm
@leo72

allora penso che è un binario morto questo petit ! :/

Mi consigli il Mega ?

EDIT:

@tuxduino coincide ... Usano troppa ram !
Title: Re: Probabile "saturazione" di risorse ram
Post by: marcello.romani on Jan 02, 2013, 05:44 pm
Hey, 'spe che secondo me ci sono margini di miglioramento :)

Ad esempio, comincia con eliminare cose come questa:

Code: [Select]
Serial.println("**************************************");

Inoltre invece di ripetere n-volte istruzioni come
Code: [Select]
Serial.print(";"); potresti creare una che include solo quell'instruzione e richiamare tale funzione invece di duplicare il codice.

Code: [Select]

void serialPrintSemicolon() {
    Serial.print(";");
}


Sto facendo un po' di questi esperimenti per vedere l'effetto di queste modifiche unitamente all'uso della macro F().
Title: Re: Probabile "saturazione" di risorse ram
Post by: marcello.romani on Jan 02, 2013, 05:46 pm
AVR Memory Usage
----------------
Device: Unknown

Program:   25412 bytes
(.text + .data + .bootloader)

Data:       2025 bytes
(.data + .bss + .noinit)


8)
Title: Re: Probabile "saturazione" di risorse ram
Post by: anerDev on Jan 02, 2013, 05:52 pm
Ho tolto completamente il:

Code: [Select]
Serial.println("**************************************");

Ho fatto la funzione

Code: [Select]

void colonna() {
    Serial.print(";");
}


e sostituito tutti i

Code: [Select]
Serial.print(";");

con

Code: [Select]
colonna();

Ecco il risultato:

Quote
AVR Memory Usage
----------------
Device: Unknown

Program:   25322 bytes
(.text + .data + .bootloader)

Data:       2350 bytes
(.data + .bss + .noinit)


Non coincide col tuo ! O.0

Title: Re: Probabile "saturazione" di risorse ram
Post by: marcello.romani on Jan 02, 2013, 05:54 pm
Altra cosa... si potrebbe verificare se le dimensioni delle variabili (smsbuffer, ad esempio) che dichiari siano strettamente necessarie, o se si posa "fare con meno"...

Chiaro, con un mega tagli la testa al toro :)
Title: Re: Probabile "saturazione" di risorse ram
Post by: marcello.romani on Jan 02, 2013, 05:57 pm
AVR Memory Usage
----------------
Device: Unknown

Program:   25346 bytes
(.text + .data + .bootloader)

Data:       2025 bytes
(.data + .bss + .noinit)


Code: [Select]

#include "Wire.h"
#include "SoftwareSerial.h"
#include "SD.h"

// Dichiarazioni modulo SD
File record;

// Dichiarazioni modulo MPL115A2
#include "Adafruit_MPL115A2.h"
Adafruit_MPL115A2 mpl115a2;

// Dichiarazioni modulo DHT
#include "DHT.h"
#define DHTPIN 5
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);

// Dichiarazioni modulo GSM/GPS
#include "SIM900.h"
#include "sms.h"
#include "gps.h"

SMSGSM sms;
int numdata;
char smsbuffer[160];
char n[20];

GPSGSM gps;
char lon[15];
char lat[15];
char alt[15];
char time[20];
char vel[15];
char msg1[5];
char msg2[5];
char stat;
char inSerial[20];
int i=0;
boolean started=false;


void setup()
{
   Serial.begin(9600);

   dht.begin();

   mpl115a2.begin();

   Serial.println(F("CONTROLLO COMUNICAZIONE MODULI IN CORSO"));

   // Controllo stato modulo DHT
   if (isnan(dht.readTemperature()) || isnan(dht.readHumidity())) {
       Serial.println(F("Modulo DHT: ERRORE"));
   }
   else {
       Serial.println(F("Modulo DHT: OK "));
   }

   // Controllo stato modulo MPL115A2
   if (isnan(mpl115a2.getPressure())) {
       Serial.println(F("Modulo MPL115A2: ERRORE"));
   }
   else {
       Serial.println(F("Modulo MPL115A2: OK "));
   }

   // Controllo stato modulo GSM/GPS
   if (gsm.begin(2400)) {
       Serial.println(F("Modulo GSM/GPS: OK"));
       gsm.forceON(); //To ensure that SIM908 is not only in charge mode
       started=true;  
   }
   else {
       Serial.println(F("Modulo GSM/GPS: ERRORE"));
   }
   Serial.println(F("\tReset del GPS in corso, 60 secondi"));
   gsm.SimpleWriteln(F("AT+CGPSRST=1"));
   delay(60000);
   Serial.println(F("\tAttivazione del GPS in corso, 180 secondi"));
   gsm.SimpleWriteln(F("AT+CGPSPWR=1"));
   delay(180000);

   Serial.println();
};

void loop()
{
   record = SD.open("record.txt", FILE_WRITE);
   if (record) {

       serialhwread();
       gsm.SimpleRead();

       delay(20000); //Time for fixing

       gps.getPar(lon,lat,alt,vel,time);

       //  if (alt < 80) sms.SendSMS("333000000", lat, lon); //Invia coordinate

       record.print(lat);
       record.print(";");
       Serial.print(lat);
       Serial.print(';');

       record.print(lon);
       record.print(";");
       Serial.print(lon);
       Serial.print(';');

       record.print(alt);
       record.print(";");
       Serial.print(alt);
       Serial.print(';');

       record.print(dht.readTemperature());
       record.print(";");
       Serial.print(dht.readTemperature());
       Serial.print(';');

       record.print(dht.readHumidity());
       record.print(";");
       Serial.print(dht.readHumidity());
       Serial.print(';');

       record.print(mpl115a2.getPressure());
       record.print(";");
       Serial.print(mpl115a2.getPressure());
       Serial.print(';');

       record.println("");
       Serial.println("");

       record.close();

   }
   else {

       Serial.println(F("ERRORE scrittura record"));
   }

   delay(40000);

}

void serialhwread(){
   i=0;
   if (Serial.available() > 0){            
       while (Serial.available() > 0) {
           inSerial[i]=(Serial.read());
           delay(10);
           i++;      
       }

       inSerial[i]='\0';
       if(!strcmp(inSerial,"/END")){
           Serial.println("_");
           inSerial[0]=0x1a;
           inSerial[1]='\0';
           gsm.SimpleWriteln(inSerial);
       }
       //Send a saved AT command using serial port.
       if(!strcmp(inSerial,"TEST")){
           //      Serial.println("BATTERY TEST 1");
           //      gps.getBattInf(msg1,msg2);
           //      Serial.println(msg1);
           //      Serial.println(msg2);
           //      Serial.println("BATTERY TEST 2");
           //      gps.getBattTVol(msg1);
           //      Serial.println(msg1);
           stat=gps.getStat();
           if(stat==1)
               Serial.println(F("NOT FIXED"));
           else if(stat==0)
               Serial.println(F("GPS OFF"));
           else if(stat==2)
               Serial.println(F("2D FIXED"));
           else if(stat==3)
               Serial.println(F("3D FIXED"));
       }
       //Read last message saved.
       if(!strcmp(inSerial,"MSG")){
           Serial.println(msg1);
       }
       else{
           Serial.println(inSerial);
           gsm.SimpleWriteln(inSerial);
       }    
       inSerial[0]='\0';
   }
}

void serialswread(){
   gsm.SimpleRead();
}



La funzione printSemicolon() è una stupidaggine... evidentemente il compilatore è abbastanza "intelligente" da ottimizzare da solo questo aspetto.

PS: Uso Arduino 1.0.3 su Linux 32 bit. Scheda selezionata: Arduino 2009.
Title: Re: Probabile "saturazione" di risorse ram
Post by: anerDev on Jan 02, 2013, 05:59 pm
Purtroppo per le variabili avebo pensato la stessa cosa, ma provando non funziona più niente ! huahuahu

Allora dato che con il Mega risolvo il problema, opterò per quello !

Grazie 10000000 !!!

EDIT:

ho usato il tuo sketch:

Quote
VR Memory Usage
----------------
Device: Unknown

Program:   25342 bytes
(.text + .data + .bootloader)

Data:       2024 bytes
(.data + .bss + .noinit)



Niente, Mega è la soluzione !
Anche perchè dovrò aggiungere il trasmettitore !
Title: Re: Probabile "saturazione" di risorse ram
Post by: marcello.romani on Jan 02, 2013, 06:04 pm
Certo, anche se riuscissi a "tagliare" fino a rientrare nei 2k, poi con l'aggiunta di un altra libreria sforeresti di nuovo. Vai col mega, dunque :)
Title: [RISOLTO] Re: Probabile "saturazione" di risorse ram
Post by: anerDev on Jan 02, 2013, 06:08 pm

Certo, anche se riuscissi a "tagliare" fino a rientrare nei 2k, poi con l'aggiunta di un altra libreria sforeresti di nuovo. Vai col mega, dunque :)


:smiley-mr-green: :smiley-mr-green: :smiley-mr-green:

Dimenticavo, Auguri !
Title: Re: [RISOLTO] Probabile "saturazione" di risorse ram
Post by: marcello.romani on Jan 02, 2013, 06:10 pm
Ricambio :)
Title: Re: Probabile "saturazione" di risorse ram
Post by: leo72 on Jan 02, 2013, 11:01 pm

Certo, anche se riuscissi a "tagliare" fino a rientrare nei 2k, poi con l'aggiunta di un altra libreria sforeresti di nuovo. Vai col mega, dunque :)

Sforerebbe comunque. Il dato di avr-size è riferito al consumo statico. A run-time penso cresca senz'altro basta un salto per far crescere lo stack, ad esempio.aument