打印

如何调试PIC16的堆栈?

[复制链接]
5466|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
457878|  楼主 | 2012-6-11 09:42 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
问题:PIC16F721只有8级堆栈,但程序产生了11级调用,不知道如何查看调试堆栈:
Warning [1393] F:\__WirlessBoot\Code\Device\__Receiver\C\main.c; 30. possible hardware stack overflow detected, estimated stack depth: 11

生成的map文件里没有calltree,  MPLAB IDE里的Hardeware stack窗口好像也是个摆设,如图所示:
沙发
兰天白云| | 2012-6-11 10:09 | 只看该作者
PIC16系列堆栈有2级、8级、16级,堆栈不占用RAM(与51单片机不一样,51的占用RAM)堆栈溢出无提示(这一点与51单片机一样) PIC18系列堆栈有32级且溢出有提示,有状态位可查 采用仿真可查出堆栈是否溢出,主要是查压入的地址

使用特权

评论回复
板凳
wrightdu| | 2012-6-11 10:15 | 只看该作者
[jngjghjghjghjghjghjghjgh#[/url] 457878

使用特权

评论回复
地板
457878|  楼主 | 2012-6-11 10:21 | 只看该作者
2# 兰天白云

没有溢出提示,没有查询方法,那得从main()函数开始一步一步去查了...还好有个Watch窗口可以看PCLATH :L

使用特权

评论回复
5
457878|  楼主 | 2012-6-11 10:24 | 只看该作者
也不行,我以为PCLATH是堆栈指针呢,原来是PC指针...

使用特权

评论回复
6
兰天白云| | 2012-6-12 12:55 | 只看该作者
仿真时从你的截图窗口看就可以了

用这级别的单片机,一般不会进行递归调用,所以普通调用很容易知道调了几层

使用特权

评论回复
7
diweo| | 2012-6-12 21:08 | 只看该作者
估计你是调试到main第一行就暂停了,后面都没执行,你让Hardeware stack窗口怎么显示呢?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

269

主题

883

帖子

3

粉丝