今天继续51单片机的启动代码里有那些东西。
51预先列出单片机启动代码的第二部分原文。
原文
; ————-请参见
;
; h再现堆栈初始化
;
; thefollowingequstatementsdefinethestackpointerforreentrant
; 功能和初始化it :
;
; hstackspaceforreentrantfunctionsinthesmallmodel。
; qibpstack :启用模块中继堆栈
; istackspaceforreentrantfunctionsinthesmallmodel。
IBPSTACK EQU 0; set to1if小型再现is用户使用。
; oibpstacktop : Endaddressofsmallmodelstack0x0-0x ff
; isetthetopofthestacktothehighestlocation。
IBPSTACKTOP EQU0xFF 1; 默认值0f FH 1
; /h
;
; hstackspaceforreentrantfunctionsinthelargemodel。
; qbpstack :启用程序模型中继堆栈
; istackspaceforreentrantfunctionsinthelargemodel。
XB堆栈第0区; 设置为1 if大规模再现is用户。
; oxbpstacktop : Endaddressoflargemodelstack0x0-0x ffff
; isetthetopofthestacktothehighestlocation。
XBPSTACKTOP EQU0xFFFF 1; 默认0 FFFFH 1
; /h
;
; hstackspaceforreentrantfunctionsinthecompactmodel。
; qpb堆栈:启用压缩模型中继堆栈
; istackspaceforreentrantfunctionsinthecompactmodel。
pbp堆栈第0区; set to1if紧凑型再现is用户使用。
;
; opbpstacktop : Endaddressofcompactmodelstack0x0-0x ffff
; isetthetopofthestacktothehighestlocation。
PBPSTACKTOP EQU0xFF 1; 默认值0f FH 1
; /h
; (h原文均为伪指令、宏定义等东东。 你确实好像头疼啊。 简单翻译一下吧。
翻译
再入函数模拟初始化;
再入函数模拟堆栈指针的初始化由以下EQU指令定义:
使用SMALL存储器模式时再入函数的堆栈区域
IBPSTACK EQU 0; 使用SMALL存储器模式再入函数时设定为1;
IBPSTACKTOP EQU 0FFH 1; 将堆栈顶部设置为最高地址1;
使用LARGE存储器模式时再入函数的堆栈区域
XB堆栈第0区; 使用LARGE存储器模式再入函数时设定为1;
xbpstacktop equ 0光纤通道1; 将堆栈顶部设置为最高地址1;
使用COMPACT内存模式时再入函数的堆栈区域
pbp堆栈第0区; 使用COMPACT存储器模式再入函数时设定为1;
pbpstacktop equ 0光纤通道1; 将堆栈顶部设置为最高地址1。
划重点
在这里,我们提到了三种模式:小型、大型和紧凑。 这三种模式有什么意义呢? 那么,让我们来看一下。
不同内存模式下的堆栈。 Eil编译器有三种模式设置。 这起因于51处理器的许多寻址模式,根据寻址模式的不同效率也不同。
在
small模式
small模式下,所有默认变量都加载到单片机内部的RAM中,51单片机的默认内部RAM只有128B; 52单片机的缺省256B。 该模式的优点是访问速度快,缺点是空间有限。
在
compact模式
compact模式下,所有默认变量都位于单片机的256B RAM中,与在small模式下使用关键字pdata定义数据变量的效果相同。 在此模式下,程序的总变量空间不能超过256B。
在
large模式
large模式下,所有默认变量都可以位于最多64KB的RAM中,包括内部和外部RAM。 这与使用关键字xdata定义变量的效果相同。
Small:变量存储在内部ram中。
Compact:变量存储在外部ram中,使用页8位间接寻址。
Large:变量存储在外部Ram中,使用16位间接寻址。
我们一般使用Small保存变量。 也就是说,单片机优先将变量保存在内部ram中,内部ram不够时保存在外部。 Compact方式需要自己用程序指定页面的高位地址,编程很复杂。 如果外部ram少,只有256字节,则读取该256字节会更快。
如果超过256字节,就很难不断切换。 Compact模式适用于相对较少的外部ram。 Large模式将变量优先分配给外部ram,3种内存方式均支持内部256字节和外部64k字节的ram。 区别在于变量的优先级(或缺省值)存储在哪里。 除非不想将变量存储在内部ram中,否则请使用后面的Compact,Large模式。 由于变量存储在内部ram中,因此运算速度远远快于存储在外部ram中,大多数APP应用程序选择Small模式。