Forum: Mikrocontroller und Digitale Elektronik Frage zu ARM7 "Undefind Data Access Aboard"


von ARM7TDMI (Gast)


Lesenswert?

Guten Tag.

Bei meiner Applikation mit einem LPC2148 kommt selten, aber doch
gelegentlich mal eine Data Access Abord Exception vor. Ich kann mir
erlauben bei unvorhersehbaren Exceptions einen Neustart durchzuführen.
Zuvor logge ich aber noch den Inhalt von R14 - 8 . Damit weiss ich
zwar die Adresse der Instruktion die den Zugriff ausführt, ich weiss
aber nicht auf welche Adresse.

Mein Frage ist nun, kann man diese Adresse zur Laufzeit (ohne Debugger)
herausbekommen um sie dann zu loggen ?

Vielleicht ein blöde Frage, aber ich trete im Moment auf der Stelle. Bei
Google scheine ich nicht das richtige Suchwort zu benutzen, denn da habe
ich jedenfalls nichts hilfreiches dazu gefunden.

Danke für sachdienliche Hinweise.

Gruss

von (prx) A. K. (prx)


Lesenswert?

ARM7TDMI schrieb:

> Mein Frage ist nun, kann man diese Adresse zur Laufzeit (ohne Debugger)
> herausbekommen um sie dann zu loggen ?

Ja. Befehl dekodieren und Adresse berechnen. Entweder machst du das im 
Abort-Handler, oder du gibst alle relevante Information aus, also alle 
Registerinhalte 0-15 und PSR, und machst es dann selbst. Der Befehl 
lässt sich zwar ggf. dem Dump entnehmen, sofern nicht im RAM, aber es 
schadet wohl nicht, auch die betreffenden Bytes auszugeben.

http://www.design-reuse.com/articles/exit/?id=14079&url=http%3A%2F%2Fwww.embedded.com%2Fshared%2FprintableArticle.jhtml%3FarticleID%3D192202641

von ARM7TDMI (Gast)


Lesenswert?

oh, wie soll ich das zur Laufzeit machen?

Hinterher geht es nicht mehr , weil ich die Registerinhalte ja nicht
mehr kenne. Selbst mein Debugger nutzt mir da nichts .

Wie gesagt, ich halte nicht an innerhalb des Exception Handlers, sondern
führe einen SW-Reset aus. Zuvor wird noch R14 - 8 auf die CD-Card mit
Uhrzeit und entsprechender Meldung geschrieben.

Meine naive Frage wäre (anders formuliert), ob es nicht irgendwo die
Adresse des fehlerhaften Datenzugriffes  gibt, die ich einfach so wie
die OPCODE Adresse noch mit loggen kann ?

Denke aber eher wohl nicht.


Gruss

von (prx) A. K. (prx)


Lesenswert?

ARM7TDMI schrieb:

> oh, wie soll ich das zur Laufzeit machen?

Lies den verlinkten Text, dessen Autor hat das gemacht.

> Wie gesagt, ich halte nicht an innerhalb des Exception Handlers, sondern
> führe einen SW-Reset aus. Zuvor wird noch R14 - 8 auf die CD-Card mit
> Uhrzeit und entsprechender Meldung geschrieben.

Warum nur diese Register und nicht alle?

> Meine naive Frage wäre (anders formuliert), ob es nicht irgendwo die
> Adresse des fehlerhaften Datenzugriffes  gibt, die ich einfach so wie
> die OPCODE Adresse noch mit loggen kann ?

Beim ARM7 nicht, der Cortex-M3 hat das jedoch.

von ARM7TDMI (Gast)


Lesenswert?

Ok danke, werde mir das mal ansehen. Ist ja eine etwas längere 
Abhandlung.

Zur Info : R14 - 8 soll nur heissen Registerinhalt von R14 minus 8.
Diese Adresse ist dann die Adresse des Codes der die Exception auslöst.
Alle anderen Register haben (denke ich) Inhalte die möglicherweise
nichts mehr dem Code zu tun haben der das Problem verursacht. Schon
alleine deswegen, weil ich ja Ausgaben machen muss (will). Könnte
also nicht hilfreich sein.

Danke jedenfalls nochmals für den Tip. Vielleicht hilft er ja weiter.

Gruss

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.