Moin, es geht um Microchip Studio 7 mit einem AVR Tiny 2-Series, via UPDI angeschlossen. Habe in einem längeren C-Programm das Problem, dass mir irgendwo eine Struktur zerschossen wird. Per Einzelschritt Debugger finde ich den fehlerhaften Code nicht. Passiert auch erst nach einiger Zeit. Ein Data-Breakpoint wäre jetzt genau das richtige. Gibt auch einige Hinweise im Forum wo das schon im MS-Studio mit AVR angewendet wird. Wenn ich den Breakpoint setzen will, erscheint jedoch eine Fehlermeldung, dass das Feature nicht mit dem Device & Tool unterstützt wird. Kennt jemand einen workaround?
Wulf D. schrieb: > Ein Data-Breakpoint wäre jetzt genau das richtige. Die Meldung stimmt schon, das kann der Mikrocontroller nicht. Ich meine, das geht nur mit JTAG bei wenigen AVR Modellen. Vielleicht magst du zu STM32F3 wechseln, die können das.
:
Bearbeitet durch User
Ja ok danke, das erklärt das Verhalten. Aber vielleicht hat noch jemand einen Tipp wie man den fehlerhaften Code mit den Mitteln des Debuggers eingrenzen könnte. HW ist fertig, SW auch fast, bis auf wenige Bugs. Da wollte ich nicht wechseln.
:
Bearbeitet durch User
Wulf D. schrieb: > Aber vielleicht hat noch jemand einen Tipp wie man den fehlerhaften Code > mit den Mitteln des Debuggers eingrenzen könnte. Ich sehe keinen Code, keine Beschreibung was er tun soll, keine Beschreibung des Fehler. Was erwartest du? Man kann seriell Log Meldungen ausgeben oder den Status mit einer LED anzeigen. Ich bin 20 Jahre lang ohne Debugger aus gekommen.
Wulf D. schrieb: > Moin, > es geht um Microchip Studio 7 mit einem AVR Tiny 2-Series, via UPDI > angeschlossen. > Habe in einem längeren C-Programm das Problem, dass mir irgendwo eine > Struktur zerschossen wird. Per Einzelschritt Debugger finde ich den > fehlerhaften Code nicht. Passiert auch erst nach einiger Zeit. Schon probiert, ob MPLABX das kann? Im Gegensatz zum Studio wird das ja noch weiterentwickelt. fchk
Sherlock 🕵🏽♂️ schrieb: > Wulf D. schrieb: >> Aber vielleicht hat noch jemand einen Tipp wie man den fehlerhaften Code >> mit den Mitteln des Debuggers eingrenzen könnte. > > Ich sehe keinen Code, keine Beschreibung was er tun soll, keine > Beschreibung des Fehler. Was erwartest du? Ich erwarte nicht, dass jemand seitenlang Code reviewed. > Man kann seriell Log Meldungen ausgeben oder den Status mit einer LED > anzeigen. Ich bin 20 Jahre lang ohne Debugger aus gekommen. Im Hobbybereich ist das auch ok. Die LED ist natürlich mit einer kleinen Prüfroutine ist drin und die geht nach einiger Zeit auch an. Die werde ich jezt nach und nach in jeden Unterprogrammzeig hängen und irgendwann findet man die fehlerhafte Stelle. Aber vielleicht geht es eleganter.
Frank K. schrieb: > Schon probiert, ob MPLABX das kann? Wie gesagt: Es liegt am Chip.
:
Bearbeitet durch User
Nicht direkt debuggen, aber führt vermutlich auch ans Ziel: Linte mal deinen Code!
Man kann regelmäßig den freien Speicher und Stack ausgeben.
N. M. schrieb: > Nicht direkt debuggen, aber führt vermutlich auch ans Ziel: > Linte mal deinen Code! Gute Idee, sollte im ersten Schritt erstmal alle Warnings durchgehen. Da sind noch etliche nicht auf Relevanz geprüft.
Wulf D. schrieb: > Habe in einem längeren C-Programm das Problem, dass mir irgendwo eine > Struktur zerschossen wird. Ich würde mal einen RAM-Dump ausgeben, was genau und wie zerschossen wird. So viel RAM kann das ja nicht sein.
Sherlock 🕵🏽♂️ schrieb: > Man kann regelmäßig den freien Speicher und Stack ausgeben. Auch gut, geht schnell über die eh vorhandene UART.
Peter D. schrieb: > Wulf D. schrieb: >> Habe in einem längeren C-Programm das Problem, dass mir irgendwo eine >> Struktur zerschossen wird. > > Ich würde mal einen RAM-Dump ausgeben, was genau und wie zerschossen > wird. So viel RAM kann das ja nicht sein. Vielen Dank: im grün umrandeten Bereich liegt die zerschossene Struktur, da hat sich ein String drüber gelegt. Das sollte leicht zu finden sein!
War ein nicht abgefangener Bufferüberlauf. Läßt sich schnell beheben. Jetzt muss ich nur noch den logischen Fehler finden, warum überhaupt so viele Daten einlaufen. Aber das ist eine andere Geschichte. Danke für die kontruktiven Tipps!
:
Bearbeitet durch User
Wulf D. schrieb: > War ein nicht abgefangener Bufferüberlauf. Ich nehme vorzugsweise den sizeof Operator. Dann muß man keine magischen Nummern hinschreiben und kann die Größe nachträglich scnell ändern.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.