INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Arduino im Bootloop oder steckt komplett
19.05.2014, 08:19
Beitrag #1
Arduino im Bootloop oder steckt komplett
Guten Morgen!

Ich bin langsam am Verzweifeln mit meinem Due. Als Projekt habe ich mir vorgenommen, meine Poolsteuerung inkl. Solarpumpe umzusetzen.
Da ich nicht der beste Coder bin, sondern eher der Copy/Paste hat mein Code doch schon einige Zeilen und eine Größe von 22k. Kann auch schon ein bisschen was Smile


Was ich jetzt beobachten konnte ist, dass der Arduino, füge ich weitere "Serial.print" ein, das Programm nicht mehr ordentlich ausführt. Entweder Bootloop oder er bleibt nach der Setup() einfach stehen.
Ich habe jetzt eine neue Funktion eingefügt, welche den seriellen Port beschicken soll. Ist die Funktion leer, läuft der Code. Fülle ich 1-2 Serial.print ein, geht nix mehr.
Power bezieht er über USB, Netzteil habe ich noch nicht probiert.


Ist dieses Verhalten "normal"?

Ich habe jetzt versucht, alle möglichen Serial.print, welche nicht benötigt werden, auszukommentieren, brachte aber auch nix.

Hoffentlich kann mir hier wer helfen, langsam zweifle ich an mir selbst Smile
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
19.05.2014, 08:48 (Dieser Beitrag wurde zuletzt bearbeitet: 19.05.2014 12:40 von Thorsten Pferdekämper.)
Beitrag #2
RE: Arduino im Bootloop oder steckt komplett
Hi,
ohne das Coding gesehen zu haben (und ohne mich durch 22k Coding durchwühlen zu wollen), tippe ich mal auf Speicherprobleme. Der Due hat zwar einiges an Ram, aber irgendwann ist da auch Schluss.
Bastle mal folgende Funktion mit rein:
Code:
int freeRam ()
{
  extern int __heap_start, *__brkval;
  int v;
  return (int) &v - (__brkval == 0 ? (int) &__heap_start : (int) __brkval);
};
...und gib das Ergebnis über Serial in der Nähe des vermuteten "Absturzes" aus. (Bzw. halt irgendwo, wo Serial... noch geht.) Die Funktion misst den verbleibenden Hauptspeicher. Möglicherweise musst Du aus allen int jeweils ein Long machen, da der Due glaube ich mehr als 2^16 Byte Ram hat.

Falls das nicht hilft, dann man alle schreibende Array-Zugriffe überprüfen.
Gruß,
Thorsten

EDIT: ...mehr als 2^16, nicht mehr als 2^32.

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
19.05.2014, 09:42 (Dieser Beitrag wurde zuletzt bearbeitet: 19.05.2014 12:54 von cyberdrive.)
Beitrag #3
RE: Arduino im Bootloop oder steckt komplett
Hi Thorsten!

Danke für die Funktion! Ich habe den Aufruf in meine Funktion (dzt. ja leer) für die serielle Kommunikation eingebaut.
Ich erhalte immer abwechselnd:
141
147
141
147
141
147
...

An anderer Stelle platziert krieg ich nur noch den Wert:
147

Wandle ich ein paar "int" in long um, so krieg ich den Wert auf 130 und noch kleiner.

Was bedeutet das jetzt?


Was mir noch aufgefallen ist, ich hab meine Temperatursensoren (Dallas 1820) auf vergossene Sensoren getauscht. Jetzt liefert mir die printAddress-Funktion keine Ergebnisse mehr, die Temperatursensoren können aber weiterhin unterschieden werden.
Der Beispielcode liefert aber Adressen... eigenartig, dem werde ich mal auf den Grund gehen... vielleicht liegt´s ja daran

Vielen Dank!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
19.05.2014, 12:57
Beitrag #4
RE: Arduino im Bootloop oder steckt komplett
(19.05.2014 09:42)cyberdrive schrieb:  Wandle ich ein paar "int" in long um, so krieg ich den Wert auf 130 und noch kleiner.
Was bedeutet das jetzt?
Ich hab gerade nochmal nachgelesen. Auf dem Due haben ints sowieso schon 32 Bit, also vergiss das mit dem int nach long ändern. Sorry.
Das Ergebnis bedeutet, dass Du nur noch um die 141-147 Byte freien Speicherplatz hast. Das kann knapp werden, wenn Du dann auch noch mit serieller Kommunikation anfängst.
Laut Beschreibung hat der Due 96k RAM. Dein Projekt klingt gar nicht so komplex, dass man auf dem Microcontroller so viel Speicher braucht.
Schau Dir mal Deine ganzen Variablen, Arrays etc. an. Außerdem ist zu bedenken. dass z.B. sowas:
Code:
Serial.print("Hallo das ist ein langer Text");

Meines Wissens nach den ganzen Text (zumindest vorübergehend) im Hauptspeicher hält. Ich habe gelesen, dass das hier helfen soll:
Code:
Serial.print(F("Hallo das ist ein langer Text"));

Das "F" scheint eine vordefinierte Funktion zu sein, die das Kopieren in den Hauptspeicher für Zeichenketten-Konstanten unterbindet. Ausprobiert habe ich das aber noch nicht.
Gruß,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
19.05.2014, 13:18
Beitrag #5
Thumbs Up RE: Arduino im Bootloop oder steckt komplett
Vielen, vielen DANK!!!

Es funktioniert, ich hab das "F(" bei allen Serial.print´s eingefügt und nun den RAM-Wert auf 628 gebracht.
Danach habe ich meine Ausgabefunktion aktiviert und sie läuft Smile

Spricht etwas dagegen, das bei allen Serial.print´s (mit "Text") zu machen?

LG
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
19.05.2014, 13:30
Beitrag #6
RE: Arduino im Bootloop oder steckt komplett
(19.05.2014 13:18)cyberdrive schrieb:  Es funktioniert, ich hab das "F(" bei allen Serial.print´s eingefügt und nun den RAM-Wert auf 628 gebracht.
Danach habe ich meine Ausgabefunktion aktiviert und sie läuft Smile
Freut mich.
Ich frage mich aber immer noch, was Du mit den restlichen fast 96k Memory gemacht hast.

Zitat:Spricht etwas dagegen, das bei allen Serial.print´s (mit "Text") zu machen?
Nur wenn Dir Dein Programmspeicher (Flash-Memory) ausgeht. Siehe auch hier:
http://playground.arduino.cc/Learning/Memory
Wenn man genügend Programmspeicher hat, dann müsste man sogar alles, was konstant ist, ins Flash legen können: http://www.arduino.cc/en/Reference/PROGMEM

Gruß,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  mit if aus do-while oder while Schleife aussteigen Nafetz 6 124 05.12.2016 21:41
Letzter Beitrag: Pit
  Welche IDE? Arduini.cc oder .org Bilbo 1 209 17.10.2016 21:03
Letzter Beitrag: ardu_arne
  Ardublock übertragt nicht an IDE oder UNO R3 tobi83 5 358 16.10.2016 14:07
Letzter Beitrag: Pit
  Programmspeicher auf i2c_EEPROM oder SD_Card erweitern? avoid 11 349 11.07.2016 15:46
Letzter Beitrag: avoid
  IDE von .org oder .cc besser geeignet? Bit of Byte 4 451 01.03.2016 21:57
Letzter Beitrag: arduinopeter
  Pretzelboard oder C.Control Warmbronner 1 534 22.02.2016 20:14
Letzter Beitrag: hotsystems
  AKtuelle Uhrzeit bekommen, RTC oder DFC-Empfänger Cray-1 34 15.573 11.02.2016 23:49
Letzter Beitrag: hotsystems
  digitalOutputpin mit Taster an- oder ausschalten Raptor 2 576 26.12.2015 20:59
Letzter Beitrag: torsten_156
  Code Server oder Client seitig?? SchwesterStefan 3 572 09.11.2015 22:47
Letzter Beitrag: hotsystems
  Suche sketch mit der Abfrage von 2 oder mehr PIR's Tozupi 1 467 05.10.2015 20:55
Letzter Beitrag: hotsystems

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste