[应用相关] 测试时两次都进入了中断

[复制链接]
643|14
 楼主| bqyj 发表于 2019-5-5 23:57 | 显示全部楼层 |阅读模式
为了简便说明问题,提取代码如下。

#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循环。
这是为什么,测试时两次都进入了中断。
申明:上述代码是简化后,表达出我的原来代码的意思。
gongche 发表于 2019-5-6 19:20 | 显示全部楼层
你仿真一下,看b是否变为了0。。
huwr 发表于 2019-5-6 19:25 | 显示全部楼层

还有就是把优化等级调为最低,减少其他因素。
huanghuac 发表于 2019-5-6 19:28 | 显示全部楼层

那就单步调试看看b的值是否在中断的时候被清零了
happy_10 发表于 2019-5-6 19:31 | 显示全部楼层

一种是将IAR版本改为debug,(降低优化程度)另外就是各位说的加个VOLATILE.
wenfen 发表于 2019-5-6 19:34 | 显示全部楼层
代码本身没有任何意义而被系统优化掉了。
tian111 发表于 2019-5-6 19:36 | 显示全部楼层
中断信号是两次怎么产生的?
songqian17 发表于 2019-5-6 19:40 | 显示全部楼层
楼主这个代码是怎么设置的啊
chenho 发表于 2019-5-6 19:48 | 显示全部楼层

能够进入中断就是触发了信号
zwll 发表于 2019-5-6 19:51 | 显示全部楼层
如果是误触发中断,也有可能是就是你信号收到干扰了。
chuxh 发表于 2019-5-6 19:53 | 显示全部楼层
变量b的值在中断过程是多少呢
juventus9554 发表于 2019-5-6 19:57 | 显示全部楼层
能够进入中断就是触发了信号
stly 发表于 2019-5-6 20:00 | 显示全部楼层

中断误触发了?板子设计怎么样,会不会是电磁干扰
features 发表于 2019-5-6 20:50 | 显示全部楼层
main函数里面为什么没有死循环?这样程序运行完就停止了
 楼主| bqyj 发表于 2019-5-6 20:55 | 显示全部楼层

好的,我明天去单位试一下,多谢各位大侠了哈,结贴了先        
您需要登录后才可以回帖 登录 | 注册

本版积分规则

390

主题

4526

帖子

2

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