单片机中的存储器讲解

news2024/11/16 0:32:11

单片机中的存储器

目录

  • 单片机中的存储器
    • 常用的存储器
      • 易失性存储器RAM
        • SRAM
        • DRAM
      • 非易失性存储器ROM
        • Mask ROM
        • PROM
        • EPROM
        • E2PROM
        • Flash
          • NOR Flash
          • NADN Flash
  • 单片机里全局变量、局部变量、堆、栈的存储区域
    • 区域介绍
      • 栈区
      • 堆区
      • 静态区
      • 代码区
      • 常量区
    • 内存分区分类
      • 四个区域

常用的存储器

image-20240817162143170

易失性存储器RAM

RAM,随机访问存储器(Random Access Memory),易失性存储器,它可以随时读写,而且速度很快,通常作为操作系统或其他正在运行中的程序的临时数据存储媒介。它的作用是当开机后系统运行占一部分外,剩余的运行内存越大,手机速度越快,运行的程序越多,剩余越少。

SRAM

静态随机存取存储器(Static Random Access Memory,SRAM)是随机存取存储器的一种,所谓的“静态”,是指这种存储器只要保持通电,里面储存的数据就可以恒常保持。但是掉电了就会丢失

速度非常快,一般用在电脑的CPU,高速缓存

DRAM

动态随机存取存储器(Dynamic Random Access Memory),最为常见的系统内存。DRAM 只能将数据保持很短的时间。为了保持数据,DRAM使用电容存储,所以必须隔一段时间刷新一次,所以一般会给他配一个扫描电路,每隔一段时间就扫描数据并给他补电,如果存储单元没有被刷新,存储的信息就会丢失。

SRAM 比较快、贵

DRAM 比较慢,便宜

非易失性存储器ROM

Mask ROM

只读存储器

PROM

Programmable ROM:可编程ROM,只能被编程一次

EPROM

Erasable Programmable ROM,EPROM:可擦写可编程ROM,擦写可达1000次

紫外线照射30min就可擦除

E2PROM

Electrically Erasable Programmable ROM:电子可擦除EPROM

Flash

闪存(flash memmory):基于EEPROM,它已经成为一种重要的存储技术。固态硬盘(SSD),U盘(软盘),光盘等

const 修饰的全局变量,它是只读的,存放在 flash 中的只读数据区域

NOR Flash

用户可以直接运行装载在NOR FLASH里面的代码,这样可以减少SRAM的容量从而节约了成本

读取的速度较快,但写入的速度慢

根据外部接口分,可分为普通接口和SPI接口的Nor Flash,多数支持CFI接口,所以,一般也叫做CFI接口

NADN Flash

它的读取是以一次读取一块的形式来进行的,通常是一次读取512个字节,采用这种技术的Flash比较廉价。用户不能直接运行NAND Flash上的代码,因此好多使用NAND Flash的开发板除了使用NAND Flah以外,还作上了一块小的NOR Flash来运行启动代码。

写入的速度快、价格较低

固态硬盘(Solid State Drive, SSD)也是以 NAND 型 Flash 为基础所建构的储存装置

单片机里全局变量、局部变量、堆、栈的存储区域

区域介绍

区域作用
内存栈区存放局部变量名
内存堆区存放new或者malloc出来的对象
文字常量区存放局部变量或者全局变量的值
(全局区)静态区用于存放全局变量或者静态变量
代码区二进制代码

栈区

stack

RW

通常是用于那些在编译期间就能确定存储大小的变量的存储区,

栈的大小是有限的,通常Visual C++编译器的默认栈的大小为1MB,所以不要定义int a[1000000]这样的超大数组。

堆区

heap

RW

它与数据结构中的堆是两回事,分配方式类似于链表

如果程序员分配了却没有释放掉,那么就会出现常说的内存泄漏问题

内存碎片:

需要注意的是,两个紧挨着定义的指针变量,所指向的malloc出来的两块内存并不一定的是紧挨着的,所以会产生内存碎片。

另外需要注意的一点是,堆的大小几乎不受限制,理论上每个程序最大可达4GB。
每个线程都会有自己的栈,但是堆空间是共用的。

堆heap栈stack
分配方式一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。由编译器自动分配释放
存储空间是否连续否,一般由malloc(或new)函数来分配内存块,并且需要用free(delete)函数释放内存。是,两个紧密挨着定义的局部变量,他们的存储空间是紧挨着的。
生长方向按内存地址由低到高方向生长,其大小由系统内存/虚拟内存上限决定,速度较慢,但自由性大,可用空间大。按内存地址由高到低方向生长,其最大大小由编译时确定,速度快,但自由性差,最大空间不大。
存储的类型那些在编译期间不能确定存储大小的变量的存储区用于在函数作用域内创建,在离开作用域后自动销毁的变量的存储区。通常是局部变量,函数参数等的存储区。
image-20240817181920441

静态区

static

RW

全局变量和静态变量的存储

初始化的放在 RW(可读可写)区域

未初始化的放在相邻的 ZI区域(零初始化数据区)

代码区

RO-只读(ReadOnly)

code

存放函数体的二进制代码

常量区

RO

常量字符串就是放在这里的

被包含在flash中,程序结束后由系统自动释放

内存分区分类

单片机内存被总分为flash(rom)和sram(ram)

flash里面的数据掉电可保存,sram中的数据掉电就丢失,sram的执行速度要快于flash,flash容量大于sram

我们正常下载程序都是下载存储进flash里面,这也是为什么断电可保存的原因

四个区域

单片机的程序存储分为code(代码存储区)、RO-data(只读数据存储区)、RW-data(读写数据存储区) 和 ZI-data(零初始化数据区)

  • Flash 存储 code和RO-data

  • SRAM存储 RW-data 和ZI-dat

    const 修饰的全局变量,它是只读的,存放在 flash 中的只读(RO)数据区域

    在编译后可以看到

    image-20240817175344240

FLASH
Code(.text)程序代码部分程序代码区(code)
RO-data(.data)存储const常量和指令文字常量区
SRAM
RW-data (.data)存储初始化值不为0的全局变量,静态变量栈区(stack)堆区(heap)全局区(静态区)(static)
ZI-data(.bss)存储未初始化的全局变量或初始化值为0的全局变量,静态变量

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2050055.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Linux】:实现一个简易的shell

目录 1.命令行提示符 2.命令行参数 2.1 获取命令行参数 2.2 解析命令行参数 3.判断指令类型 3.1 模拟cd命令 3.2 模拟export和echo bash的环境变量来源 4.外部指令的执行 1.命令行提示符 在我们输入指令前,终端界面一般有一个命令行提示符, …

性能优化理论篇 | swap area是个什么东西

我们知道每台计算机的内存(RAM)都是有限的,而我们的应用程序需要加载到内存才能被运行,如果一台机器运行多个应用程序时,内存可能会耗尽。Linux 系统中的“交换空间(也称为交换分区)”可以帮助缓…

VM相关配置及docker

NAT——VMnet8网卡 桥接——WLAN/网线 仅主机——VMnet1网卡 docker与虚拟机的区别 启动docker服务 systemctl start docker 重启 systemctl start docker关闭docker服务 systemctl stop docker.servicedocker的两大概念 镜像:images,应用程序的静态文…

nssctf-[SWPUCTF 2022 新生赛]1z_unserialize-简单的序列化题目

1. 打开题目是一段很简单的php代码 对代码进行分析,题目中有一个__destruct析构函数,这个函数是在对象被销毁的时候触发,那那么在这里new一下就相当于销毁一个对象,$a$this->lt;和$a($this->lly);相当于是$this->lt(thi…

CSS3-新特性

1.新增选择器 1.属性选择器 2.结构伪类选择器 3.伪元素选择器(重点) 4.CSS3 盒子模型 2.CSS3滤镜filter 3.CSS3 calc 函数 4.CSS3 过渡(重点)

8月18日微语报,星期日,农历七月十五

8月18日微语报,星期日,农历七月十五,周末愉快! 一份微语报,众览天下事! 1、南昌从业者谈蔬菜涨价:天热易变质增加损耗,农户收入未明显提升。 2、委员建议“行政教学分离”&#x…

后端开发刷题 | 寻找峰值【二分法】

描述 给定一个长度为n的数组nums,请你找到峰值并返回其索引。数组可能包含多个峰值,在这种情况下,返回任何一个所在位置即可。 1.峰值元素是指其值严格大于左右相邻值的元素。严格大于即不能有等于 2.假设 nums[-1] nums[n] −∞ 3.对于…

【精选】基于Java摄影约拍系统设计与实现(全网独一无二,最新定制)

目录 目录: 系统简介: 核心技术介绍 mysql技术介绍 IDEA编译器介绍 Springboot框架简介 springmvc框架简介 Mybatis技术简介 Node.js技术简介 Vue.js技术简介 系统数据库详细设计 系统功能设计 系统测试运行 模块测试 系统整体测试 测试过程 测试…

启明欣欣STM32开发板运行ThreadX

ThreadX是非常优秀的RTOS,微软收购了ThreadX后就开源了,后来又交给Eclipse基金会, 本文讲述如何在STM32上运行ThreadX,使用CubeMX来实现。本人环境如下, CM4芯片:STM32F407ZGT6,内存192KB&am…

分布式事务方案——基于两阶段提交的 XA事务

分布式事务方案——基于两阶段提交的 XA事务 在这篇文章中深入理解分布式事务中的两阶段提交(2PC),什么是2PC,2PC原理是怎样?2PC有没有什么问题?解决方案?无法解决的情况? 我们详细…

24/8/18算法笔记 目标导向强化学习

目标导向强化学习(Goal-Oriented Reinforcement Learning,简称GORL)是强化学习的一个分支,它关注于智能体如何通过与环境的交互来实现特定的目标或任务。与传统的强化学习不同,目标导向强化学习更加关注目标的设定和达…

图像数据处理13

三、空域滤波 3.1滤波器的基本概念 什么是滤波? 简单来说就是从干扰信号中提取出有用的信号 3.1.1空域滤波(Spatial Domain Filtering) 空域滤波适用于简单的滤波任务,直接对图像的像素空间进行操作。它通过对图像中的每个像…

如何选择流量与商业潜力兼备的SEO关键词?

如何选择流量与商业潜力兼备的SEO关键词? 你选择的关键词可以成就或破坏你的SEO活动。 如果你明智地选择关键词,那么你制作的内容将有可能月复一月地吸引有价值的自然搜索流量。如果你选择了错误的关键词,你的内容将只能吸引低价值的流量&a…

Java流程控制07:增强for循环

本节内容视频链接:Java流程控制10:增强for循环_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV12J41137hu?p42&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5 Java中的增强for循环(‌也称为“for-each”循环)‌是…

实用好软-----电脑端好用的免费音乐下载小工具 简单 快速

目前很多很多音乐软件都是收费的。要么是试听。前段时间分享了一款嗅探工具感觉很不错。今天分享的这款小工具超小。下载只有3M大小。解压后运行窗口简单。直接输入歌曲名字即可搜索出来。然后选择下载即可 界面 测试了下还是比较好用的。而且下载很快 ,不过软件显…

Ajax-02.Axios

Axios入门 1.引入Axios的js文件 <script src"js/axios-0.18.0.js"></script> Axios 请求方式别名: axios.get(url[,config]) axios.delete(url[,config]) axios.post(url[,data[,config]]) axios.put(url[,data[,config]]) 发送GET/POST请求 axios.get…

PROLOG实现亲属关系小型演绎数据库

问题 试编写一个描述亲属关系的PROLOG程序&#xff0c;然后给出一些事实数据&#xff0c;建立一个小型演绎数据库。 代码实现 % 基本事实 father(john, mike). father(john, lisa). father(boluo, ana). father(boluo, peter).mother(mary, mike). mother(mary, lisa). mother…

大厂进阶五:React源码解析之深度剖析Diff算法

本文主要针对React源码进行解析&#xff0c;内容有&#xff1a; 1、Diff算法原理、两次遍历 2、Diff瓶颈及限制 3、Diff更新之单节点和多节点原理 一、Diff源码解析 以下是关于 React Diff 算法的详细解析及实例&#xff1a; 1、React Diff 算法的基本概念和重要性 1.1 概念…

【串口助手开发】--温度曲线图实时显示功能,全流程小白教程,zedgraph控件的使用方法,Visual Studio 软件C#语言

1、ZedGraph.dll 控件下载 链接&#xff1a;下载ZedGraph&#xff08;ZedGraph.dll 和ZedGraph.Web.dll文件&#xff09; 打开链接后&#xff0c;图中红框显示的是仅下载zedgraph控件&#xff0c;本文所需的文件是ZedGraph.dll。 2、ZedGraph.dll 控件添加进Visual Studio 软…

【Arduino】ATmega328PB 连接 LSM6DS3 姿态传感器,并读数据(不确定 ESP 系列是否可行,但大概率是可行的)

总览 1.初始化 ATmega328PB&#xff0c;默认大家已经完成了 328 的配置准备工作&#xff0c;已经直接能够向里面写入程序 2.接线&#xff0c;然后验证 mega328 的 I2C 设备接口能否扫描到 LSM6DS3 3.编写代码&#xff0c;上传&#xff0c;查看串口数据。完成。 一、初始化 AT…