Speicherfehler ? Arduino328

Hallo,
bin immernoch dabei, mich in die Programmierung einzuarbeiten. Habe ein Programm modifiziert (WEBCLIENT) und wenn ich das gesamte Programm benutze startet es nicht. Nehme ich ein paar Befehle raus, geht es. Kann man irgendwie den Speicher überprüfen ? Der Compiler bringt keine Fehlermeldung und was in der void loop() Schleife steht und nicht abgearbeitet wurde, kann ja auch nicht zum Absturz führen.

Gruss Kalli

Arduino Duemilanove 328
Arduino ETHShield SD
Arduino-0018

P:S:
Wie kann ich jetzt den Sketch hier ranhängen ?

Sketche kann Du posten indem Du auf das Raute # Zeichen über dem Textfenster clickts und dann den Code einfügst.

Wieviel Speicher braucht denn dein Programm? Vergiß nicht, du hast gerade einmal 2 kB RAM für Daten und Stack. Der HTTP-header von Google ist größer als das.

Korman

``Webtest5.pde

Du mußt den Kode Kopieren , nicht das File

//das ist code

Zum mitschreiben:
Du schriebst "code" in eckigen Klammern, dann Deinen Kode und dann "/code" in eckigen Klammern.

Uwe

/*
 * Web Server
 */

#include <Ethernet.h>
int ledPin = 13;
int ledan =1;
byte mac[] = { 
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = {  192, 168, 3, 223 };
Server server(80);


/*
Kostenlose, frei konfigurierbare Homepage-Uhr von www.schnelle-online.info/Homepage/Tools.html. Ohne Gewähr, ohne Haftung.
Nutzungsbedingung: Dieser Kommentar und der Link unten dürfen nicht entfernt oder (nofollow) modifiziert werden.
*/


char T1[] =("<a style='text-decoration:none;border-style:none;color:black;' target='_blank'");
char T2[] ="href='http://www.schnelle-online.info/Atomuhr-Uhrzeit.html'";
char T3[] ="id='soitime20850727171' title='Atomuhr genaue Uhrzeit'>Genaue Uhrzeit</a>
";
char T4[] ="<a style='text-decoration:none;border-style:none;color:black;' target='_blank'";
char T5[] ="href='http://www.schnelle-online.info/Kalender.html' id='soidate20850727171'";
char T6[]  ="title='Kalender mit deutschen Feiertagen'>Kalender</a>"; 
char T7[]  ="<script type='text/javascript'>";
char T8[]  ="SOI = (typeof(SOI) != 'undefined') ? SOI : {};(SOI.ac21fs = SOI.ac21fs || []).push(function()";
char T9[]  ="{(new SOI.DateTimeService('20850727171', 'DE')).start();";
char T10[]  ="}); (function() {if (typeof(SOI.scrAc21) == 'undefined')";
char T11[]  =("{ SOI.scrAc21=document.createElement('script');SOI.scrAc21.type='text/javascript';");
char T12[] =("SOI.scrAc21.async=true;SOI.scrAc21.src=((document.location.protocol == 'https:') ? 'https//' : 'http://')");
//char T12[]  =(" SOI.scrAc21.async=true;SOI.scrAc21.src=((document.location.protocol == 'https:') ?");
char T13[]  =(" + 'homepage-tools.schnelle-online.info/Homepage/atomicclock2_1.js';");
char T14[]  =(" (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0])");
char T15[]  =(" .appendChild(SOI.scrAc21);}})();");
char T16[]  =("</script>");

void setup()
{
  Ethernet.begin(mac, ip);
  server.begin();
  pinMode(ledPin, OUTPUT);
  Serial.begin(9600);
}
void loop()

{
   if (ledan==1)
  {digitalWrite(ledPin,HIGH);
  ledan=0;
  Serial.print(ledan);
delay(500);}
  else
  {digitalWrite(ledPin,LOW);
  
  ledan=1;
  Serial.print(ledan);
  delay(500);
  }

  Client client = server.available();
  
    if (client) 
  { Serial.println(client);
        // an http request ends with a blank line
    boolean current_line_is_blank = true;
    while (client.connected())
    {
     // Serial.print(current_line_is_blank);
      if (client.available()) 
      {
        char c = client.read();
        Serial.print(c);
        if (c == '\n' && current_line_is_blank) 
        {
//delay(1000);  
//TESTH();

Serial.println("vor HTML Text");
/*
Bei Aktivierung dieses ganzen Blocks, haengt sich das Board auf...
client.print(T1);
client.print(T2);
client.print(T3);
client.print(T4);
client.print(T5);
client.print(T6);
client.print(T7);
client.print(T8);
client.print(T9);
client.print(T10);
client.print(T11);
client.print(T12);
client.print(T13);
client.print(T14);
client.print(T15);
client.print(T16);
*/
//client.print("<html>");

client.print("<head>");
client.print("<title>Arduino</title>");
client.print("</head>");

client.print("<body>");
client.print("<p>&nbsp;</p>");
client.print("<p>&nbsp;</p>");
client.print("<p><font size='7'>Aktuelle Temperaturen</font><font size='4'> </font></p>");
client.print("<p><b><font size='5'>draussen&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;");
client.print("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"); 
client.print("drinnen&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"); 
client.print("Heizung</font></b></p>");
client.print("<p><b><font size='5'>&nbsp; 12,5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;");
client.print("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"); 
client.print("22,1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;");
client.print("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"); 
client.print("45,3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Grad</font></b></p>");
client.print("<p>&nbsp;</p>");

client.print("</body>");

client.print("</html>"); 
          
    
          for (int i = 0; i < 6; i++)
            {
            client.print("analog input ");
            client.print(i);
            client.print(" is ");
            client.print(analogRead(i));
            client.println("
");
          }
          break;
        }
        if (c == '\n') {
          // we're starting a new line
          current_line_is_blank = true;
        } 
        else if (c != '\r') {
          // we've gotten a character on the current line
          current_line_is_blank = false;
        }
      }
    }
    // give the web browser time to receive the data
    
    delay(1000);
    client.stop();
      }
}

Hallo Kalli

Hab Deinen Code nicht controlliert aber die Strings, die ja konstant sind, könntest Du in den Fash-Speicher schreiben und so RAM sparen.
dazu:
Flash | Arduiniana und
PROGMEM - Arduino Reference

Grüße Uwe

Hallo,
Danke für die Hinweise. Wusste nicht, dass es da eine Begrenzung gibt. Habe nun das Problem mit PROGMEM gelöst. Nun kann ich mich beruhigt an die weitere Programmierung machen.

Na dann, bis weitere Probleme auftreten...

Kalli

Es gibt keine Begrenzung des Speichers; es gibt nur, nur eine bestimmte Menge davon (der ATmeega328 hat 2kByte). Die Variablen und andere Parameter die zur Ausführung des Programs benötigt werden (STACK mit Rücksprungadressen ecc) benötigen RAM-Speicher. Irgendwann einmal ist dann Schluß, wenn zuviele Variablen benutzt werden.
Viele Grüße

Laut gedacht: Warun kommt niemanden in den Sinn auch mal was zu schreiben, wenn er keine Probleme hat? :wink: ::slight_smile:

GrüßeUwe