STM32板的RAM,堆和堆栈存储器

 石榴岗村-沙芖鱼 发布于 2023-01-01 13:38

我正在开发一个需要至少500 kB内存的项目.我有一个SDK,用这个代码定义堆栈和堆,它工作正常.

Stack_Size      EQU     0x00004000

            AREA    STACK, NOINIT, READWRITE, ALIGN=3
Stack_Mem       SPACE   Stack_Size
__initial_sp


;  Heap Configuration
;     Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
; 

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


;  Heap Configuration
;     Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
; 

Heap_Size       EQU     0x00002B50

            AREA    HEAP, NOINIT, READWRITE, 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连接到FMC接口的bank1 NOR/PSRAM2,BLN0和BLN1分别连接到SRAM的BLE和BHE,允许8位和16位访问.

1 个回答
  • 从地址0x20000000开始,您的STM32F4微控制器在物理上没有0x200000(2 MB)的RAM.我相信它只有0x30000(192 KB).检查数据表的存储器映射部分.

    如果告诉链接器存在可用的不存在的内存,则链接器可能会尝试使用该内存,然后程序将崩溃.我怀疑你的原始程序链接器从未使用过不存在的内存,所以程序运行成功.但是在你的后续程序中,链接器正在尝试使用不存在的内存,程序正在崩溃.查看链接器生成的映射文件,以查看链接器如何将程序的各个部分分配到内存中.您可能会发现第一个程序不使用0x20030000以外的内存,但第二个程序没有.

    如果你真的需要500 KB或更多的内存,那么你将不得不在你的主板上添加一个外部存储设备,因为微控制器没有那么多内存.

    更新:如果您的主板已将内存连接到FMC(灵活内存控制器),那么这是外部或片外内存.但是外部存储器不在0x20000000处寻址.它应该位于0x60000000到0xDFFFFFFF范围内的某个位置(参见数据手册的存储器映射部分).在访问外部存储器之前,您的程序必须适当地配置FMC.并且您应该通过在该选项对话框中启用一个(或多个)片外存储器部分来告诉链接器存在外部存储器.您可以获得有关如何从电路板设计人员启用片外存储器的详细信息和建议.

    2023-01-01 13:41 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有