Arduino pro mini resettet nach einiger Zeit

Hallo,

mein Pro mini resettet sich nach einiger Zeit von selbst. Ohne jetzt weiter nachzuforschen, hat einer auf die Schnelle eine Idee, was das verursachen kann? Irgendein Überlauf oder so?

Danke schon mal!

Programmierfehler in Zeile 42.

Was möchtest du hier für eine Antwort hören? Keiner kennt den Schaltplan mit den angeschlossenen Komponenten, weiß ob du eine saubere Versorgungspannung hast oder ähnliches.

Aber erst einmal hört es sich so an, dass es zu einem Überlauf des RAMs kommt, bzw. du auf falsche Stellen zugreifst.

Nee, von der Hardwareseite dürfte das nicht passieren. Ich wollte nur wissen, ob es überhaupt möglich ist, dass er wegen des Variablenspeichers resettet. Habe nun eh schon 84% des dyn. Speichers verbraucht. Dann muss mir was überlegen, wie ich die ganzen LCD- und Serial-out Texte eindamfe, das belegt sehr viel Platz...

Verwende für die Ausgabe von Text fas F()-Makro

Serial.print("Text"); wird zu Serial.print(F("Text"));

So wird der String nicht ins RAM kopiert.

Grüße Uwe

Du hast in C keinerlei Speicherschutz. Wenn du auf falschen Speicher zugreifst oder generell der Speicher zu Ende ist passieren undefinierte Dinge.

Resets können gerade mit NULL-Zeigern schnell passieren. Über Array Grenzen zu schreiben ist auch sehr schlecht, führt aber nicht in allen Fällen zu einem Neustart.

wie ich die ganzen LCD- und Serial-out Texte eindamfe, das belegt sehr viel Platz...

String Literale landen erst mal durch die Harvard Architektur im RAM. Im Zusammenhang mit print()/println() kann man das aber einfach beheben:

lcd.print(F("Text im Flash"));

Dann wird der String nicht am Anfang ins RAM kopiert und belegt nur Flash

leclerke: Nee, von der Hardwareseite dürfte das nicht passieren. Ich wollte nur wissen, ob es überhaupt möglich ist, dass er wegen des Variablenspeichers resettet. Habe nun eh schon 84% des dyn. Speichers verbraucht. Dann muss mir was überlegen, wie ich die ganzen LCD- und Serial-out Texte eindamfe, das belegt sehr viel Platz...

Wieso meinst du, dass es von der Hardwareseite nicht kommt? Hast du dort Messungen über ggf. Spannungsspitzen etc mal angeschaut mit einem Messgerät, was vielleicht nicht gerade aus dem Baumarkt kommt. Die AVRs können an sich schon recht viel verkraften, aber kurze Impulse können da dennoch einmal zu einem Absturz führen. Aber nach deiner 2. Antwort liegt die Antwort von Uwe nahe. Dein Speicher läuft voll und das führt zu dem Reset. Aber um weiter zu helfen den Sketch hier reinstellen.

Ah, prima. Vom F()-Makro hab ich noch nichts gehört. Das werde ich gleich mal testen, damit kann ich mir vermutlich einige Arbeit erleichtern! Wo kommt das denn eigentlich her? In der Reference taucht das ja nicht auf. Gibts das schon länger? Das urspüngliche Programm hab ich vor drei Jahren geschrieben…

Kann man mit solchen Dingern eigentlich kurzen Spannungseinbrüchen auf die Schliche kommen? Allgemein brauchbar?

Auf der PROGMEM Seite wird es unten erwähnt: https://www.arduino.cc/en/Reference/PROGMEM

Letztlich wird da auch nichts anderes gemacht als oben beschrieben. Es wird lediglich als Hilfe eine Vorrausdeklaration einer Klasse Namens FlashStringHelper verwendet, damit man bei der Überladung von Methoden PROGMEM Strings von einem const char* im RAM unterscheiden kann. Danach wird FlashStringHelper wieder auf const char* gecastet.

Das geht mit allen Klassen die von der Print Klasse abgeleitet sind und deren print()/println() Methoden nutzen! Also nicht nur Serial, sondern z.B. auch LCD, SD und Ethernet.

Laut dem hier: http://playground.arduino.cc/Learning/Memory gibt es dass seit 1.0 !

Klasse, danke. Man lernt nie aus ;-)

Solche Sachen wie F() sind in dne Relaise notes https://www.arduino.cc/en/Main/ReleaseNotes zu finden. Dort steht was von version zu version anders ist oder dazugekommen ist.

F() ist bei den Neuerungen von IDE1.0 zu finden.

Grüße Uwe

Könnt ihr mir vielleicht noch mal helfen: ich hatte mal aus dem Forum eine Funktion floatToString eingebaut. In der neuesten Version der IDE 1.6.7 kann sie aber scheinbar nicht mehr aufgerufen werden: " exit status 1 'floatToString' was not declared in this scope" Am Code hab ich nichts geändert, muss also an der IDE Version liegen. Sagt euch das was? In den Release Notes steht da so nix zu.

Wo liegt deine FloatToString Funktion?

Die befindet sich in einem extra Tab. Genauso, wie viele andere Funtionen auch, die ich aufrufe.

Machs ordentlich!

Verpacks in *.h Datei und *.cpp Mit Vorwärtsdeklatrationen, wie sich das gehört. Dann klappts auch mit der 1.6.7

Ich seh grade, da kann ich auch besser gleich dtostrf() nehmen. Oder hat die irgendwelche Nachteile?

Mein ESP8266 NodeMcu Dev Board hängt sich nach ca 5h Betriebszeit jetzt auch auf.

Wird auch jede Sekunde die Zeit seriell geprintet (<TimeAlarms.h>). Hab mal testweise die Zeitausgabe rausgenommen und muss wieder 5h warten ob’s hilft.

Wenn ja, wäre das print F auch bei mir angesagt.

Wie wende ich denn das bei printDigits() an?

.
.
.

void digitalClockDisplay()
{
// digital clock display of the time
Serial.print(hour());
printDigits(minute());
printDigits(second());
Serial.println();
}
.
.
.

Grrr, hängt sich trotzdem nach 1,5h auf. >:(

Nu wird’s lustig - wie finde ich denn heraus wo es hängt?

Egal, erst mal 1000µF Elko an +- und wieder 5h warten...

Hi, bei mir lag es am USB. Ein Programm hat alle x Minuten nach einem Gerät gesucht und so den Reset ausgelöst. Hatte das Programm erst ein paar Tage zuvor installiert und danach trat der Fehler auf. Nach dem löschen, war alles wieder ok. :) :)

MfG Marco