[应用方案] 单片机存储空间浅析

[复制链接]
7997|49
 楼主| ingramward 发表于 2024-9-25 14:00 | 显示全部楼层 |阅读模式
一、单片机的存储空间 = RAM + FLASH(ROM),那么什么是RAM?什么是FLASH?
RAM : 一种可读可写的存储单元,掉电后存储数据清除,读写速度快。RAM在单片机运行时,是内部各种寄存器、全局变量(先存放在FLASH中,上电初始化后会将其拷贝至RAM中)、堆栈(程序运行过程中申明的局部变量、产生中断或者函数调用时用来保存现场的数据)等的载体。

FLASH:一种只能读取的存储单元,掉电后存储数据保留,读取速度慢。FLASH在单片机运行时,是程序指令、常量、中断向量表、BOOT引导代码、EEPROM等的载体。
二、ROM和FLASH的区别
传统的ROM是在芯片出厂一次写入以后就不能更改了,但随着应用环境的逐渐变化,以及技术的不断创新,ROM可以支持多次电擦除,擦除后可重复写入的功能,这样使得FLASH就成为了广泛意义上的EEPROM。方便了广大的程序员的操作,例如可以通过BOOT对单片机里的应用程序进行刷新,以及对内部存储数据的在线更改等功能。
三、冯诺依曼结构与哈弗结构区别
冯诺依曼结构常见用于PC机上,程序和数据在没有运行的时候,存放在硬盘中;当程序需要运行时,会将全部程序从硬盘复制到RAM中去,从RAM里去执行,由于RAM高速的读写,从而程序运行速度加快。哈弗结构常见用于嵌入式系统上,由于单片机其RAM大小有限,将全部程序复制到RAM中去运行难以实现,所以运行的时候程序放在FLASH中,变量数据存放在RAM中,所以CPU从Flash中取程序指令,RAM中获取数据。当然在嵌入式系统中,有些对代码执行速率有严格要求或者执行地址有严格要求的地方,也是可以将小规模的程序复制到RAM中去执行。这里推荐51单片机作为入门必学
四、单片机上电后对存储空间的操作
当你写好了你的单片机代码会经过如下步骤:
预处理:展开头文件/宏替换/去掉注释/条件编译编译: 检查语法,生成汇编
汇编: 汇编代码转换机器码
链接: 链接到一起生成可执行程序最后,就可以生成一个可以烧录的Hex文件啦,这个HEX文件里包含了你整个程序里的所有内容,你的程序逻辑、所申明的局部变量、全局变量、常量等等等等都会会变成一堆由01构成的二进制信息,这些信息使得单片机可以按照用户的定义去运行。
从单片机复位上电的那一刻开始,PC指针清零,指向0000H地址,此时单片机会产生一个复位中断,PC指针会跳转至中断向量表复位中断里存放的入口函数地址(常见的一般是工程的引导程序,执行MAIN函数之前执行的汇编代码),一般引导程序里主要是:1、对堆栈进行初始化,设置长度还有分配地址
2、对于没有赋值的全局变量,则在RAM中分配一个地址出来,对于已经分配初值的全局变量,在RAM中分配一个地址出来之后,将ROM中的初始值拷贝到对应的地址中去。
3、主函数的跳转
初始化前


初始化后


我想看大海 发表于 2024-9-28 15:07 | 显示全部楼层
说的挺全面的
pl202 发表于 2024-10-7 12:52 | 显示全部楼层
只读存储器(ROM):
用途:用于存储不可更改的程序或数据,如Bootloader程序。
usysm 发表于 2024-10-7 15:17 | 显示全部楼层
程序存储器:使用16位地址进行寻址。
数据存储器:使用8位地址进行寻址,分为内部和外部数据存储器。
uytyu 发表于 2024-10-7 16:06 | 显示全部楼层
单片机的存储管理涉及到地址的分配和寻址方式,这对于高效利用存储空间至关重要。
beacherblack 发表于 2024-10-7 18:37 | 显示全部楼层
可以使用EEPROM、SD卡等存储设备来增加存储容量,满足更复杂的应用需求。
robincotton 发表于 2024-10-8 09:22 | 显示全部楼层
数据存储器用于临时存储数据和中间计算结果。在8051单片机中,内部RAM通常分为几个区域,包括通用工作寄存器区、位寻址区、用户RAM区和特殊功能寄存器映射区。RAM的大小影响了单片机处理数据的能力和速度。
pmp 发表于 2024-10-8 11:07 | 显示全部楼层
对于数据存储器,可以通过压缩算法来减少所需的存储空间。
claretttt 发表于 2024-10-8 16:36 | 显示全部楼层
数据存储器用于存储单片机在运行过程中的临时数据。这包括变量的值、运算的中间结果、堆栈数据等。例如,当单片机执行一个算术运算时,操作数和运算结果可能会暂时存储在数据存储器中;在函数调用过程中,函数的局部变量、返回地址等信息会存储在栈区(数据存储器的一部分)。
burgessmaggie 发表于 2024-10-8 18:56 | 显示全部楼层
ROM(只读存储器)
特点:数据只能读出,不能写入或修改。即使断电,存储的数据也不会丢失。
类型:包括PROM、EPROM、EEPROM和Flash等。其中,Flash存储器在单片机中非常常见,它结合了ROM的非易失性和RAM的可擦写性,使得程序和数据可以在需要时进行修改。
用途:用于存储单片机的程序代码、常量数据、配置信息等。
RAM(随机存储器)
特点:数据既可以读出,也可以写入或修改。但断电后,存储的数据会丢失。
类型:通常分为静态RAM(SRAM)和动态RAM(DRAM)。在单片机中,SRAM更为常见,因为它具有更高的速度和稳定性。
用途:用于存储单片机运行时的临时数据、局部变量、堆栈等。
nomomy 发表于 2024-10-8 21:56 | 显示全部楼层
Flash ROM:目前应用最为广泛的一种程序存储器类型。它具有成本低、可擦除和重写次数较多、读写速度较快等优点。许多现代单片机都采用 Flash ROM 作为程序存储器,方便用户进行程序的开发、调试和更新。
wengh2016 发表于 2024-10-9 11:53 | 显示全部楼层
程序存储器通常用于存放单片机执行的程序代码,这些代码在单片机运行过程中是不可更改的。
ccook11 发表于 2024-10-11 20:41 | 显示全部楼层
栈区:由编译器自动分配和释放,用于存储函数调用时的参数、局部变量和返回地址等。栈区的大小在编译时确定,通常根据函数的嵌套深度和局部变量的大小来决定。
堆区:由程序员手动分配和释放,用于存储程序运行期间动态分配的内存。堆区的大小取决于程序的需求,但总大小不能超过单片机硬件的实际RAM大小。
数据区:包括全局变量和静态变量的存储区域。已初始化的全局变量和静态变量存放在.data段,未初始化的全局变量和静态变量存放在.bss段。程序结束后,这些数据区由系统自动释放。
常量区:用于存储程序中的常量数据,如字符串常量、数字常量等。这些常量在编译时确定,并在程序运行期间保持不变。常量区的数据通常存放在ROM中。
代码区:用于存储单片机的程序代码,包括函数体的二进制代码等。代码区的数据在程序运行时被CPU读取和执行。
updownq 发表于 2024-10-14 09:33 | 显示全部楼层
数据存储器的访问速度通常比程序存储器快,因为它需要频繁地读写数据。
hudi008 发表于 2024-10-14 17:39 | 显示全部楼层
数据存储器的容量也因单片机类型而异。一般来说,8 位单片机的数据存储器容量相对较小,可能从几十字节到几 KB 不等,而 32 位单片机的数据存储器容量可能达到数百 KB 甚至更大。数据存储器同样有自己的地址空间,单片机通过数据指针(如 8051 单片机中的 DPTR)或其他寻址方式来访问其中的数据。
1988020566 发表于 2024-10-15 10:49 | 显示全部楼层
特殊功能寄存器在单片机的地址空间中有特定的地址分配。一般来说,它们的地址与普通的数据存储器地址是分开的,以方便区分和管理。单片机通过特定的指令(如直接寻址或位寻址指令,在 8051 单片机中)来访问这些特殊功能寄存器。例如,在 8051 单片机中,可以使用 “MOV” 指令直接对特殊功能寄存器进行数据的读写操作,或者使用位操作指令(如 “SETB”、“CLR” 等)来对特殊功能寄存器中的特定位进行操作。
Jacquetry 发表于 2024-10-15 19:12 来自手机 | 显示全部楼层
flash跟内置eeprom啥区别啊
phoenixwhite 发表于 2024-10-16 19:01 | 显示全部楼层
程序存储器用于存放单片机的程序代码。在早期的8051单片机中,程序存储器通常是只读存储器(ROM),但现在许多现代单片机使用的是可擦写可编程只读存储器(EEPROM)或闪存(Flash)。程序存储器的大小决定了单片机可以存储多少程序代码。
FranklinUNK 发表于 2024-10-16 19:47 | 显示全部楼层
有些单片机说内部自带eeprom是什么啊
deliahouse887 发表于 2024-10-18 12:53 | 显示全部楼层
为了防止程序错误地修改数据存储器中的内容,一些单片机提供了内存保护机制。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

19

主题

1559

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部