打印

如何计算pic16的中程序使用的堆栈深度?

[复制链接]
2541|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hsst|  楼主 | 2014-9-9 21:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 hsst 于 2014-9-10 15:52 编辑

N级硬件堆栈 是最大的(子)程序调用深度+中断+中断子程序调用深度 <= N.么?
沙发
yewuyi| | 2014-9-9 21:28 | 只看该作者
是。

在MPLAB中可以看到调用深度,但那个值没有包含中断嵌套或者中断调用函数的堆栈开销。

一般在PIC16上不建议在中断中调用函数,中断服务程序尽量简洁,最好置几个标志位就直接退出来。

使用特权

评论回复
板凳
hsst|  楼主 | 2014-9-9 21:48 | 只看该作者
本帖最后由 hsst 于 2014-9-9 21:49 编辑

使用特权

评论回复
地板
hsst|  楼主 | 2014-9-9 21:50 | 只看该作者
yewuyi 发表于 2014-9-9 21:28
是。

在MPLAB中可以看到调用深度,但那个值没有包含中断嵌套或者中断调用函数的堆栈开销。



我已经修改了,中断中改变标志位,主程序中再判断执行。 可这样会不会跟原来的主程序产生影响?

使用特权

评论回复
5
yewuyi| | 2014-9-10 08:17 | 只看该作者
hsst 发表于 2014-9-9 21:50

我已经修改了,中断中改变标志位,主程序中再判断执行。 可这样会不会跟原来的主程序产生影响? ...

有什么影响?

影响不都是你自己的代码控制的吗?除非你的代码有问题,否则不会。

使用特权

评论回复
6
hsst|  楼主 | 2014-9-10 16:00 | 只看该作者
yewuyi 发表于 2014-9-10 08:17
有什么影响?

影响不都是你自己的代码控制的吗?除非你的代码有问题,否则不会。 ...

如果一次中断完成后,在主程序中的相应程序还没执行就又来了一次中断,那。。。。

使用特权

评论回复
7
yewuyi| | 2014-9-10 17:30 | 只看该作者
hsst 发表于 2014-9-10 16:00
如果一次中断完成后,在主程序中的相应程序还没执行就又来了一次中断,那。。。。 ...

中断完成后已经退出中断,并转去执行主程序时再次发生中断,则和第一次中断一样。

如果前次中断的出栈没有完成,并再次进入中断,则形成中断嵌套。

PIC16一般不建议搞出中断嵌套,由你自己的代码来保证,否则的话,你就必须代码保证嵌套后不会导致代码执行崩溃。

使用特权

评论回复
8
hsst|  楼主 | 2014-9-10 21:41 | 只看该作者
yewuyi 发表于 2014-9-10 17:30
中断完成后已经退出中断,并转去执行主程序时再次发生中断,则和第一次中断一样。

如果前次中断的出栈没 ...

嗯,谢谢~

使用特权

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

本版积分规则

2

主题

27

帖子

0

粉丝