历史上的今天
今天是:2025年04月19日(星期六)
2021年04月19日 | 单片机地址空间,堆栈理解
2021-04-19 来源:eefocus
简介:51单片机采用的是哈弗结构,即数据跟代码拥有单独的地址空间。存储器可以分为程序存储器(eerom,flash之类),内部数据存储器(ram),SFR,位地址空间和外部数据存储器。
data –可寻址片内ram 0x00-0x7f
bdata—可位寻址片内ram
idata—可寻址片内ram,允许访问全部内部ram 0x00-0xff
padata—分页寻址访问片外ram
xdata—可寻址片外ram 0x0000- 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中再执行。
下一篇:基于单片机的机器人系统电路设计
史海拾趣
|
将手机和PC机用USB相连: 当先将未开机的手机用USB线连到PC上,再打开手机时,从PC上向手机发送AT指令,手机能向PC返回OK;可是当先将手机开机,再将手机用USB线连接到PC机时,从PC上向手机发送AT指令,手机却不能向PC返回任何东西。不知以上是什么 ...… 查看全部问答> |
|
我打开了一个WordPad(它是由好几个窗口组合在一起的),用触摸笔点一下,输入编辑窗口就获得了键盘光标,即输入焦点,但是我用在EVC中用GetFocus函数去获取键盘光标所在窗口的句柄为0? 我用GetForegroundWindow函数获得的是键盘光标所在窗口的父 ...… 查看全部问答> |
|
usb host stack外包给了一家公司做,主要包括Audio class, Mass storage class, HID class driver。想请教如何进行验收,如何进行验收测试?… 查看全部问答> |
|
我在使用KeiluVision2时,编译时出现Tool path not defined:bad or missing\'C:\\Documents and Settings\\Administrator\\桌面\\新建文件佳\\TOOLS.INT\' ,(其中OOLS.INT文件和UV2文件夹在刚解压时在同一个新建的文件夹里),我想知道这是怎么 ...… 查看全部问答> |
|
请教关于lpIssueInterruptTransfer()函数的问题,高手来指导啊,谢谢! readerExtension->hIntTransfer = (*(readerExtension->pUsbFuncs)->lpIssueInterruptTransfer) (readerExtension->hPipeInt, ...… 查看全部问答> |
|
大家好?WIN2000下,以太网网络,双网卡热备份,也就是一个网卡坏了,另一个冗余网卡热切换,两个网卡同一个IP地址,实现方案是什么?使用哪些工具,技术?代码是什么?我的QQ:270996889 E-MAIL:SDTZ_ZZ@126.COM,热切期待您的回复.谢谢!… 查看全部问答> |
|
香主,STM32芯片对打静电时出现的死机现象,CPU进入了什么状 对于通过光耦到CPU管脚的开关量输入输出接口,打静电8000V,CPU会出现死机想象,有时候过上1~2分钟CPU会被看门狗复位活过来,有时候就彻底死了。 先讨论被看门狗救活的情况: 为什么会1~2分钟CPU才活 ...… 查看全部问答> |
|
把STM32的Flash分成两部分,0x0800 0000开始20K称为boot层,其它空间为CTRL层。boot主要功能是利用USB去升级CTRL的程序。同样CTRL也用到USB,USB部分代码全部相同,只是中断向量表不一样。这样在boot层有一次USB枚举,然后断开USB设备,在以ct ...… 查看全部问答> |




