我正在进行一个项目,需要至少使用500 kB的内存。我有一个带有定义堆栈和堆的代码的SDK,它可以正常工作。
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
然而,我正在尝试将相机和LCD屏幕功能集成到此SDK中。在这样做时,至少需要达到以下堆栈和堆的最高值才能启动LCD屏幕。超过此值后,LCD屏幕将保持黑色,应用程序似乎无法运行。
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
我需要第二个代码示例中的堆和栈大小与第一个代码示例中的大小匹配,以免由于没有可用内存而陷入硬故障异常循环。为什么增加堆大小会使我的项目变得更糟?也就是说,为什么当我增加堆大小时,它甚至看起来都无法运行?
我已经附上了我的项目选项截图,以便您可以查看RAM的配置。
下面是我拥有的内存量。这难道不意味着我有2MB RAM吗?
8M x 32位SDRAM连接到STM32F439NIH6 FMC的SDRAM Bank1接口。
1 Mbit x 16 SRAM连接到FMC接口的bank1 NOR/PSRAM2,SRAM的BLE & BHE分别连接到BLN0 & BLN1,可以进行8位和16位访问。