Pages: 1 2 [3] 4   Go Down
Author Topic: [RISOLTO] Probabile "saturazione" di risorse ram  (Read 2856 times)
0 Members and 1 Guest are viewing this topic.
Capo d'Orlando
Offline Offline
God Member
*****
Karma: 1
Posts: 560
Electronics & Web Dev, Unix User, Ω LEO, Rock/Deep Music, Tech/Science/Finance addicted, Ski/Snowboard and much more …
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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 ?
« Last Edit: January 02, 2013, 11:17:22 am by anerDev » Logged


Offline Offline
Edison Member
*
Karma: 26
Posts: 1339
You do some programming to solve a problem, and some to solve it in a particular language. (CC2)
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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...)
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 327
Posts: 22633
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

@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
Logged


Capo d'Orlando
Offline Offline
God Member
*****
Karma: 1
Posts: 560
Electronics & Web Dev, Unix User, Ω LEO, Rock/Deep Music, Tech/Science/Finance addicted, Ski/Snowboard and much more …
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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

 smiley-cool
Logged


Offline Offline
Edison Member
*
Karma: 26
Posts: 1339
You do some programming to solve a problem, and some to solve it in a particular language. (CC2)
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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)
Logged

Capo d'Orlando
Offline Offline
God Member
*****
Karma: 1
Posts: 560
Electronics & Web Dev, Unix User, Ω LEO, Rock/Deep Music, Tech/Science/Finance addicted, Ski/Snowboard and much more …
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

@leo72

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

Mi consigli il Mega ?

EDIT:

@tuxduino coincide ... Usano troppa ram !
« Last Edit: January 02, 2013, 11:42:52 am by anerDev » Logged


Offline Offline
Edison Member
*
Karma: 26
Posts: 1339
You do some programming to solve a problem, and some to solve it in a particular language. (CC2)
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hey, 'spe che secondo me ci sono margini di miglioramento smiley

Ad esempio, comincia con eliminare cose come questa:

Code:
Serial.println("**************************************");

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

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

Sto facendo un po' di questi esperimenti per vedere l'effetto di queste modifiche unitamente all'uso della macro F().
Logged

Offline Offline
Edison Member
*
Karma: 26
Posts: 1339
You do some programming to solve a problem, and some to solve it in a particular language. (CC2)
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

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

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


 smiley-cool
Logged

Capo d'Orlando
Offline Offline
God Member
*****
Karma: 1
Posts: 560
Electronics & Web Dev, Unix User, Ω LEO, Rock/Deep Music, Tech/Science/Finance addicted, Ski/Snowboard and much more …
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ho tolto completamente il:

Code:
Serial.println("**************************************");

Ho fatto la funzione

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

e sostituito tutti i

Code:
Serial.print(";");


con

Code:
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

Logged


Offline Offline
Edison Member
*
Karma: 26
Posts: 1339
You do some programming to solve a problem, and some to solve it in a particular language. (CC2)
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 smiley
Logged

Offline Offline
Edison Member
*
Karma: 26
Posts: 1339
You do some programming to solve a problem, and some to solve it in a particular language. (CC2)
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

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

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


Code:
#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("3339921212", 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.
Logged

Capo d'Orlando
Offline Offline
God Member
*****
Karma: 1
Posts: 560
Electronics & Web Dev, Unix User, Ω LEO, Rock/Deep Music, Tech/Science/Finance addicted, Ski/Snowboard and much more …
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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 !
« Last Edit: January 02, 2013, 12:01:04 pm by anerDev » Logged


Offline Offline
Edison Member
*
Karma: 26
Posts: 1339
You do some programming to solve a problem, and some to solve it in a particular language. (CC2)
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Capo d'Orlando
Offline Offline
God Member
*****
Karma: 1
Posts: 560
Electronics & Web Dev, Unix User, Ω LEO, Rock/Deep Music, Tech/Science/Finance addicted, Ski/Snowboard and much more …
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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

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

Dimenticavo, Auguri !
Logged


Offline Offline
Edison Member
*
Karma: 26
Posts: 1339
You do some programming to solve a problem, and some to solve it in a particular language. (CC2)
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ricambio smiley
Logged

Pages: 1 2 [3] 4   Go Up
Jump to: