RT-Thread-程序内存分布

文章目录

介绍

一般 MCU 包含的存储空间有:片内 Flash 与片内 RAM,RAM 相当于内存,Flash 相当于硬盘。编
译器会将一个程序分类为好几个部分,分别存储在 MCU 不同的存储区。
Keil 工程在编译完之后,会有相应的程序所占用的空间提示信息,如下所示

Build started: Project: project
*** Using Compiler 'V5.06 update 6 (build 750)', folder: 'D:\Keil_v5\ARM\ARMCC\Bin'
Build target 'rtthread'
compiling thread.c...
compiling main.c...
linking...
Program Size: Code=48476 RO-data=7716 RW-data=560 ZI-data=3880  
After Build - User command #1: fromelf --bin .\build\keil\Obj\rt-thread.axf --output rtthread.bin
".\build\keil\Obj\rt-thread.axf" - 0 Error(s), 0 Warning(s).
Build Time Elapsed:  00:00:10

上面提到的 Program Size 包含以下几个部分:
1)Code:代码段,存放程序的代码部分;
2)RO-data:只读数据段,存放程序中定义的常量;
3)RW-data:读写数据段,存放初始化为非 0 值的全局变量;
4)ZI-data:0 数据段,存放未初始化的全局变量及初始化为 0 的变量

1)RO Size 包含了 Code 及 RO-data,表示程序占用 Flash 空间的大小;
2)RW Size 包含了 RW-data 及 ZI-data,表示运行时占用的 RAM 的大小;
3)ROM Size 包含了 Code、RO Data 以及 RW Data,表示烧写程序所占用的 Flash 空间的大小
其中动态内存堆为未使用的 RAM 空间,应用程序申请和释放的内存块都来自该空间。

内存使用的宏定义相关如下

#define STM32_FLASH_START_ADRESS       ((uint32_t)0x08000000)
#define STM32_FLASH_SIZE               (512 * 1024)
#define STM32_FLASH_END_ADDRESS        ((uint32_t)(STM32_FLASH_START_ADRESS + STM32_FLASH_SIZE))//0x08080000
                                                                                                            
/*
 * rw & bss is 64 KB
 * then is heap
 *
 */

#define STM32_SRAM1_SIZE               (640)   /* sram1 is 192 KB, sram2 is 64 KB, sram3 is 384 KB, but they are continous address */
#define STM32_SRAM1_START              (0x20000000)
#define STM32_SRAM1_END                (STM32_SRAM1_START + STM32_SRAM1_SIZE * 1024)

#define RW_ZI_SIZE                      (78*1024)

#define STACK_SIZE                     (12*1024)

#define USER_FIEXED_SIZE               (60*1024)
#define USER_FIXED_MEM_END             (STM32_SRAM1_END - STACK_SIZE)

#define HEAP_BEGIN                     (STM32_SRAM1_START + RW_ZI_SIZE)
#define HEAP_END                       (STM32_SRAM1_END - STACK_SIZE - USER_FIEXED_SIZE)

动态内存堆初始化

#if defined(RT_USING_HEAP)
    rt_system_heap_init((void *)HEAP_BEGIN, (void *)HEAP_END);
#endif
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值