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
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
Das ist eigentlich egal. Du musst eine Funktion bereitstellen, die den Speicher vergibt und weiß, was noch frei ist.
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.
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
Wie kommst du darauf? Warum sollte die newlib nicht in der Lage sein, ihre Verwaltungsdaten selbst zu initialisieren?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.