打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
怎么知道堆栈使用了多少?


资源下载关注我们“单片机”,回复“教程”获取单片机电子书,回复仿真获取Proteus仿真资料。持续更新中。。。


怎么知道堆栈使用了多少? 比如51单片机,怎么查看堆栈使用情况,有没有溢出?


最大堆栈=子程序调用最大级数+中断最大嵌套级数

分别计算中断级别 的最大堆栈,然后累加可确定


比如中断级别Z1的最大 的堆栈为A;

比如中断级别Z2的最大 的堆栈为B;

比如中断级别Z3的最大 的堆栈为C;


那么最多为A+B+C

或者用仿真器,进入调试状态即可看到所有SFR...


用keil也可以:

Keil 已经自动帮你计算了:sp_max = 使用过的最大栈顶记忆。


什么叫软件堆栈,什么叫硬件堆栈?

什么叫软件堆栈,什么叫硬件堆栈?两者的区别是什么?


看其栈顶指针是否和CPU具有特殊的关联,有关联者(如SP)“硬”,而无关联者“软”。


单片机在执行调用子程序的指令时,一般会把返回地址自动存入堆栈,而没有被单片机自动入栈但是也需要保存的内容比如状态寄存器、通用寄存器等,就得通过PUSH等指令把它们人为地保存到堆栈中。


自动入栈和“人为入栈”可能使用的是一个堆栈指针。有的单片机可以分开,比如AVR,可以通过“ST -Y, R0”这样的指令把R0存入软件堆栈区(Y是由R28和R29两个寄存器的值组成的16位指针),有的单片机缺少这样的指令,就会把软件堆栈和硬件堆栈放在一个栈空间,都使用SP,比如51.


> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
x86、arm、mips架构函数调用实例分析
[笨叔点滴3] “栈”谁便宜了?
51单片机自学教程(1)
单片机从入门到送走.第一天上
如何从零开始写一个简单的操作系统?
uCOSII几种移植方案的分析比较
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服