Software serial gives unreliable results

Hi,
I have an Arduino Ethernet board with an Arduino GSM shield. During testing and after excluding causes like power supply, bad connections, it appeared that the SoftwareSerial communication is unreliable. To demonstrate the problem I used this code (which is apart from demonstration purposes useless):

#include <SoftwareSerial.h>

char incoming_char = 0;
SoftwareSerial gsm(5,6);

void setup()
{
  // Initialize serial ports for communication.
  Serial.begin(9600);

  // Reset
  Serial.println("Start Reset");
  pinMode(7, OUTPUT);
  digitalWrite(7, HIGH);
  delay(12000);
  digitalWrite(7, LOW);
  delay(1000);
  Serial.println("End Reset");  

  gsm.begin(9600);

  }

void loop()
{
  if(gsm.available() > 0)
  {
    incoming_char = gsm.read();
      Serial.print(incoming_char);
  }

    gsm.println("AT");
    delay(200);
}

I use pin 5 and 6 for the communication, because I need pin 2 and 3 for interrupt handling later on in the development of my project.

The result I get is:

Start Reset
End Reset
AT

OK
AT

OK
AT

OK
AT

OK
AT

OK
AT

OK
AT

OK
AT

OKAAAAAAAAAüAAñAAAAAAAAAAStart Reset
End Reset
AT

OK
AT

OK
AT

OK
AT

OK
AT

OK
AT

OK-áAT

OK
AT

OKAAAAAAAñ(AAAáAAAAAAAAAAAStart Reset
End Reset
AT

OK
AT

OK
AT

OK
AT

OK
AT

OK
AT

OK
AT

OK
AT
MèjªAAAAAAA?AAAAAAA

As you can see, after about eight AT commands communication fails and I gave a manual reset.
What can be the cause? Hardware related (clock frequency of the Ethernetboard)?
Any suggestions appreciated.

delay(200);

How big is your input buffer?

Thanks for your reply.
I changed the code in the void loop to:

void loop()
{
  while(gsm.available())
  {
    incoming_char = gsm.read();
    Serial.print(incoming_char);
  }

    gsm.println("AT");
    delay(700);
}

Only with the 700 ms (and longer) delay I get no errors. So it seems to be a buffer overrun.
I will have a look at my original code next week and see if I can solve the problems there too.
Thanks again.

I started all over with testing and used the Send SMS example from GSM library reference page.

/*
SMS sender

 This sketch, for the Arduino GSM shield,sends an SMS message 
 that you send it through the serial monitor. To make it work, 
 open the serial monitor, and when you see the READY message, 
 type a message to send. Make sure the serial monitor is set
 to send a newline when you press return.

 Circuit:
 * GSM shield 

 created 25 Feb 2012
 by Tom Igoe

 This example is in the public domain.
 */

// libraries
#include <GSM.h>

#define PINNUMBER ""

// initialize the library instance
GSM gsmAccess; // include a 'true' parameter for debug enabled
GSM_SMS sms;

void setup()
{
  // initialize serial communications
  Serial.begin(9600);

  Serial.println("SMS Messages Sender");

  // connection state
  boolean notConnected = true;

  // Start GSM shield
  // If your SIM has PIN, pass it as a parameter of begin() in quotes
  while(notConnected)
  {
    if(gsmAccess.begin(PINNUMBER)==GSM_READY)
      notConnected = false;
    else
    {
      Serial.println("Not connected");
      delay(1000);
    }
  }

  Serial.println("GSM initialized");
}

void loop()
{

  Serial.print("Enter a mobile number: ");
  char remoteNumber[20];  // telephone number to send sms
  readSerial(remoteNumber);
  Serial.println(remoteNumber);

  // sms text
  Serial.print("Now, enter SMS content: ");
  char txtMsg[200];
  readSerial(txtMsg);
  Serial.println("SENDING");
  Serial.println();
  Serial.println("Message:");
  Serial.println(txtMsg);

  // send the message
  sms.beginSMS(remoteNumber);
  sms.print(txtMsg);
  sms.endSMS(); 
  Serial.println("\nCOMPLETE!\n");
}

/*
  Read input serial
 */
int readSerial(char result[])
{
  int i = 0;
  while(1)
  {
    while (Serial.available() > 0)
    {
      char inChar = Serial.read();
      if (inChar == '\n')
      {
        result[i] = '\0';
        Serial.flush();
        return 0;
      }
      if(inChar!='\r')
      {
        result[i] = inChar;
        i++;
      }
    }
  }
}

A few times only

SMS Messages Sender

was displayed, probably because communication failed right away.

This was one of the results (I crossed out my phone number):

SMS Messages Sender
GSM initialized
Enter a mobile number: 06********
Now, enter SMS content: SENDING

Message:
goedemiddag

CO
ª?UT$¡H¨Ô?W?.¤XHé?þ

and another one:

SMS Messages Sender
GSM initialized
Enter a mobile number: 06********
Now, enter SMS content: SENDING

Message:
goedemiddag

COMPLETE!

Enter a mobP?«¹Õµ??Éé?þ

The messages where received ok.
So again, what can be the cause?