Forum: Mikrocontroller und Digitale Elektronik Breakpoint ändert wert in Adresse


von Johannes (Gast)


Lesenswert?

Hallo,
ich habe einen S32K Controller.
Dort gucke ich mir das Register PTC (GPIO_Type) (Base-Address 
0x400FF080) an, da im laufenden Code zurückgesetzt wird, aber keiner die 
Stelle findet (bzw. warum überhaupt).
Bei der initialisierung wird
1
PINS_DRV_WritePin(PTC, 8, 1);
aufgerufen, wodurch der Speicher von
0000
auf
0100
ändert.
Beim Aufruf von
1
PINS_DRV_WritePin(PTC, 9, 1);
wechselt der Wert auf 0300.

Später im Code wird wieder
1
PINS_DRV_WritePin(PTC, 8, 1);
aufgerufen. Dort ist der Wert im Register aber schon auf 0200 
gewechselt.
(Das muss ich noch finden wo es geändert wird).

Mein Problem ist aber,
wenn ich ein Breakpoint auf 0x400FF080 setze (Base-Adress PTC)
Steht dort der Wert BF00 und beim aufruf von
1
PINS_DRV_WritePin(PTC, 8, 1);
ändert sich nichts.

Woran liegt das, dass wenn ich ein Breakpoint auf die Adresse setze, 
sich der Wert im Speicher ändert?

von Michael B. (laberkopp)


Lesenswert?

Hmm, eigentlich setzt man breakpoints ja in den code, damit der 
Programmlauf unterbrochen wird wenn er den Begehl ausfuhren will.
Und was soll der Prozessor der keine Breakpoint-Register hat mit denen 
er den PC vergleichen kann anderes machen als dort im code den 
Maschinenbefehl gegen einen Software-Interupt, Trap, Call, 
auszutauschen. Nur so erfährt er, dass er ausgeführt werden soll. Danach 
kann er ihn wieder zurück ändern und als step ausfuhren.
Breakpoints auf Adressen die einen Zugriff dort hin abfangen geht auf 
die Art natürlich nicht, keinem ist geholfen wenn der Inhalt an der 
Adresse durch eine Maschineninstruktion der CPU ausgetauscht wird, denn 
dort stehe ja Daten, nicht Inszruktionen.

Vielleicht ist das dein Problem, obwohl ich nun nicht nachschlage wie 
dein Prozessor das macht.

Echte debug-Register bei denen in jedem Maschinenbefehl alle Adressen 
gegen alle gespeicherten Breakpoints verglichen werden sind jedoch 
selten.

von Mario M. (thelonging)


Lesenswert?

Johannes schrieb:
> der Wert BF00

ist bei ARM ein NOP.

von Michael F. (Firma: IAR Systems) (michael_iar)


Lesenswert?

Michael B. schrieb:
> Breakpoints auf Adressen die einen Zugriff dort hin abfangen geht auf
> die Art natürlich nicht, keinem ist geholfen wenn der Inhalt an der
> Adresse durch eine Maschineninstruktion der CPU ausgetauscht wird, denn
> dort stehe ja Daten, nicht Inszruktionen.

Moin,

dafür gibt es in der Arm CoreSight Unit (Stichwort: DWT) sogenannte Data 
Breakpoints, mit denen man den Zugriff auf Speicheradressen überwachen 
kann. Hier ein paar Infos zum Thema:
https://www.iar.com/knowledge/learn/debugging/making-the-best-use-of-the-available-breakpoints/

Die Fragen wären dann:
- werden Data Breakpoints vom verwendeten S32K unterstützt?
- falls ja, sind die beim verwendeten S32K auf den Adressbereich des RAM 
limitiert oder kann man damit auch SFRs überwachen?
- werden Data Breakpoints vom verwendeten Debugger unterstützt?

Gruß,
Michael

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
Noch kein Account? Hier anmelden.