7.17. MEMORY

Overview

提供芯片内存使用示例和常见问题。

7.17.1. 应用示例

示例演示:

  • 定义变量/函数到 flash/sdram/内部ram

example: 进入 apps/demo/demo_DevKitBoard/include/demo_config.h ,开启宏 USE_MEMORY_TEST_DEMO

7.17.2. 常见问题

  • 如何查看芯片内存使用情况?

    答:系统开机以后会打印 芯片内存使用情况如下所示:

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    setup_arch Jul 12 2021 10:07:49
    sys_clk = 320000000,sdram_clk = 240000000,hsb_clk = 160000000,lsb_clk = 53333333, sfc_clk = 80000000
    CODE+CONST SIZE = 1622496
    SDRAM_SIZE = 2097152, DATA_SIZE = 45444,BSS_SIZE = 454944,REMAIN_SIZE = 1596764
    RAM_SIZE = 523728,DATA_SIZE = 12624,BSS_SIZE = 499120,REMAIN_SIZE = 11984
    CACHE_RAM_SIZE = 0,DATA_SIZE = 0, BSS_SIZE = 0,REMAIN_SIZE = 0
    HEAP_SIZE = 1596704
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    
    • CODE+CONST代表代码加const变量总大小

    • SDRAM_SIZE 代表SDRAM容量大小

    • RAM_SIZE 代表芯片内部RAM容量大小

    • CACHE_RAM_SIZE 代表芯片内部一块小的,并且跟内部RAM不连续地址的额外可用大小

    • DATA_SIZE 代表有初始化的变量大小

    • BSS_SIZE 代表无初始化的变量大小

    • REMAIN_SIZE 代表该区域剩余可用大小

    • HEAP_SIZE 代表内存堆大小,通常是位于 SDRAM的 REMAIN_SIZE,如果没有SDRAM则位于内部RAM的REMAIN_SIZE

  • 任务栈在什么内存上?

    答:创建的任务如果是静态任务,栈位于全局变量所在内存; 如果是动态任务,栈位于堆内存

  • 如何查看地址映射MAP文件

    答:MAP文件位于对应cpu的tools目录下, 如 sdk.map

Warning

如果定义函数到sdram/内部ram导致异常报错pc_limit_err,是由于程序代码跑到其他段系统误以为跑飞,这时候需要把debug_init的pc_rang_limit注释掉。

7.17.3. API Reference