Errore comunicazione tra due seriali.

Buongiorno e BUON ANNO!!!. Avrei bisogno di un consiglio su come risolvere il mio problema riguardante la comunicazione tra due seriali. Premetto che sto utilizzando come microprocessore un Atmega644P, a cui ho collegato alla seconda porta seriale modulo GSM Sim900a (passando per un MAX232). Se provo a caricare il seguente sketch:

void setup() {
  Serial.begin(115200);
  Serial1.begin(115200);
}
void loop() {
  if (Serial.available()) {
    Serial1.write(Serial.read());
  }
  if (Serial1.available()) {
    Serial.write(Serial1.read());
  }
}

non ho alcun tipo di problema, nel senso che riesco a comunicare con il modulo GSM e ad avere delle stringhe di risposta. Ora, se lo stesso sketch provo ad inserirlo nello sketch del mio progetto non riesco più a comunicare con il modulo GSM, e se aggiungo due Serial print nel voidSetup() tipo:

Serial.println("Goodnight moon!");
Serial1.println("Hello, world?");

Ottengo

“Goodnight moon!”   
“H”

Secondo me potrebbe trattarsi di un problema di memoria troppo piena. Dal log di compilazione dell IDE di arduino risulta:

Lo sketch usa 41.130 byte (62%) dello spazio disponibile per i programmi. Il massimo è 65.536 byte.
Le variabili globali usano 3.124 byte (76%) di memoria dinamica, lasciando altri 972 byte liberi per le variabili locali. Il massimo è 4.096 byte.
Poca memoria disponibile, potrebbero presentarsi problemi di stabilità.

Se secondo voi risulta essere un problema di memoria. cosa dovrei ridurre nel mio sketch?? Altrimenti cosa mi consigliate di fare?? Ovviamente sono disponibile a dare altre info riguardo al mio progetto. Grazie a tutti!!!

perché

(passando per un MAX232).

Quanto ne so io ne l' uno ne l' atro ha un interfaccia RS232 ma una seriale con livelli TTL.

Sí potrebbe essere un problema di RAM esaurita.

Ciao Uwe

Ciao uwefed e grazie per la risposta. Scusa la domanda stupida, ma ridurre la RAM intendi diminuire i 41.130 byte di spazio utilizzato per il programma, oppure i 3.124 byte utilizzati per le variabili globali?? Grazie.

I 41.130byte di flash sono fissi per tutta l'esecuzione del programma, finché non arrivi a 100% puoi stare tranquillo. Quello che è problematico è che su 4kByte di ram tu con le sole variabili globali ne usi i 3/4, lasciando pochissimo spazio per lo stack e per lo heap, se questi collidono il sistema inizia ad eseguire operazioni su dati "falsati" in poche parole non funziona piu.

Grazie RobertoBochet, modificherò il mio sketch tenendo conto delle tue considerazioni.