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:
habe ich geändert in:
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