Go Down

Topic: Speicherfehler ? Arduino328 (Read 1 time) previous topic - next topic

Kalli

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 ?

LC_Data

#1
Oct 02, 2010, 05:50 pm Last Edit: Oct 02, 2010, 05:51 pm by LC_Data Reason: 1
Sketche kann Du posten indem Du auf das Raute # Zeichen über dem Textfenster clickts und dann den Code einfügst.

Es gibt 10 Gruppen von Menschen:
Die einen können binär zählen, die anderen nicht.

Korman

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

Kalli


uwefed

#4
Oct 02, 2010, 11:15 pm Last Edit: Oct 02, 2010, 11:18 pm by uwefed Reason: 1
Du mußt den Kode Kopieren , nicht das File
Code: [Select]

//das ist code


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

Uwe

Kalli

Code: [Select]

/*
* 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><br/>";
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("<br />");
         }
         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();
     }
}





uwefed

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:
http://arduiniana.org/libraries/Flash/ und
http://www.arduino.cc/en/Reference/PROGMEM

Grüße Uwe

Kalli

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

uwefed

#8
Oct 04, 2010, 05:57 pm Last Edit: Oct 04, 2010, 05:58 pm by uwefed Reason: 1
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?  ;) ::)

GrüßeUwe

Go Up