Forum: Mikrocontroller und Digitale Elektronik STM32: Linkerscript löst Debugging-Problem aus?


von U. E. (Gast)


Angehängte Dateien:

Lesenswert?

Hi,
ich habe mit dem beigefügten Linkerscript (STM32F10x_512k_64.ld) für 
einen STM32RE meine C++ Applikation mit CodeSourcery erstellt.
Der Operator new ist überladen und durch eine extrem simple Lösung 
ersetzt: er soll im Heap neuen Speicher allokieren, eine Deallokation 
ist (aktuell) nicht geplant (Auszug des Codes ist in 
mini_new_fragment.cpp).

Beim Debuggen mit dem J-Link tritt nun ein Problem auf, für das ich 
keine Erklärung finden kann:
Bild 1 (vorher.jpg) zeigt den Debugger vor dem Ausführen des Vergleichs 
(heap_end == 0).
Ein einfacher 'Step' führt zum dem Ergebnis in Bild 2 (nachher.jpg).

Wenn ich die entsprechende Stelle im Hauptprogramm überspringe (also 
nicht in new hinein durchsteppe), liefert er bei der Allokation eine -1 
als Speicheradresse (Fehler).

Die Zuordnung:
1
heap_end = &_ebss;
habe ich geändert in:
1
heap_end = &_susrstack;
nachdem ich in der Map-Datei gesehen habe, daß _ebss auf 0x20000000 
(Anfang des RAMs) liegt. Hier liegen aber auch die statischen Variablen 
wie heap_end. Deshalb bin ich auf _susrstack ausgewichen ( = 
0x200000012, liegt nach den statischen Variablen).
Hat natürlich nichts geändert, weil er ja gar nicht zur Ausführung der 
Anweisung kommt.

Dennoch habe ich das Gefühl, daß es am Linkerskript liegt. Hat jemand 
eine Idee?

Grüße
schnack

von U. E. (Gast)


Lesenswert?

Noch eine Ergänzung:
Den letzte Zugriff, der im J-Link Fenster erfolgt, habe ich durch 
"hoovering" über heap_end ausgelöst. Die statische Variable ist bei 
0x20000008 abgelegt.
Wie ich durch Googeln gefunden habe, wird die Debugger-Fehlermeldung 
wahrscheinlich durch einen illegalen Speicherzugriff ausgelöst. Aber was 
kann an dieser Abfrage (Ist der 32bit Wert ab 0x20000008 gleich 0?) 
nicht zulässig sein?
Grüße
schnack

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.