I am working on a project that requires at least 500 kB of memory to be used. I have an SDK with this code defining the stack and the heap and it works fine.
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
However, I am trying to integrate a camera and LCD screen feature into this SDK, and when I do that, the highest values of the stack and heap that will at least bring up the LCD screen are shown below. Any values higher than this and the LCD screen stays black and the application doesn´t appear to run.
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
I need the sizes of the stack and heap in the second code sample to match the sizes in the first code sample so that I do not get stuck in a hard fault exception loop due to no memory being available. Why does increasing the heap size make my project worse? Meaning how come it doesn´t even appear to run when I increase the heap size?
I have attached a screenshot of my project options so you can see the configuration of the RAM.
Below is the amount of memory I have. Doesn´t this mean that I have 2 MB of RAM?
8 M x 32-bit SDRAM is connected to SDRAM Bank1 of the STM32F439NIH6 FMC interface.
1 Mbit x 16 SRAM is connected to bank1 NOR/ PSRAM2 of the FMC interface and both 8-bit and 16-bit access is allowed by BLN0 & BLN1 connected to BLE & BHE of SRAM respectively.