Forum: Compiler & IDEs Verständnisfrage: Heap Initialisierung im Assembler Startup-Code


von Jerome R. (jrt)


Lesenswert?

Hallo,

habe eine eigene Startup-Routine für der ARM Cortex A8 geschrieben, aber 
ich verstehe nicht, wie ich den Heap Sektor initialisieren soll.
Nun habe ich aus einen anderen Projekt(für den ARM9) folgenden Code 
gefunden:

  LDR r0, = _heap_start_;
  LDR r1, = _heap_end_;
  SUB r1, r1, r0;
  CMP r1, #8;
  MOVGE r2, #0;
  STRGE r2, [r0], #+4;
  STRGE r1, [r0];

aber ich weiss leider nicht ob diese Initialisierung richtig und 
überhaupt nötig ist.
Ich benutze den gcc vom CodeSourcery zum compilieren.
Habe leider keine Infos zu meinem Problem gefunden. Weiß vielleicht 
jemand etwas darüber oder wo ich Informationen dazu finden kann ?

Vielen Dank im Voraus

Jerome

von Jerome R. (jrt)


Lesenswert?

Hallo nochmal,

habe mich warsch. etwas umständlich in meiner Frage ausgedrückt. 
Eigentlich sollte meine Frage nur lauten:
Wenn ich den GCC benutze, wie muss mein Heap-Speicher aussehen, bevor 
das erste mal malloc() o.ä. aufgerufen wird? Muss es mit Nullen gefüllt 
sein oder irgendetwas am Anfang? Ich denke, dass der GCC Compiler da 
keine Untescheidung macht ob es sich um einen ARM9 oder ARM Cortex A8 
ist, oder?

Vielen Dank im Voraus

Jerome

von Tilo (Gast)


Lesenswert?

Das ist eigentlich egal. Du musst eine Funktion bereitstellen, die den 
Speicher vergibt und weiß, was noch frei ist.

von Tilo (Gast)


Lesenswert?

Vielleicht ein bischen mehr Info:

Malloc fordert X Bytes per "Systemcall" an. Zumindest beim ARM7 und GCC 
laufen solche Dinge über die newlib und die will Systemcalls 
implementiert haben. Der Systemcall gibt dann einen Zeiger auf den 
Speicherplatz zurück.
Da muss nichts großartig initialisiert werden.
Im einfachsten Fall ist der Anfang des Heaps der Anfang des freien 
Speicherplatz. Jedesmal wenn per Malloc Speicher angefragt wird, wird 
die zu verwendende Speicheradresse hoch gezählt.
In komplexeren Systemem muss man sich allerdings etwas anderes 
ausdenken.

von Jerome R. (jrt)


Lesenswert?

Danke,

Jetzt hätte ich noch eine (vielleicht dumme) Frage: wenn also nichts 
initialisiert werden muss, dann befinden sich die Daten, die von newlib 
zur Heap-Verwaltung gebraucht werden, garnicht im Heap selbst, oder?

Jerome

von Rolf Magnus (Gast)


Lesenswert?

Wie kommst du darauf? Warum sollte die newlib nicht in der Lage sein, 
ihre Verwaltungsdaten selbst zu initialisieren?

von Tilo (Gast)


Lesenswert?

Rolf, beziehst du dich auf mich?

Die newlib ist Hardware unabhänig. Alles was hardwarenah ist, muss in 
Sytemcalls bereitgestellt werden.

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.