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,ALIGN=3 __heap_base Heap_Mem SPACE Heap_Size __heap_limit
但是,我正在尝试将相机和LCD屏幕功能集成到此SDK中,当我这样做时,至少会调出LCD屏幕的堆栈和堆的最高值如下所示.任何高于此值且LCD屏幕保持黑色且应用程序似乎不运行.
Stack_Size EQU 0x00004000 AREA STACK,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,ALIGN=3 __heap_base Heap_Mem SPACE Heap_Size __heap_limit
我需要在第二个代码示例中使用堆栈和堆的大小来匹配第一个代码示例中的大小,这样我就不会因为没有可用内存而陷入硬故障异常循环.为什么增加堆大小会使我的项目变得更糟?这意味着当我增加堆大小时,它甚至不会出现?
我附上了项目选项的屏幕截图,以便您可以看到RAM的配置.
以下是我的内存量.这不是说我有2 MB的RAM吗?
8 M x 32位SDRAM连接到STM32F439NIH6 FMC的SDRAM Bank1
接口.
1 Mbit x 16 SRAM连接到bank1 NOR /
FMC接口的PSRAM2均为8位
BLN0& amp; 16允许16位访问. BLN1连接到BLE& SRAM的BHE
分别.
解决方法
如果告诉链接器存在可用的不存在的内存,则链接器可能会尝试使用该内存,然后程序将崩溃.我怀疑你的原始程序链接器从未使用过不存在的内存,所以程序运行成功.但是在你的后续程序中,链接器正在尝试使用不存在的内存,程序正在崩溃.查看链接器生成的映射文件,以查看链接器如何将程序的各个部分分配到内存中.您可能会发现第一个程序不使用0x20030000以外的内存,但第二个程序没有.
如果你真的需要500 KB或更多的内存,那么你将不得不在你的主板上添加一个外部存储设备,因为微控制器没有那么多内存.
更新:如果您的主板已将内存连接到FMC(灵活内存控制器),那么这是外部或片外内存.但是外部存储器不在0x20000000处寻址.它应该位于0x60000000到0xDFFFFFFF范围内的某个位置(参见数据手册的存储器映射部分).在访问外部存储器之前,您的程序必须适当地配置FMC.并且您应该通过在该选项对话框中启用一个(或多个)片外存储器部分来告诉链接器存在外部存储器.您可以获得有关如何从电路板设计人员启用片外存储器的详细信息和建议.