【技术实现步骤摘要】
本专利技术涉及一种基于8051指令体系的,可应用于基于8051指令体系的单片微控制器,亦可应用于其它微控制器、微处理器等领域。
技术介绍
堆栈(Stack Pointer-SP)通常是在存储器中划分出的一个特殊区域,用来存放一些特殊数据,实际上是一个数据的暂存器。这种暂存数据的存储区域由堆栈指示器SP中的内容决定。微处理器运行时,会碰到中断、调用子模块(子程序)等,这时往往将当前PC指针压栈(保存),当系统比较复杂或处理的事件较多时,会出现多重的嵌套调用或中断,这时就有许多相应的PC指针值需要压栈(保存)。而标准8051中,堆栈指针SP是一个8位专用寄存器,它指示出堆栈顶部在内部RAM区域中的位置。SP可以使用的区域为07H-7FH,栈顶固定为7FH,而栈基则可以设在此区域的任何位置。通常用户为了更多地使用有限的内部RAM空间,会把SP的初值即栈基设置得比较高,如60H,这样SP真正用到的区域空间只有1FH。对于大型的频繁调用子程序的项目,以及使用递归算法的程序时,堆栈就可能溢出导致数据丢失。当超出堆栈的容量时,就会发生堆栈溢出,这时PC指针值就不能保护,程序就不能从断点处恢复执行,往往使程序跑飞,系统崩溃。一种简单的解决办法是加大堆栈的容量,但对象标准8051这类单片微控制器来说,其片上RAM资源有限(标准8051只有128字节),且实际使用中不能把片上RAM都作为堆栈使用,数据缓存、数据处理都要用片上RAM,另外内嵌大容量RAM会使得芯片面积增加,导致芯片成本升高,因此简单地增加内部RAM的容量来扩容堆栈区域是不合算的,实际上也是不可行的。专利技术 ...
【技术保护点】
一种堆栈区域扩充方法,其特征在于基于8051体系,用外部RAM代替内部RAM作为堆栈的备用部分来延伸堆栈区域,当片上堆栈溢出时,自动切换到片外堆栈,用片外RAM资源来延伸堆栈区域,实现堆栈容量的扩充和堆栈的跟踪。
【技术特征摘要】
1.一种堆栈区域扩充方法,其特征在于基于8051体系,用外部RAM代替内部RAM作为堆栈的备用部分来延伸堆栈区域,当片上堆栈溢出时,自动切换到片外堆栈,用片外RAM资源来延伸堆栈区域,实现堆栈容量的扩充和堆栈的跟踪。2.根据权利要求1所述的堆栈区域扩充方法,其特征在于具体步骤为a.设置堆栈扩充功能寄存器SPTCON,来打开堆栈扩充功能,默认情况下该功能关闭;b.划分堆栈区域,即将MCU的堆栈分为内部堆栈和外部堆栈,其中外部堆栈区域是要进行堆栈扩充的区域,并设定相关信号;c.根据所划分的内部、外部两个堆栈区域,对堆栈扩充操作考虑以下三种情况,并设定相关信号(a)当前堆栈操作纯粹在内部或外部RAM中;(b)涉及跨区域操作RET/RETI或LCALL/ACALL执行过程中两次读写RAM的指令,而且两次压栈的RAM区域不同;(c)在指针指向内部RAM的7FH时执行PUSH,或指向外部RAM的80H时执行POP指令。3.根据权利要求2所述的堆栈区域扩充方法,其特征在于设置堆栈扩充功能寄存器SPTCON的方法为确定堆栈扩充功能寄存器SPTCON的地址为C8H,所有功能的控制是通过读写堆栈扩充功能寄存器SPTCON来实现;开启堆栈指针扩充功能,SP在内部RAM的07-7FH和外部RAM的80-FFH两个区域之间自由切换,当堆栈指针SP溢出内部RAM空间时,SP自动指向外部RAM的80-FFH;设置用户不可见的系统内部堆栈溢出标志SPTF,该标志动态跟踪SP的值,不管堆栈跟踪是否被激活,堆栈溢出时微控制器都会自动置‘1’,系统立刻复位。4.根据权利要求2所述的堆栈区域扩充方法,其特征在于设定MCU堆栈区域划分的相关信号的具体步骤为a.用ESP表示外部堆栈指针,用ISP表示内部堆栈指针,系统的堆栈指针则仍用SP表示,当前堆栈活动指针ISP或ESP的内容会延时一个时钟周期反映到SP;b.ISP_INUSE信号表示当前堆栈活动指针属性,当ISP_INUSE信号有效表示当前堆栈活动指针是ISP,反之则表示当前堆栈活动指针是ESP,或执行的是跨栈操作;c.ISP_INUSE是堆栈扩充模块的输出信号,也是MCU的堆栈指针的状态信号,没有打开堆栈扩充时,系统默认为ISP_INUSE信号有效。CPU通过不断检测ISP_INUSE信号来判断当前堆栈位置(片上还是片外)从而控制各功能模块。5.根据权利要求2所述的堆栈区域扩充方法,其特征在于设定堆栈扩充三种情况下的相关信号的具体步骤为a.两个表明涉及跨栈操作的标志性寄存器SPINC和SPDECSPINC表明当前SP要进行由内部堆栈指针转向外部堆栈指针的操作;SPDEC表明当前SP要进行由外部堆栈指针转向内部堆栈指针的操作;b.两个中间计数器CNT和COUNTCNT对SP加1/减1的操作次数进行计数;COUNT对内部RAM的写操作次数进行计数;c.两种与堆栈指令有关的译码信号XSRTOBE_CON和XMEMORY_CON。XSRTOBE_CON控制外部RAM的读写控制信号。XMEMORY_CON控制对外部RAM的寻址操作和数据传输。6.根据权利要求4所述的堆栈区域扩充方法,其特征在于设定ISP_INUSE信号的具体步骤为a.在每个机器周期的末尾根据SP堆栈指针值的最高位即SP[7]来判断当前堆栈指针SP工作在哪个区,如工作在片上RAM07-7FH,SP[7]=0,则ISP_INUSE=0...
【专利技术属性】
技术研发人员:胡越黎,冉峰,郭腊梅,朱良辰,
申请(专利权)人:上海大学,
类型:发明
国别省市:31[中国|上海]
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。