ARM Cortex: Debugger springt beim steppen immer in eine ISR in

OP #2225724
Lesenswert?

Guten Morgen,
ich programiere zur Zeit mit auf einem LPC1768 µC herum.
Dazu benutze ich Eclipse version 3.6.1, den Arm-None-Eabi-gcc, den 
Olimex ARM-USB-OCD zusammen mit Open OCD Version 0.4.0.

Nun zu meinem Problem:

Wenn ich das Programm debuggen will kann ich vom Start des Programms 
soweit steppen, bis die Interrupts konfiguriert und angeschaltet sind. 
Ab dann lande ich immer, wenn ich auf dem "Step Over" oder den "Step 
Into" Button drücke, in einem Interrupt Handler (meist der I2C). Somit 
muss ich jedesmal, wenn ich durchs Programm steppen will, muss ich 
mühsam per Hand nen Breakpoint auf die nächste Instruktion setzen. Wenn 
ich andere µCs debugge(z.B. At91SAM7) habe ich das Problem nicht.

Vielleicht hat ja hier jemand ne Idee woran das liegen kann, und wie ich 
das abstellen kann.

Grüße,
Stephan
OP #2225813
Lesenswert?

Danke für die ersten Antworten

Also wenn ich das richtig verstanden habe müsste der Debugger es genauso 
anstellen, wie ich es momentan mache:
Einen Breakpoint auf die Adresse des nächsten Befehls setzen und warten 
bis der Breakpoint zuschlägt. Somit sollte es doch eigendlich egal sein, 
wie viele Interrupts dazwischen ablaufen.
Und eigendlich möchte ich auch nicht die Interrupts ausschalten. Das 
Programm soll sich beim Debuggen schlieslich genauso verhalten wie 
normal.
Bei anderen µCs hab ich das Problem auch nicht, und da laufen auch immer 
Timer im Milisekunden Takt und diverse andere Sachen, die regelmässig 
Interrupts auslösen.
Persönliche Seite #2226200
Lesenswert?

S. Janssen schrieb:
> Einen Breakpoint auf die Adresse des nächsten Befehls setzen und warten
> bis der Breakpoint zuschlägt. Somit sollte es doch eigendlich egal sein,
> wie viele Interrupts dazwischen ablaufen.

Nein, single step ist beim Cortex-M3 ein natives debug feature (schöner 
Satz). Es wird dazu kein Breakpoint verschwendet.

> Und eigendlich möchte ich auch nicht die Interrupts ausschalten. Das
> Programm soll sich beim Debuggen schlieslich genauso verhalten wie
> normal.

Tut es ja :-) Es wird die nächste Instruktion ausgeführt...
Du kannst das Verhalten allerdings im DHCSR (Bit 3, C_MASKINTS) 
einstellen.
Siehe ARM ARM v7-M.

Gruß
Marcus
OP #2226536
Lesenswert?

@ Marcus
Danke, dein Tip hat mich auf die richtige Spur gebracht

Für die Nachwelt:
Der GDB muss mit

define hook-step
mon cortex_m3 maskisr on
end
define hookpost-step
mon cortex_m3 maskisr off
end

initialisiert werden, dann kümmert der sich darum, das das C_MASKINTS 
richtig gesetzt wird.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren