| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 嵌入式 -> FLASH、RAM、ROM的区别及Code RO-data RW-data ZI-data的意义 -> 正文阅读 |
|
[嵌入式]FLASH、RAM、ROM的区别及Code RO-data RW-data ZI-data的意义 |
?学了那么久的单片机和STM32,也没有了解过FLASH、RAM、ROM区别。今天在STM32G030F6P6上移植RT-Thread nano,然而移植fish的时候出现了如下存储空间不够的情况。于是摆渡对这些进行了知识进行了清理,下面介绍一下这些Memory的区别,以及编译之后的程序大小与上述存储器的关系。 ROM (Read Only Memory)程序存储器 ? ? ? ROM全称Read Only Memory,又叫程序存储器,顾名思义,就是用来存储程序代码的。因ROM中所存数据稳定,一旦存储数据就再也无法将之改变或者删除,断电后所存数据也不会消失。一些关键数据也会存储ROM中。 FLASH 存储器 ? ? ?Flash 存储器(FLASH EEPROM)又称闪存,快闪。它是EEPROM的一种。它结合了ROM和RAM的长处。不仅具备电子可擦除可编辑(EEPROM)的性能,还不会断电丢失数据同时可以快速读取数据。它于EEPROM的最大区别是,FLASH按扇区(block)操作,而EEPROM按照字节操作。FLASH的电路结构较简单,同样容量占芯片面积较小,成本自然比EEPROM低,因此适合用于做程序存储器。例如STM32的程序存储器大都是FLASH存储器。 RAM (Random Access Memory)随机访问存储器 ? ? ? RAM又称随机存取存储器,存储单元的内容可按照需要随机取出或存入,且存取的速度与存储单元的位置无关。这种存储器在断电时,将丢失其存储内容,所以主要用于存储短时间使用的程序。它主要用来存储程序中用到的变量。凡是整个程序中,所用到的需要被改写的量(包括全局变量、局部变量、堆栈段等),都存储在RAM中。 ROM, FLASH和RAM的区别 对于RAM, ROM以及FLASH的区别,简单地说,在计算机中,RAM 、ROM都是数据存储器。RAM 是随机存取存储器,它的特点是易挥发性,即掉电失忆。ROM 通常指固化存储器(一次写入,反复读取),它的特点与RAM 相反。ROM又分一次性固化、光擦除和电擦除重写两种类型。在应用中,常规上ROM是用来存储固化程序的,RAM是用来存放数据的。由于FLASH ROM比普通的ROM读写速度快,擦写方便,一般用来存储用户程序和需要永久保存的数据。 比如笔者所使用这款CPU:STM32G030F6P6,TSSOP20,FLASH:32KB,SRAM:8KB;打开配置文件,可以看到该芯片的 flash起始地址为0x8000000,大小为0x8000(16进制)—>32768字节(10进制)—>32KB RAM起始地址为0x2000000,大小为0x2000(16进制)—>8192字节(10进制)—>8KB ? ? ? ?下面再来看一下程序编译后keil打印的内存分配信息如下图所示,我们来看一下Program size: Code, RO-data , RW-data, ZI-data具体代表什么? Code 从英文意思可知代码占用的空间大小,这部分占用FLASH存储空间 RO-data表示read olny-data即只读读常量的大小,如const型,存放FLASH RW-data表示Read Write-data即?可读可写变量,就是初始化时候就已经赋值了的变量,这部分数据存贮在RAM中 ZI-data表示Zero Initialize-data没有初始化的可读写变量的大小,就是程序中用到的变量并且被系统初始化为0的变量的字节数,keil编译器默认是把你没有初始化的变量都赋值一个0,这些变量在程序运行时是保存在RAM中的。 也就是RW + ZI就是你的程序总共使用的RAM字节数。 如下下面两幅图中,将堆栈(就是一个未初始化的数组)的大小由RT_HEAP_SIZE (1*1024)改为RT_HEAP_SIZE (2*1024),再重新编译工程,比较前后keil打印的内存分配信息,可以看到ZI-data的大小发生了变化。有6956变为7980,正好增加了1024。 |
|
嵌入式 最新文章 |
基于高精度单片机开发红外测温仪方案 |
89C51单片机与DAC0832 |
基于51单片机宠物自动投料喂食器控制系统仿 |
《痞子衡嵌入式半月刊》 第 68 期 |
多思计组实验实验七 简单模型机实验 |
CSC7720 |
启明智显分享| ESP32学习笔记参考--PWM(脉冲 |
STM32初探 |
STM32 总结 |
【STM32】CubeMX例程四---定时器中断(附工 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 4:49:02- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |