STM32 conditional breakpoint

OP #4517449
Lesenswert?
• ▲
▼
Hallo,
ich versuche gerade meine Firmware zu debuggen, bei einer kritischen 
Stelle soll der STM32f103 anhalten, wenn die Variable einen bestimmten 
Wert erreicht.

Ich verwende den Jlink EDU und erhalte beim starten der Debug Session in 
Keil folgende Fehler Meldung:
"this target device does not support conditional breakpoints"

Wo liegt das Problem? Beim STM32 oder beim EDU?

Ich habe es vorübergehend so gelöst.
1
if (on_off == 1)
2
{
3
__asm {bkpt 0};
4
}
#4517479
Lesenswert?
• ▲
▼
Jim M. schrieb:
> Cortex-M kennt AFAIK keine conditional breakpoints in Hardware.

Die Cortex-M3 und M4 von STM haben 4 Watchpoints (evt. teilweise auch 
mehr, nicht sicher), die sollten eigentlich genau das unterstützen 
(Break wenn einer Speicherstelle ein bestimmter Wert zugewiesen wird). 
Evt. muss man selbige Variable "volatile" deklariere, sonst weiss der 
Compiler ja nicht, dass er die Werte da drin auch immer gleich ablegen 
soll/muss.

Obs am Keil oder dem Debugger liegt kann ich nicht sagen, verwende 
openocd und st-link.

Die asm bkpt Methode ist insofern praktisch als sie 
breakpoints/watchpoints spart.
Persönliche Seite #4517497
Lesenswert?
• ▲
▼
Breakpoints auf Variablen setzt man im MDK per Command Window (Debug 
Session):
1
BS READ myVar;
2
BS WRITE myVar;
3
BS READWRITE myVar;
Dafür wird auf dem Cortex-M eine von 4 Watchpoint Units verwendet 
(Variablen im Logic Analyzer z.B. brauchen auch je eine).
Beim entsprechenden Zugriff auf "myVar" hält das Programm an.

Die Watchpoint Unit kann auch auf Vergleiche mit festen Werten einen 
Breakpoint setzen:
1
BS READ myVar == 0;
2
BS WRITE myVar == 42;
3
BS READWRITE myVar == 1;
Dafür werden 2 Watchpoint Units benötigt (Adress- und Daten-compare).

Mit dem JLink sollte das eig. auch funktionieren.

Für den ULINK / ULINK pro gibt es noch einen STOP/RUN Betrieb, welcher 
grösser / kleiner Vergleiche erlaubt. Dafür wird ein 
READ/WRITE/READWRITE Breakpoint gesetzt, und bei erreichen des BPs der 
Wert der Variablen ausgelesen und mit der Condition / dem Value 
verglichen. Wenn erfüllt -> STOP, wenn nicht erfüllt: RUN.

Wie bei allen Variablen, welche die Watchpoint Unit betreffen, müssen 
auch diese global sein (ggf. local static), also eine feste 
Speicheradresse haben.


VG,
/th.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.