www.mikrocontroller.net

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


Autor: Jerome Rt (jrt)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jerome Rt (jrt)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Tilo (Gast)
Datum:

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

Autor: Tilo (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Jerome Rt (jrt)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Rolf Magnus (Gast)
Datum:

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

Autor: Tilo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Rolf, beziehst du dich auf mich?

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

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.