打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
单片机启动时为何不需要将代码从ROM搬移到RAM?

单片机的知识,体积庞大且结构复杂。初学者很容易陷入困境,最终失去对单片机的兴趣。因此在学习单片机时一定要对基础知识进行特别的巩固。


在本文中,《单片机与嵌入式系统应用》小编将为大家介绍单片机地址空间以及堆栈的相关知识。

Data:可寻址片内ram0x00-0x7f

Bdata:可位寻址片内ram

Idata:可寻址片内ram,允许访问全部内部ram0x00-0xff

Padata:分页寻址访问片外ram

Xdata:可寻址片外ram0x0000-0xffff

code--程序存储区


单片机存储器分ROM跟RAM之分,RAM存放中间结果、数据和经常变换的代码,ROM存放code。51单片机采用的是哈弗结构,即数据跟代码拥有单独的地址空间。存储器可以分为程序存储器(eerom,flash之类)、内部数据存储器(ram)、SFR、位地址空间和外部数据存储器。内部数据存储器在物理上分为内部SRAM和特殊功能寄存器,而内部分为低(0x00-0x7f)和(0x80-0xff),高128字节地址重复,需要不同的访问方式。SFR用直接寻址方式,SRAM需要间接方式。这里SFR是寄存器,硬件上是中央处理器的内部组成部分,访问速度很快。在低128B的SRAM,0x00-0x1f是4个通用工作寄存器,每组有R0-R7。使用哪一组,可以通过PSW中的RS1,RS0来配置,位寻址是在0x20-0x2f。


程序内存可以分为几个区,栈区(stack)、堆区(Heap)、全局区(static)、文字常亮区、程序代码区。程序编译之后,全局变量、静态变量已经分配好内存空间,在函数运行时,程序需要为局部变量分配栈空间,当中断到来时,也需要将函数指针入栈,保护现场,以便于中断处理完之后再回到之前执行的函数。栈是从高到低分配,堆是从低到高分配。一般说的堆栈指的栈。堆栈又分硬堆栈和软堆栈,硬堆栈即SP,从片内RAM的顶部向下生长。软堆栈在硬堆栈跟全局变量区之间的空间,C51函数调用通过R0-R7和栈来实现。


为什么单片机启动时,不需要用bootloader将代码从ROM搬移到RAM,而ARM则需要。这里可以先看看单片机程序执行的过程,单片机执行分三个步骤,取执行---分析指令----执行指令。取指令的任务是:根据PC的值从程序存储器读出指令,送到指令寄存器,然后分析执行。这样单片机就从内部程序存储器取代码指令,从RAM存取相关数据。要知道RAM取数的速度是远高于ROM的,但是单片机因为本身运行频率不高,所以从ROM取指令慢并不影响。而ARM不同,CPU运行的频率高,远大于从ROM读写的速度,所以一般有操作系统,都需要将代码部分拷贝到RAM中再执行。

 

本文针对单片机的地址和堆栈分别进行了介绍。给出了一些必须进行理解的名词定义,并在文章最后给出了一种单片机启动时为何不需要将代码从ROM搬移到RAM的解释,希望大家在阅读过本文之后能够有所收获。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
单片机C51 DATA,XDATA,BDATA,IDATA,CODE存储资源分配
怎样玩转STM8单片机
单片机的一些面试题整理
单片机考试内容
单片机原理及接口技术复习提纲
MCS-8051单片机内部结构
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服