以STM32F103RCT6为例分析单片机的RAM以及ROM使用情况

  • Post author:
  • Post category:其他


1.stm32f103rct6的RAM:48k,ROM:256k

2.如果使用了原子的内存管理,在malloc.h中可以设置一片内存为动态内存,程序中用到的数组或为指针开辟内存就可以使用mymalloc,myfree来管理了

//内存参数设定
#define MEM_BLOCK_SIZE            32                                //内存块大小为32字节
#define MEM_MAX_SIZE            25*1024                          //最大管理内存,一般设置小于48k的90%,如果跑系统还要减去系统占用
#define MEM_ALLOC_TABLE_SIZE    MEM_MAX_SIZE/MEM_BLOCK_SIZE     //内存表大小

3.如果用了freertos,在FreeRTOSConfig.h中可以设置系统的内存,一般由小往大设置,够用就行,此处设置15k

/***************************************************************************************************************/
/*                                FreeRTOS与内存申请有关配置选项                                           */
/***************************************************************************************************************/
#define configSUPPORT_DYNAMIC_ALLOCATION        1                       //支持动态内存申请
#define configTOTAL_HEAP_SIZE                    ((size_t)(15*1024))     //系统所有总的堆大小

4.目前已使用的内存为25+15=40k, 如果程序中不用原子的内存管理,那么定义的数组或使用自带的malloc()函数来分配内存就会消耗剩余的8k内存

5.可以用keil编译程序来查看已使用的RAM及ROM

编译提示:Program Size: Code=26976 RO-data=176724 RW-data=296 ZI-data=60712

RO-data为ROM:172.58k

RW-data+ZI-data为RAM:59.57k     这儿显示的并不一定准确,明显超了48k,主要keil将程序所有的定义都算了进去

当然在工程的.map文件中的最后也有相关定义和keil编译提示的一样



版权声明:本文为chidaoqi1607原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。