www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AT91RM9200: Data Abort im internen RAM


Autor: Bernd Schuster (mms)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

mich plagen sehr viele data aborts innerhalb des internen RAMs. Meinen 
Stack Ptr hab ich an der Adresse 0x00200798. Der interne RAM geht an 
sich bis zur Adresse 0x002FFFFF.

Oberhalb des Stacks treten häufig data aborts auf. Leider weiß ich nicht 
genau welcher Prozess auf diesen Bereich zugreift. Der Heap und der 
Stack laufen doch irgendwann zusammen - d.h. oberhalb des Stack Pointers 
befindet sich doch eigenltich gar nichts, oder?

Wenn ich versuche ein Pattern auf eine solche Addresse (z.b. 0x00205241) 
zu schreiben, bei der ein Data Abort erfolgt -> erhalte ich ebenfalls 
einen Data abort. Was könnte das Problem hierfür sein?

Zwischen Heap und Stack hab ich ebenfalls schon mal ein paar 
Speicherzellen vollgeschrieben und dadurch überprüft ob Stack und Heap 
zusammenlaufen -> ist aber nicht der Fall.

Laut Linkerfile befindet sich im internen RAM nur .ANY (+RW, +ZI)

Bernd

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und wird dürfen raten, um was es sich handelt?

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bernd Schuster wrote:

> einen Data abort. Was könnte das Problem hierfür sein?

Erstmal, daß keiner weiß, wovon Du redest (Architektur, CPU, OS, 
Compiler).


Ich setz den Stack meistens auf 0xEF, 16 Byte reichen aus bei meinem 
8051.


Peter

Autor: Bernd Schuster (mms)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
darf ich auf den speicherbereich oberhalb des Stack Pointers überhaupt 
nicht zugreifen? Oder ist es legitim, dass ich dort ein Pattern 
reinschreibe.

Ich meine der jetzige Data Abort passiert, weil ich da selbst über das 
Pattern versuche auf diese Address was zu schreiben. Nur warum darf ich 
das nicht?

Bernd

Autor: Bernd Schuster (mms)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
arbeiten tue ich mit dem AT91RM9200 Controller, dessen interner RAM von 
0x0020000 bis 0x002FFFFF liegt...

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bernd Schuster wrote:

> Der Heap und der Stack laufen doch irgendwann zusammen - d.h.
> oberhalb des Stack Pointers befindet sich doch eigenltich gar
> nichts, oder?

Ja und nein. Gibt beides. Es ist zwar ziemlich verbreitet, einen 
einzigen Stack vom oberen Rand des RAMs nach unten und den Heap 
andersrum dagegen laufen zu lassen, aber wetten würde ich nicht drauf. 
Schon garnicht bei ARMs, die oft mit einem separaten Interrupt-Stack 
arbeiten. In den üblichen Startup-Codes ist der dann nicht selten nur 
pro forma definiert, grad 4 Bytes gross, was eigentlich nur als 
Platzhalter für konkretere Angaben gedacht ist. Wer das vergisst...

> Wenn ich versuche ein Pattern auf eine solche Addresse (z.b. 0x00205241)
> zu schreiben, bei der ein Data Abort erfolgt -> erhalte ich ebenfalls
> einen Data abort. Was könnte das Problem hierfür sein?

Für solche Zwecke ist ein JTAG-Debugger recht hilfreich. Der kann dann 
nämlich einen Tip geben, wo genau das Problem auftrat. Geht aber auch 
anders, wenn der Abort-Handler das irgendwo mitteilt.

Und wenn man Worte auf eine ungerade Adresse schreibt...

Autor: Bernd Schuster (mms)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich hab einen Abort Handler, der mit die genau Addr sagt von dem Data 
Abort und ob es sich um einen Lese- oder Schreibzugriff handelte.

Der User-Stack ist bei mir 0x00000400, der IRQ stack ist 0x00000080 und 
die anderen alle 0x00000008 (FIQ - hab ich keinen installiert, oder ABT, 
Supervisor etc.). Das ganze Programm läuft auch im User-Mode.

Mein Stackptr zeigt auf jeden Fall zu Beginn auf die höchste Addr, die 
sich aus der Summierung der verschiedenen Stacks ergibt. Beim Heap ist 
die Adresse 0x00000000 eingetragen (sollte auch so stimmen, da es sonst 
auch funktionierte und die Einstellung von Keil gekommen ist). Hab ich 
auch in den anderen Bsp von Keil Projekten so gesehen.


D.h. der Speicherbereich über meinem Stack ist für alles frei 
zugänglich?


>Und wenn man Worte auf eine ungerade Adresse schreibt...

Stichwort: Alignement - hab ich auch gerade gemerkt.. d.h. aber im 
Umkehrschluss dass bei mir irgendwas auf genau so eine Addr zugreift.

Bernd

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.