打印

先响应中断还是先响应堆栈调用

[复制链接]
2069|17
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
entepino|  楼主 | 2011-11-28 18:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
NE5532| | 2011-11-28 19:21 | 只看该作者
以7年的工作经验都没看懂楼主“响应堆栈”这四个字。

使用特权

评论回复
板凳
流行音乐| | 2011-11-28 19:31 | 只看该作者
估计楼主头脑中的单片机是另外一番景象,不是我们这个世界的单片机。

使用特权

评论回复
地板
linty8433| | 2011-11-28 20:17 | 只看该作者
不懂不懂

使用特权

评论回复
5
highgear| | 2011-11-28 21:45 | 只看该作者
楼主的意思是不是,开中断后,cpu 先pop,reti, 还是先再次进入本中断?

对于51来说,没有 reti,就不会再次响应同级中断。所以,如果51的中断程序没有修改优先级,那么是先"响应堆栈"(楼主创造了一个新词),后响应中断。对于其他的 cpu, 则要看cpu是否允许响应同级中断.

使用特权

评论回复
6
DownCloud| | 2011-11-29 00:05 | 只看该作者
确实表达的很不清晰啊。

使用特权

评论回复
7
ayb_ice| | 2011-11-29 08:01 | 只看该作者
开中断有堆栈没有必然联系,这都哪跟那啊.
"响应堆栈"这个词太有杀伤力了

使用特权

评论回复
8
caner_hn| | 2011-11-29 08:31 | 只看该作者
在中断中写EEPROM本人认为本就不妥。
像这种速度比较慢的操作应该尽量放到主循环中去。中断程序应该尽可能短小,应该尽快退出。
你可以在中断程序中设置一个“需要写EEPROM的标志位”,然后在主循环中查询该标志位。

使用特权

评论回复
9
entepino|  楼主 | 2011-11-29 08:38 | 只看该作者
sorry,昨天写的有点着急,重新写一些。

#pragma interrupt ReceiveMessage()  

ReceiveMessage
()


{


coder1


WriiteEEPROM()


coder2


ClearINTFlag;



}

  
WriiteEEPROM()
{

DisableAllInt;


coder3;


EnableAllInt


}


发现执行完函数WriiteEEPROM(),由于没有清中断标志位INTFlag,程序又跳到coder1处执行,而不是去执行coder2,为何?

使用特权

评论回复
10
ayb_ice| | 2011-11-29 08:54 | 只看该作者
步进看不就知道了

使用特权

评论回复
11
yewuyi| | 2011-11-29 09:02 | 只看该作者
写EEPROM的数据操作可以在中断程序中完成,如果能确定在当前中断中不可能再有其它中断程序形成中断嵌套,则可以不执行"DisableAllInt;"和"EnableAllInt;",否则需要暂时关闭全局中断容许位确保在执行coder3;过程中不被其它中断打断,执行完coder3;是否开启全局中断容许位需要看芯片和实际项目需要,写EEPROM的延时时间应该在中断中退出,不能形成堵塞,这都是一个完全可控的状态,如果你掌握汇编级的程序编程思想,这些都根本不是问题。

使用特权

评论回复
12
yewuyi| | 2011-11-29 09:02 | 只看该作者
另:不要生造名词。

使用特权

评论回复
13
zhaodaoyin1| | 2011-11-29 10:46 | 只看该作者
1# entepino

使用特权

评论回复
14
zhaodaoyin1| | 2011-11-29 10:47 | 只看该作者
还是应该先把堆栈处理完后再出来比较好。

使用特权

评论回复
15
sysdriver| | 2011-11-29 12:25 | 只看该作者
LZ先把你的IC型号亮出来,垃圾IC看得多了。特别是仿真时。。。

使用特权

评论回复
16
NE5532| | 2011-11-29 12:28 | 只看该作者
又是一个被仿真毒害的青年,你实际跑下行不?

使用特权

评论回复
17
hm4243343| | 2011-11-29 16:12 | 只看该作者
:lol。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

使用特权

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

本版积分规则

202

主题

627

帖子

1

粉丝