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

[复制链接]
 楼主| 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中可以看到调用深度,但那个值没有包含中断嵌套或者中断调用函数的堆栈开销。



我已经修改了,中断中改变标志位,主程序中再判断执行。 可这样会不会跟原来的主程序产生影响?
yewuyi 发表于 2014-9-10 08:17 | 显示全部楼层
hsst 发表于 2014-9-9 21:50

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

有什么影响?

影响不都是你自己的代码控制的吗?除非你的代码有问题,否则不会。
 楼主| hsst 发表于 2014-9-10 16:00 | 显示全部楼层
yewuyi 发表于 2014-9-10 08:17
有什么影响?

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

如果一次中断完成后,在主程序中的相应程序还没执行就又来了一次中断,那。。。。
yewuyi 发表于 2014-9-10 17:30 | 显示全部楼层
hsst 发表于 2014-9-10 16:00
如果一次中断完成后,在主程序中的相应程序还没执行就又来了一次中断,那。。。。 ...

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

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

PIC16一般不建议搞出中断嵌套,由你自己的代码来保证,否则的话,你就必须代码保证嵌套后不会导致代码执行崩溃。
 楼主| hsst 发表于 2014-9-10 21:41 | 显示全部楼层
yewuyi 发表于 2014-9-10 17:30
中断完成后已经退出中断,并转去执行主程序时再次发生中断,则和第一次中断一样。

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

嗯,谢谢~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

27

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部