打印
[MCU]

测试时两次都进入了中断

[复制链接]
332|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
dengdc|  楼主 | 2019-6-23 13:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

为了简便说明问题,提取代码如下。
#include<msp430x14x.h>
#define  uchar unsigned char
uchar b=1;
uchar a=5;
uchar c=10;
void main()
{
while(b)
{
a--;
}
c--;
}
#pragma vector=PORT1_VECTOR
__interrupt void PORT1_ISR(void)
{
b=0;   
}
当上面while循环中语句为while(b)
{

}只有一个分号时,可以跳出while循环,但是当while(b)
{
a--;//或其他语句时
}跳不出while循环。
这是为什么,测试时两次都进入了中断。
申明:上述代码是简化后,表达出我的原来代码的意思。

使用特权

评论回复

相关帖子

沙发
liliang9554| | 2019-6-23 13:07 | 只看该作者

你判断的是B

使用特权

评论回复
板凳
zhaoxqi| | 2019-6-23 13:10 | 只看该作者
你仿真一下,看b是否变为了0;还有就是把优化等级调为最低,减少其他因素。

使用特权

评论回复
地板
huangchui| | 2019-6-23 13:13 | 只看该作者
那就单步调试看看b的值是否在中断的时候被清零了

使用特权

评论回复
5
jiajs| | 2019-6-23 13:18 | 只看该作者
变量b加个volatile修饰吧

使用特权

评论回复
6
dengdc|  楼主 | 2019-6-23 13:21 | 只看该作者
解决了,一种是将IAR版本改为debug,(降低优化程度)另外就是各位说的加个VOLATILE.在单片机C语言书上找到的答案,谢谢诸位了

使用特权

评论回复
7
zhanghqi| | 2019-6-23 13:24 | 只看该作者
方xin??????

使用特权

评论回复
8
zhenykun| | 2019-6-23 13:27 | 只看该作者

这就是代码本身没有任何意义而被系统优化掉了。

使用特权

评论回复
9
houcs| | 2019-6-23 13:29 | 只看该作者
中断信号是两次怎么产生的?

使用特权

评论回复
10
heweibig| | 2019-6-23 13:33 | 只看该作者
楼主这个代码是怎么设置的?

使用特权

评论回复
11
liliang9554| | 2019-6-23 13:40 | 只看该作者
能够进入中断就是触发了信号

使用特权

评论回复
12
jiahy| | 2019-6-23 13:43 | 只看该作者

如果是误触发中断,也有可能是就是你信号收到干扰了。

使用特权

评论回复
13
spark周| | 2019-6-23 13:47 | 只看该作者
感谢,也解决了我的一个问题

使用特权

评论回复
14
午夜粪车| | 2019-6-23 13:49 | 只看该作者

变量b的值在中断过程是多少

使用特权

评论回复
15
zhenykun| | 2019-6-23 13:53 | 只看该作者
加volatile干什么

使用特权

评论回复
16
zhaoxqi| | 2019-6-23 13:57 | 只看该作者

能够进入中断就是触发了信号

使用特权

评论回复
17
dengdc|  楼主 | 2019-6-23 14:02 | 只看该作者

结贴了,多谢大家讨论这么多哈,呵呵

使用特权

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

本版积分规则

892

主题

13885

帖子

7

粉丝