首页 » 科学 » Keil C51客栈理论计算_客栈_嵌套

Keil C51客栈理论计算_客栈_嵌套

南宫静远 2025-01-09 01:59:04 0

扫一扫用手机浏览

文章目录 [+]
小编

Keil C51堆栈理论打算 一、 概述 C51系列单片机将堆栈设置在片内RAM中,由于片内RAM资源有限,堆栈区的范围也是有限的。
堆栈区留得太大,会减少其他数据的存放空间,留得太少则很随意马虎溢出。
因此,堆栈区必须留够,宁肯大一些,但是详细要预留多大的空间,必须先打算出用户须要堆栈的大小。
一样平常有两种打算方法: a. 通过内置堆栈打算函数进行实际打算(有打算方案); b. 通过堆栈理论打算(本文紧张先容的内容); 图1 编译结果图 Data空间256个字节,目前已经利用167.3个字节,剩余88.7字节,是否够用?如何进行判断?堆栈区到底留多大才算足够呢? C51程序设计中,用户须要堆栈的大小可以从普通子函数和中断子程序的嵌套层数来打算。
二、中断程序函数嵌套调用 1:中断函数利用堆栈理论最大压栈打算: 办法一:大家最普遍常用的办法:不指定寄存器组,如下图2; 图2 不指定寄存器组 在中断发生时,保存中断子程序的返回地址PC指针须要2个字节。
中断发生后,在中断子程序中系统会自动进行如下操作:将ACC、B、DPH、DPL、PSW、R0~R7共13个寄存器压栈。
加上中断返回地址,中断的堆栈需求为15个字节。
办法二:利用专用的寄存器组,如下图3; 图3 专用寄存器组 中断发生时,保存中断子程序的返回地址PC指针须要2个字节。
中断发生后,在中断子程序中系统会自动进行如下操作:将ACC、B、DPH、DPL、PSW共5个寄存器压栈。
中断的堆栈需求为7个字节。
如果中断中调用了子程序,每一层嵌套要加PC指针2Bytes。
最繁芜的情形,如果中断有优先级不一样的情形,芯片支持中断抢占式相应,即存在中断程序嵌套,则须要用优先级等级个数乘以(单个中断的堆栈需求+中断嵌套堆栈需求)。
2:普通子函数堆栈理论打算: 普通子函数的调用比较大略,每次调用时便是将函数的返回地址保存在堆栈中,这个地址占两个字节。
函数嵌套调用时,从最内层的子函数算起,总的堆栈需求字节数为嵌套的层数乘以2。
三、m51文件中查看堆栈预留大小空间 工程编译后查看对应.m51文件解释,如下参考堆栈指针SP起始地址。
堆栈预留大小是:0xFF-0xa8=87Bytes。
图3 m51文件 四、总结 通过打算程序中中断及普通子函数理论利用的最大堆栈空间N,再通过.m51文件查看剩余的堆栈空间M,两者比较较,必须担保M ≥N,才能确保堆栈空间不会溢出。
如果实际测试到M略小于N,则可实际打算堆栈空间需求,以担保程序正常运行。

Keil C51客栈理论计算_客栈_嵌套 科学

标签:

相关文章