ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

STM32F103RCT6项目RAM&ROM占用分析

2021-02-18 11:04:54  阅读:275  来源: 互联网

标签:ROM MEM 占用 RAM STM32F103RCT6 内存 SIZE


STM32F103RCT6项目RAM&ROM占用分析

查阅DataSheet可知STM32F103RCT6属于大容量产品,内含256KB的Flash,48KB的SRAM

image-20210217145353613

之前关于RAM&ROM的空间利用根本没有考虑,但在移植FreeRTOS和jasson库之后,在任务中调用Json_loads()时,包括用malloc申请空间时偶尔会出现Hardware fault。如此看来,合理的空间分配非常有必要!

#ROM

image-20210217151521790

手册中的大容量产品以512KB的内部Flash为例(256KB同理),它主要分为三个部分:主存储器、信息块和一些相关寄存器

我们说的Flash大小就是指主存储器的大小,2KB为一页;

信息块中存储的内容是用于串口IAP程序下载方式的BootLoader,本项目用不到所以暂时不研究;


下载进去的代码就存储在256KB的主存储块中,具体代码占用多少字节可以在keil编译完成之后在Output窗口中查看:

image-20210218104920457

以这张图为例,ROM占用的空间大概=Code + RO-data + RW-data,不超过32KB

相较于F103RCT6 256KB的ROM,空间还是很充裕的


#RAM

相比于ROM充裕的空间,RAM的48KB在移植FreeRTOS后就比较紧凑了

Build Output窗口有RW-data和ZI-data两个Size

image-20210218104920457

RW-data是初始化为非0的数据占用空间,程序静止时这些数据被存放在ROM,程序运行时被加载到RAM

ZI-data是初始化为0的数据占用空间,静止时不占用空间,程序运行时被加载到RAM

本项目中RW-data+ZI-data共占用小于32KB的RAM

具体分配到以下部分:

1 内存管理

STM32没有MMU,我们只能自己实现一个简易的内存管理来动态申请空间(不然只定义数组这得浪费多大的空间),其实也就是定义一个指针来使用malloc()和free()申请和释放连续的空间

根据正点原子例程中的定义,内存参数设定为:

//内存参数设定.
#define MEM_BLOCK_SIZE		        32  	         	    //内存块大小为32B,内存分配时的最小单元
#define MEM_MAX_SIZE			10*1024  	            //最大管理内存10KB
#define MEM_ALLOC_TABLE_SIZE	MEM_MAX_SIZE/MEM_BLOCK_SIZE 	    //内存表大小

内存管理部分占用的RAM总共大小=MEM_MAX_SIZE+MEM_ALLOC_TABLE_SIZE*2(MEM_ALLOC_TABLE_SIZE*2是因为内存管理状态表是uint_16类型的)

此例程中共分配10KB+640B,这是内存管理部分占用的RAM

2 FreeRTOS

FreeRTOSConfig.h文件中的configTOTAL_HEAP_SIZE定义了FreeRTOS分配的最大堆

configTOTAL_HEAP_SIZE宏定义的单位是Byte,但任务创建时的单位是size_t(4B)

#define configTOTAL_HEAP_SIZE                  ((size_t)8*1024)  

共计8KB

3 堆栈空间

启动文件中配置了局部变量、递归调用等使用的栈空间,以及malloc动态内存申请使用的堆空间

实测jasson库中的json_loads()的调用会占用较大的堆空间,我们自己进行动态申请时最好使用实现的内存管理中的内存分配函数mymalloc()

Stack_Size     EQU     0x400
Heap_Size      EQU     0x1000

共计5KB

4 初值0或非0的可读写数据

在map文件中可以看到每个源文件中这部分占用的RAM大小

image-20210218105503822

标签:ROM,MEM,占用,RAM,STM32F103RCT6,内存,SIZE
来源: https://www.cnblogs.com/Irvingcode/p/14410976.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有