RAM -, Heap-und Stack-Speicher für ein STM32 board
Arbeite ich an einem Projekt, das erfordert, dass mindestens 500 kB Speicher verwendet werden. Ich habe ein SDK mit diesem code definieren, der stack und dem heap, und es funktioniert gut.
Stack_Size EQU 0x00004000
AREA STACK, NOINIT, READWRITE, ALIGN=3
Stack_Mem SPACE Stack_Size
__initial_sp
; <h> Heap Configuration
; <o> Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
; </h>
Heap_Size EQU 0x00200000
AREA HEAP, NOINIT, READWRITE, ALIGN=3
__heap_base
Heap_Mem SPACE Heap_Size
__heap_limit
Aber ich versuche mich zu integrieren, eine Kamera und LCD-Bildschirm Funktion in dieser SDK, und wenn ich das mache, dass die höchsten Werte von stack und heap, zumindest bringen Sie den LCD-Bildschirm wie unten gezeigt. Alle Werte, die höher als dieser und der LCD-Bildschirm bleibt schwarz und der Anwendung nicht erscheint, um zu laufen.
Stack_Size EQU 0x00004000
AREA STACK, NOINIT, READWRITE, ALIGN=3
Stack_Mem SPACE Stack_Size
__initial_sp
; <h> Heap Configuration
; <o> Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
; </h>
Heap_Size EQU 0x00002B50
AREA HEAP, NOINIT, READWRITE, ALIGN=3
__heap_base
Heap_Mem SPACE Heap_Size
__heap_limit
Brauche ich die Größe des stack und heap in der zweiten code-Beispiel entsprechen die Größen in der ersten code-Beispiel so, dass ich nicht stecken bleiben in einen hard-fault exception-Schleife, da kein Speicher vorhanden ist. Warum hat die Erhöhung der heap-Größe ist mein Projekt noch schlimmer? Also wie kommen Sie nicht scheinen sogar zu laufen, wenn ich erhöhe den heap-Größe?
Ich habe anbei einen screenshot von meinem Projekt-Optionen, so können Sie die Konfiguration der RAM.
Unten ist die Menge an Speicher, die ich habe. Tut dieser Mittelwert, dass ich 2 MB RAM?
8 M x 32-bit-SDRAM verbunden ist SDRAM Bank1 des STM32F439NIH6 FMC
- Schnittstelle.
1 Mbit x 16 SRAM verbunden ist bank1 NOCH/
PSRAM2 der FMC-Schnittstelle und 8-bit
und 16-bit-Zugriff ist erlaubt BLN0 & BLN1 verbunden BLE & BHE von SRAM
bzw.
ja, es war reduziert, da wenn ich es die 0x00200000 Wert, der erforderlich ist, dann wird das Projekt nicht ausgeführt.
0x00200000 sind 2097152 bytes des heap - Ihre controller gar nicht so viel Speicher. Heap-und Stack-Auswahl ist eine wichtige und schwierige Aufgabe für STM32. Sie sollten denken, wie viel Speicher erforderlich ist, und legen Sie dann Ihren stack 'und, heap' zu den passenden Größen. Auch du brauchst auf jeden Fall wissen, wo Sie Ihre Variablen oder arrays deklariert werden. Machen Sie ein Betriebssystem verwenden?
InformationsquelleAutor Dude | 2014-07-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihre STM32F4 mikrocontroller nicht physisch 0x200000 (2 MB) RAM Anfang an der Adresse 0x20000000. Ich glaube, es hat nur 0x30000 (192 KB). Überprüfen Sie die Speicher-map-Abschnitt des Datenblatts.
Wenn Sie sagen, dass der linker, dass es nicht existent Speicher verfügbar ist, dann wird der linker kann versuchen, Sie zu verwenden, Speicher und dann wird Ihr Programm Abstürzen. Ich vermute, für Ihre original-Programm, den linker noch nie verwendet, den nicht vorhandenen Speicher, so dass das Programm erfolgreich ausgeführt wurde. Aber in Ihrem weiteren Programm der linker versucht den nicht vorhandenen Speicher und das Programm zum Absturz zu bringen. Blick auf die map-Datei generiert der linker um zu sehen, wie die verschiedenen Teile des Programms zugewiesen wurden, in den Speicher durch den linker. Du wirst wahrscheinlich feststellen, dass das erste Programm nicht Speicher über 0x20030000 aber das zweite Programm funktioniert.
Wenn Sie wirklich brauchen, 500 KB Speicher oder mehr, dann sind Sie gehen zu müssen, fügen Sie einen externen Speicher an dein board, da der mikrocontroller nicht so viel RAM haben.
Update: Wenn Ihr board hat den Speicher angeschlossen ist, um das FMC (flexible memory controller), dann ist das externe oder off-chip-Speicher. Der externe Speicher ist nicht adressiert an 0x20000000 obwohl. Es sollte sich irgendwo im Bereich von 0x60000000 zu 0xDFFFFFFF (siehe memory-map-Abschnitt des Datenblatts). Wird Ihr Programm zum konfigurieren des FMC entsprechend vor dem Zugriff auf den externen Speicher. Und Sie sollten wahrscheinlich sagen, der linker, dass die externen Speicher vorhanden ist, indem eine (oder mehrere) dieser off-chip-Speicher-Abschnitte in das Dialogfeld Optionen. Sie können wahrscheinlich erhalten Sie details und Tipps zum aktivieren der off-chip-Speicher aus dem board-designer.
Sie haben keine 2Mb IROM.
Ich dont haben eine Speicher-map-Abschnitt auf meinem Datenblatt @kkrambo
Hier ist die STM32F439xx Datenblatt. Siehe Kapitel 5, Seite 84.
InformationsquelleAutor kkrambo
Wenn Sie sagen, dass der linker Sie Teil hat 2 MB on-chip-ROM und 2 MB + 64 Kb on-chip RAM wird es dir glauben, und glücklich suchen Sie code und Daten entsprechend - aber erwarten Sie nicht, etwas sinnvolles zu passieren, wenn Sie auf Speicher zuzugreifen, der nicht existiert!
Wenn Sie die Speicherbereiche richtig, der linker einen Fehler, wenn Sie überschritten haben, das Ziel der Kapazität. Das ist eine physikalische Grenze, die Lösung ist nicht, zu Lügen, um den linker - das erzeugt einen Laufzeit-Fehler, anstatt einen build-Fehler.
InformationsquelleAutor Clifford