stm32应用笔记:如何给项目选取合适的ROM和RAM参数

如何选取合适的存储器参数

1.单片机的存储器原理:

1.1stm32单片机和PC机在程序加载方面的不同:

  • **不同于和PC机器把硬盘中的程序加载到内存之中,单片机在运行的过程中指令和数据是分开在两个存储空间来分别读写的,这里涉及到哈佛结构和冯诺伊曼结构。**如下图所示:
  • 在这里插入图片描述

在x86架构的cpu中,由于只有一套总线来进行数据交换,所以采用了分段管理的机制,通过代码段和数据段的分开,来区分指令和数据。而哈佛结构的计算机则是使用两套总线,两个存储器同时进行操作码和操作数的获取,效率更高,但是工艺也复杂。

1.2原因分析

x86构架的cpu是基于冯.诺依曼体系的,即数据和程序存储在一起,而且pc机的RAM资源相当丰富,从几十M到几百M甚至是几个G,客观上能够承受大量的程序数据。
单片机的构架大多是哈弗体系的,即程序和数据分开存储,而且单片的片内RAM资源是相当有限的,内部的RAM过大会带来成本的大幅度提高。
冯.诺依曼体系与哈佛体系的区别:
二者的区别就是程序空间和数据空间是否是一体的。 早期的微处理器大多采用冯诺依曼结构,典型代表是Intel公司的X86微处理器。取指令和取操作数都在同一总线上,通过分时复用的方式进行的。缺点是在高速运行时,不能达到同时取指令和取操作数,从而形成了传输过程的瓶颈。
哈佛总线技术应用是以DSP和ARM为代表的。采用哈佛总线体系结构的芯片内部程序空间和数据空间是分开的,这就允许同时取指令和取操作数,从而大大提高了运算能力。
例如STM320LF240x系列DSP是增强型的哈佛结构通过三组并行的总线访问多个存储空间。它们分别是:程序地址总线(PAB),数据地址读总线(DRAB)和数据地址写总线(DWRB)。

小结
STM32支持两种方式,它是由两个引脚来控制启动方式的,通常是下载到flash启动;用jlink在线仿真,则是下载到SRAM中,无需改变启动方式SRAM掉电后程序会自动消失。

2.如何确定ROM和RAM的大小

  • 在开发环境中我们会在程序编译完成之后得到如下的信息:
    在这里插入图片描述
    Code --表示代码段的数据大小(单位Byte)
    RO-data – 只读数据段,存储在代码段当中
    RW-data – 已经初始化的变量;
    ZI-data – 未初始化的变量;
  • ROM的容量计算公式:(code + RO_data + RW_data)/ 1024
  • RAM的计算公式:(RW_data + ZI_data) / 1024;
    - 原理:ZI_data 是未经初始化的变量,往往默认为0;所以为了节约Flash空间,只需要在程序运行的时候在RAM里面开辟相关空间,然后赋值为0即可。RW_data 由于已经被初始化,所以必须在ROM中保持它的初始化值,因此在RAM和ROM之中,都要给这部分数据开辟空间。

3.如何优化程序的大小

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值