ich komme immer öfter dazu mithilfe von Arduino zu programmieren.
Leider kommt es ab und zu vor das ich irgendwelche seltsamen unerklärbaren Crashes hab.
Aktuell probiere ich mit Hilfe von MegaTinyCore einen Atmega3227 zu benutzen.
Klappt auch alles ganz wunderbar.
Das Programm ist recht klein, ca 10kb, Arduino bestätigt mir ca 3% dynamischen Speicher.
Kurzfassung: ADC auslesen (NTC), Lüftersteuerung (PWM), kleiner PID Regler (PWM), blinken mit ein paar LEDs (Status), Stundenzähler (+eeprom wearleveling).
Trotzdem stürzt der uC ab.
Immer an der selben Stelle im Programm, kommentiere ich einen unabhängigen Teil aus, läuft alles super.
Als Beispiel für meinen Aktuellen Fehler:
Code: Alles auswählen
void setup() {
//initialisiere Outputs / Inputs, lese EEPROM
}
void loop() {
if(digitalRead(button) == HIGH){
debug = true;
}
if(debug == false){
ReadTemp();
ControlFan();
BlinkLED();
}else{
debug();
}
}
void debug() {
//read eeprom
//blink LEDs
debug = false;
}
Sobald der Knopf drückt wird und damit der debug loop gestartet wird, resettet sich der uC.
ReadTemp, ControlFan und BlinkLED funktionieren ohne Probleme.
Kommentiere ich jetzt z.b. den Inhalt von BlinkLED, ControlFan oder! ReadTemp aus, funktioniert der Debug Loop ohne Probleme.
Im Debug Loop gibts nur sowas wie "Blink without delay" das ein paar Statusvariablen mittels LED raus morst.
Da diese Programmteile komplett unabhängig sind und nicht aufeinander zugreifen schließe ich auf irgendeinen Overflow bei dem an die falsche Stelle geschrieben wird.
Wie Debugge ich das sinnvoll?
Arduino kann ja kein UPDI debugger.