关于单片机内存详解

2023-05-16

引言:内存是单片机的重要组成部分,那么如何操作、分配内存对于一个嵌入式软件工程师来说便是极为重要的。

一、存储器的定义:

    存储器单元实际上是时序逻辑电路的一种。按存储器的使用类型可分为只读存储器ROM)和随机存取存储器RAM),两者的功能有较大的区别,因此在描述上也有所不同。

工作原理:

    存储器是许多存储单元的集合,按单元号顺序排列。每个单元由若干二进制位构成,以表示存储单元中存放的数值,这种结构和数组的结构非常相似,故在VHDL语言中,通常由数组描述存储器。

    存储器是用来存储程序和各种数据信息的记忆部件。存储器可分为主存储器(简称主存或内存)和辅助存储器(简称辅存或外存)两大类。和CPU直接交换信息的是主存。

    主存的工作方式是按存储单元的地址存放或读取各类信息,统称访问存储器。主存中汇集存储单元的载体称为存储体,存储体中每个单元能够存放一串二进制码表示的信息,该信息的总位数称为一个存储单元的字长。存储单元的地址与存储在其中的信息是一一对应的,单元地址只有一个,固定不变,而存储在其中的信息是可以更换的。

    指示每个单元的二进制编码称为地址码。寻找某个单元时,先要给出它的地址码。暂存这个地址码的寄存器叫存储器地址寄存器(MAR)。为可存放从主存的存储单元内取出的信息或准备存入某存储单元的信息,还要设置一个存储器数据寄存器(MDR)。

二、存储器分类:

其中:1、易失性存储器相对地,读写速度较;非易失性存储器相对地,读写较

           2、非易失性存储器还包括光盘、软盘等。

 三、单片机中的存储器:

在单片机中,内存可分为FLASH(即ROM)和SRAM(即RAM)这两部分。

运作过程原理:

    对单片机编程后,程序的代码段,data段,bss段,rodata段等都存放在Flash中。当单片机上电后,初始化汇编代码将data段,bss段,复制到RAM中,并建立好堆栈,开始调用程序的main函数。以后,便有了程序存储器,和数据存储器之分,运行时从Flash(即指令存储器,代码存储器)中读取指令 ,从RAM中读取与写入数据。RAM存在的意义就在于速度更快。
    无论是单片机也好,PC也罢,存在的存储器金字塔都是一致的,速度的因素,成本的限制导致了一级级更快的存储器的更快速度与更高的成本。应该说,对于它们的理解,就是存储器金字塔的理解。此段出自--原文链接:https://blog.csdn.net/tietao/article/details/8172411

可以看到,初始化时RW-data从flash拷贝到RAM,所以在程序跑起来了Rw-data是在RAM里面的。

其中:

1、Code:为程序代码部分

2、RO-data: 表示 程序定义的常量

3、RW-data: 表示 已初始化的全局变量

4、ZI-data: 表示 未初始化的全局变量

5、栈区(stack):由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 这些值是可读写的,那么stack应该被包含在RW-data(读写数据存储区),也就是单片机的sram中。

6、堆区(heap):一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。可以理解,这些也是被包含在单片机的sram中的。

7、全局区(静态区)(static):全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域,程序结束后由系统释放。这些数据也是可读可写的,和stack、heap一样,被包含在sram中。

8、文字常量区:常量字符串就是放在这里的。这些数据是只读的,分配在RO-data(只读数据存储区),则被包含在flash中。

9、程序代码区:存放函数体的二进制代码,可以想象也是被包含在flash,因为对于MCU来说,当其重新上电,代码还会继续运行,并不会消失,所以存储在flash中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于单片机内存详解 的相关文章

  • Win10正式版19044.2132(KB5020435)来啦!(附完整更新日志)

    微软发布了Win10正式版KB5020435 xff08 操作系统内部版本 19042 2132 19043 2132 和 19044 2132 xff09 xff0c 此次更新主要解决了某些类型的安全套接字层 xff08 SSL xff0
  • SOUI总结之皮肤说明

    皮肤说明 说明 框架自带的皮肤都是 skin sys XXXX开始 xff0c 自带的皮肤存放位置trunk soui sys resource theme sys res xff0c 图片和名称映射关系可以打开trunk soui sys
  • C++中逗号运算符

    今天测试代码的时候 xff0c 遇到一行代码出现了疑问 xff0c 原因是出现了自减运算符和逗号运算符 xff0c 这就涉及到一个顺序的问题 xff0c 于是写了一个C 43 43 小程序 xff0c 验证了一下这个想法 include u
  • PsExec的问题及其解决办法

    C gt PsExec exe 192 168 1 142 cmd PsExec v1 98 Execute processes remotely Copyright C 2001 2010 Mark Russinovich Sysinte
  • ubuntu 18.04安装protobuf

    今天需要安装protobuf 在网上搜了一篇教程 xff0c 但是篇幅太长 xff0c 于是对其进行简化一下 原文 1 96 96 96 git clone https github com protocolbuffers protobuf
  • 读取配置文件的程序

    时常会遇到需要从配置文件中读取一些信息 xff0c 这里就提供一个例子 xff0c 方便日后使用 xff1a span class token comment ini h span span class token macro proper
  • 命令行读取参数

    有时需要从命令读取一些输入 xff0c 这里找到一个方法 xff0c 怎么实现的没有仔细研究 xff0c 但是可用 cmdline h span class token comment Copyright c 2009 Hideyuki T
  • 如何在一个shell脚本中开启多个应用程序?

    之前在csdn上搜索 xff0c 提示用gnome terminal指令 xff0c 但是发现怎么都不好使 于是找到一种解决方案 span class token comment bin bash span span class token
  • 使用openCV播放视频 在视频中加入滑动条

    include 34 opencv2 highgui highgui hpp 34 include 34 opencv2 imgproc imgproc hpp 34 include lt iostream gt include lt fs
  • Linux下vscode无法查看定义?

    今天要用到vscode查到c 43 43 程序 但是发现vscode无法查看程序的定义 于是找了一下解决方法 vscode无法转到定义可能是因为没有安装插件 由于我需要使用C 43 43 所以我这里安装的是C 43 43 插件 第一步 第二
  • 冒泡排序的实现(基于顺序表)

    对于冒泡排序的含义以及图示表示 这里就不再赘述 这篇博客已经说的很明白了 添加链接描述 于是就用代码实现了一下基于顺序表的冒泡排序 因为一直看的时大话数据结构这本书 于是把上面介绍的三种实现方法都在代码中实现一下 具体实现与书中有一些出入
  • ambiguating new declaration of 问题的解决

    今天在运行代码的时候 一直在报这样的错误 ambiguating new declaration of int NewPartition seqlist int int 查看了许久 原来是头文件中的声明类型与函数实现的声明类型不一致造成的
  • opencv中的MatConstIterator,NAryMatIterator迭代器的使用

    第一个迭代器 MatConstIterator迭代器 使用迭代器计算一个三通道三维数组中 34 最长元素 34 这个代码实现过程中 照着书中的代码抄下来一直报错 后来在查阅代码的时候 发现了问题所在 具体已经在代码中标明了 include
  • 用python实现查询天气的功能

    附上代码 import urllib request import gzip import json print 39 天气查询 39 def get weather data city name 61 input 39 请输入要查询的城市
  • 1.Docker 安装

    安装 wget 命令 yum install wget 安装docker wget q O https get docker com sh O 下载并以指定的文件名保存 以 39 39 作为file参数 xff0c 那么数据将会被打印到标准
  • linux下sudo apt-get update 报Err http://security.ubuntu.com precise-security InRelease 等

    今天在进行linux更新的时候一直报错 尝试了很多办法都不行 于是找到一个方法 切实可行 以根用户运行 cd var lib apt lists rm rm var cache apt archives lock rm var lib dp
  • HTTP Authentication之Basic认证、Digest认证

    本文为博主原创 xff0c 未经许可严禁转载 本文链接 xff1a https blog csdn net zyooooxie article details 109691608 前面说到 Fiddler 的QuickExec Filter
  • Qt学习笔记(5) — Qt 类库【C++】

    目录 一 Qt核心特点1 元对象系统2 信号与槽的关联方式 二 Qt全局定义 xff08 常用头文件 xff09 1 lt QtGlobal gt 头文件1 xff09 数据类型定义2 xff09 函数3 xff09 宏定义 三 容器类1
  • 【C++】STL学习小总结

    经过自学以及查找资料汇总的一些记录 STL概述 长久以来 xff0c 软件界一直希望建立一种可重复利用的东西 xff0c 以及一种得以制造出 可重复运用的东西 的方法 xff0c 从函数 functions xff0c 类别 classes
  • ssh连接云服务器失败,能ping通但是连接不上

    环境 xff1a 腾讯云服务器 远程工具 xff1a xshell 7 问题描述 使用xshell远程工具时 xff0c 输入云服务器地址 xff0c 输入用户名密码之后显示 Connection established To escape

随机推荐

  • cheom 修改文件权限

    Chmod命令主要用于修改 设置文件权限 chmod 修改文件权限主要有两种方式 xff1a 字母法与数字法 1 字母法 xff1a chmod u g o a 43 61 r w x 文件名 以上是chmod的用法 xff0c 每个括号是
  • 通俗易懂的布谷鸟算法与莱维飞行,(附求解函数最小值matlab源码)

    1 从布谷鸟的育雏到布谷鸟算法2 布谷鸟算法3 萊维飞行与公式 1 的深层含义4 附 xff1a CS算法求解函数最小值代码5 源码下载6 参考文献 1 从布谷鸟的育雏到布谷鸟算法 布谷鸟不会做窝 xff0c 也不会育雏 xff0c 在春末
  • kubernetes容器网络接口(CNI) midonet网络插件的设计与实现

    相关原理概述 先来讲讲什么是CNI CNI xff08 容器网络接口 xff09 是一种操作容器网络规范 xff0c 包含方法规范 xff0c 参数规范等 CNI只关心容器的网络连接 xff0c 在容器创建时分配网络资源 xff0c 并在删
  • 驱动篇:字符设备驱动综合实例(一)(摘录)

    驱动篇 xff1a 字符设备驱动综合实例 xff08 一 xff09 1 按键的设备驱动 在嵌入式系统中 按键的硬件原理比较简单 通过一个上拉电阻将处理器的外部中断 或 GPIO 引脚拉高 电阻的另一端连接按钮并接地即可实现 如图 12 1
  • 安卓学习日记(一):了解安卓架构(linux内核层、系统运行库层、应用框架层、应用层)

    首先为了理解安卓系统是怎么工作的 xff0c 就先来看一下android的系统架构 xff0c 其架构大至可以分为四层 xff1a linux内核层 系统运行库层 应用框架层和应用层 xff0c 那就先说说这几层 1 linux内核层 xf
  • 解决每次上线更新文件需要手动清除缓存的问题-------js 、css自动清除浏览器缓存方法

    说明 1 分享页更新后 xff0c 浏览器总是有缓存 xff0c 须手动清理才能加载修改后的CSS和JS xff0c 故在加载地址后动态添加一个随机数 xff08 或时间戳 xff09 来确保每次加载的文件都不同来消除缓存 2 在加载js文
  • 目标检测——Yolo系列(YOLOv1/2/v3/4/5/x/6/7/8)

    文章目录 目标检测概述目标检测概述基础知识和术语 YOLOv1YOLOv2YOLOv3YOLOv4YOLOv5YOLOxYOLOv6YOLOv7YOLOv8对比 目标检测概述 目标检测概述 什么是目标检测 xff1f 滑动窗口 xff08
  • ROS机器人应用(1)—— 搭建ROS虚拟机环境

    文章目录 搭建ROS虚拟机环境1 连接小车wifi2 下载vmware虚拟机3 下载ubuntu系统镜像4 远程登录5 常见问题6 简单操作演示 搭建ROS虚拟机环境 1 连接小车wifi 小车开机后会发出wifi xff0c 我们可以使用
  • ROS机器人应用(6)—— 激光雷达建图和导航

    文章目录 一 激光雷达建图二 建图算法切换及其优缺点三 自主导航四 多点导航 一 激光雷达建图 小车开机 xff0c 连接WIFI xff0c 密码 xff1a dongguan 启动激光建图 xff08 服务端 xff09 span cl
  • 学习记录(一)

    ionic起步 首先 xff0c 网络上扒拉教程安装ionic xff1a https blog csdn net weixin 38299362 article details 79626812 如果是配合angular使用 xff0c
  • 嵌入式软件开发之Linux下C编程

    目录 前沿 Hello World xff01 编写代码 编译代码 GCC编译器 gcc 命令 编译错误警告 编译流程 Makefile 基础 何为 Makefile Makefile 的引入 前沿 在 Windows 下我们可以使用各种各
  • 信息加密(简单的字母转换)

    题目 在传递信息的过程中 xff0c 为了加密 xff0c 有时需要按一定规则将文本转换成密文发送出去 有一种加密规则是这样的 xff1a 1 对于字母字符 xff0c 将其转换成其后的第3个字母 例如 xff1a A D xff0c a
  • TCP协议与UDP协议详解

    TCP协议 TCP xff0c 即Transmission Control Protocol xff0c 传输控制协议 人如其名 xff0c 要对数据的传输进行一个详细的控制 TCP协议的特点 xff1a 有连接 xff0c 可靠传输 xf
  • C语言头文件相互包含的问题

    我深知前路风雨 xff0c 但我依然微笑前行 头文件相互包含的问题 问题 xff1a 头文件交叉包含是否会导致递归包含 xff0c 导致编译出错 xff1f 如果不会因为递归包含出错 xff0c 那么交叉包含是不是完全没问题 xff1f 1
  • 【51单片机STC89C52】DHT11温湿度传感器的使用

    目录 一 DHT11概述 数据传送逻辑 数据格式 通讯过程时序图 二 检测模块是否存在 时序逻辑分析 代码实现 三 读取温湿度数据 DHT11传输0的时序分析 DHT11传输1的时序分析 代码实现 四 串口打印 一 DHT11概述 数据传送
  • Hadoop MapReduce自关联(单表关联)-案例

    案例 xff1a 获取孙子和祖父母的列表 单表关联 txt child parent Tom Lucy Tom Jack Jone Lucy Jone Jack Lucy Mary Lucy Ben Jack Alice Jack Jess
  • Oracle-Grouping sets

    Oracle Grouping sets span class token comment 创建一个雇员表 span span class token keyword CREATE span span class token keyword
  • Udacity深度学习-深度神经网络-assignment3

    六层深度神经网络 43 SGD 43 L2正则项 43 dropout xff0c TensorFlow实现 NN with SGD L2 batch size 61 128 layer cnt 61 6 层数 graph 61 tf Gr
  • 【基于STM32的串口通信----用软件模拟】

    注 xff1a 这是我上班第一次学习串口通信 xff0c 此文章基于STM32F4系列单片机 一 xff1a 什么是软件模拟串口通信 xff1a 1 平常所用串口通信都是用的单片机外设 xff0c 是单片机内部自带的模块 xff0c 只需要
  • 关于单片机内存详解

    引言 xff1a 内存是单片机的重要组成部分 xff0c 那么如何操作 分配内存对于一个嵌入式软件工程师来说便是极为重要的 一 存储器的定义 xff1a 存储器单元实际上是时序逻辑电路 的一种 按存储器的使用类型可分为只读存储器 xff08