Hey, ich nutze einen Atmega 328p zur Aufnahme von Sensorwerten, welche mittels eines NRF24L01 Funkmoduls an einen anderen µC übertragen werden sollen. Dabei treten ein paar Schwierigkeiten auf, auf die ich mir keinen Reim machen kann. Zur Übersicht teile ich untersuchte bzw. eingegrenzte Szenarios ein: 1. Die int-Werte der Sensoren werden in Strings umgewandelt und gesendet 1.1 Nach dem Programmieren mit ISP: -funktioniert einwandfrei 1.2 Erneutes Einschalten zu einem beliebigen Zeitpunkt: -funktioniert einwandfrei 2. Die Strings werden noch ein wenig umgewandelt (hinzufügen von Kommata etc) 2.1 Nach dem Programmieren mit ISP: -funktioniert einwandfrei 2.2 Erneutes Einschalten zu einem beliebigen Zeitpunkt: -Programm läuft ein einziges mal ansatzweise durch, aber scheint Fehler zu verursachen. Auch ein Reset bringt nichts. Ich hatte irgendwie an den RAM gedacht, aber soweit ich es beurteilen konnte, sollte es da keine Probleme geben. Die SuFu hat einige ähnlichte Fälle gefunden, bei denen das Programm nur direkt nach dem Programmieren sauber lief, aber einen problemlösenden Ansatz für meinen Fall konnte ich leider nicht finden. Habt ihr vielleicht Ideen wo das Problem genau liegen könnte? Viele Grüße Daniel
Gast
#4350870
Wo ist das Programm?
Gast
#4350871
Das RAM wird beim Programmieren über ISP gelöscht. Wenn Dein Programm schon mal gelaufen ist und Du nur einen Reset auslöst oder aber der Controller neu eingeschaltet wird, ist der zustand des RAMs undefiniert. Veranlasse also Deine Init, das RAM komplett auszunullen oder bestimmte Werte definiert zu beschreiben.
Gast
#4350878
Daniel H. schrieb: > Habt ihr vielleicht Ideen wo das Problem genau liegen könnte? Das wird an deinem Programm liegen. Von selbst macht ein µC gar nichts - nicht mal direkt nach dem Flashen.
Jawoll schrieb: > Veranlasse also Deine Init, das RAM komplett auszunullen oder bestimmte > Werte definiert zu beschreiben. Das werde ich gleich mal testen, sobald ich die Gelegenheit habe - danke! google schrieb: > Wo ist das Programm? Ich könnte den Code gleich mal hochladen, aber momentan sieht das wahrscheinlich etwas chaotisch aus, sodass ich mir dafür erst mal was anhören müsste ;x. Ich finde es nur merkwürdig, dass eine Änderung am String das oben genannte Fehlerbild erzeugt.
Gast
#4350907
Möglicherweise ist dein String zu kurz und es wird über das Ende des Speicherbereichs hinausgeschrieben oder eine Variable wird nicht initialisiert. Schau mal auf eventuelle Warnungen, die der Compiler ausgibt.
MikeH schrieb: > Möglicherweise ist dein String zu kurz und es wird über das Ende des > Speicherbereichs hinausgeschrieben oder eine Variable wird nicht > initialisiert Das hatte ich eigentlich schon überprüft, aber ich checke es nochmal sobald ich daheim bin. Wenn ein string zu kurz initialisiert wird, sollte es dann nicht auch direkt nach dem Programmieren durch den ISP zu Fehlern kommen?
So, hier ist der verwendete Code. Die Datei iO.c kennzeichnet das Programm das immer funktioniert. Unter niO.c ist das Programm zu finden, das immer nur direkt nach dem Programmieren funktioniert. Der einzige Unterschied ist der mittlere Teil zur Anpassung der Strings, der bei iO.c auskommentiert wurde. Jawoll schrieb: > Veranlasse also Deine Init, das RAM komplett auszunullen oder bestimmte > Werte definiert zu beschreiben. Den RAM komplett auszunullen versuche ich, sobald ich herausgefunden habe wie das geht. Viele Grüße Daniel
Gast
#4351488
Hallo Ein String muss mit einer 0 terminiert werden Bei deinen handgemachten Strings machst du das nicht Bernhard
Bernhard schrieb: > Ein String muss mit einer 0 terminiert werden oh, du meine Güte... du hast natürlich Recht. Die Fehlersymptomatik hat mich überhaupt nicht an sowas denken lassen. Das Programm funktioniert jetzt wie gewünscht. - auch wenn ich gerne verstehe würde warum der fehlerhafte Code jedesmal nur direkt nach dem Programmieren funktioniert hat Vielen Dank für die Hilfe!
Gast
#4351662
Daniel H. schrieb: > auch wenn ich gerne verstehe würde warum der fehlerhafte Code > jedesmal nur direkt nach dem Programmieren funktioniert hat weil vermutlich beim ersten Durchlauf noch Nullen im RAM-Bereich nach deinem String steht. Bei den weiteren versuchen steht da aber irgendwelche undefinierten Werte drin du schickst das Ding ins Nirwana.
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.