堆栈(见图4-1)是CPU中的一块特殊的存储区,它采用“先入后出”的规则存入和取出数据。堆栈最上面一层存储区称为栈顶,要保存的数据从栈顶“压入”堆栈时,堆栈中原有的数据依次向下移动一层,最下面一层的数据丢失。取出栈顶的数据后,堆栈中所有的数据依次向上移动一层。堆栈的这种“先入后出”的存取顺序,刚好能满足块调用时存储和取出数据的要求,因此堆栈在计算机的程序设计中得到了广泛的应用。下面介绍STEP 7中3种不同的堆栈。
图4-1 堆栈操作
1.局部数据堆栈(L堆栈)
各逻辑块都有它的局部数据(L)存储区,局部变量在逻辑块的变量声明表中生成,只在它被创建的块中有效。每个组织块用20B的临时局部数据来存储它的起动信息。局部数据可以按位、字节、字和双字来存取,例如L0.0、LB9、LW4和LD52。
CPU分配给当前正在处理的块的临时局部数据的存储器容量是有限的,这一存储区(即局部数据堆栈)的大小与CPU的型号有关。CPU给每一优先级的OB分配了局部数据区,这样可以保证不同优先级的OB都有它们专用的局部数据空间。
S7-300 CPU每一优先级的OB的局部数据区固定为256B。可以用STEP 7的CPU属性对话框设置S7-400每个优先级的局部数据区的大小。
2.块堆栈(B堆栈)
如果一个块的处理因为调用另外一个块,或者被更高优先级的OB块中止,CPU将在块堆栈中存储以下信息:
1)被中断的块的类型(OB、FB、FC、SFB、SFC)、编号和返回地址。(www.xing528.com)
2)DB和DI寄存器中块被中断时打开的共享数据块和背景数据块的编号。
CPU利用这些数据,可以在中断它的任务处理完后恢复被中断的块的处理。在多重调用时,堆栈可以保存参与嵌套调用的几个块的信息。图4-2中的OB1调用功能块FB1,FB1又调用FC2,图中给出了块堆栈中的数据动态变化的情况。
图4-2 块堆栈
CPU处于STOP模式时,可以在CPU的模块信息对话框中,查看块堆栈保存的进入STOP模式时没有处理完的块,在块堆栈中,块按照它们被处理的顺序存储(见图4-2)。
3.中断堆栈(I堆栈)
如果程序的执行被优先级更高的OB中断,操作系统将保存下述寄存器的内容:当前的累加器和地址寄存器、数据块寄存器DB和DI、局部数据的指针、状态字、MCR(主控继电器)寄存器和块堆栈的指针。新的OB执行完后,操作系统读取中断堆栈中的信息,从被中断的块被中断的地方开始继续执行程序。
CPU因为故障进入STOP模式或因为遇到断点进入HOLD模式时,可以用STEP 7查看中断堆栈保存的数据(见图7-40)。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。