打印
[STM32F1]

测试时两次都进入了中断

[复制链接]
811|21
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
bqyj|  楼主 | 2021-3-4 12:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
为了简便说明问题,提取代码如下。

#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| | 2021-3-4 12:52 | 只看该作者

你仿真一下,看b是否变为了0。。

使用特权

评论回复
板凳
huwr| | 2021-3-4 12:56 | 只看该作者
还有就是把优化等级调为最低,减少其他因素。

使用特权

评论回复
地板
huanghuac| | 2021-3-4 13:00 | 只看该作者
那就单步调试看看b的值是否在中断的时候被清零了

使用特权

评论回复
5
happy_10| | 2021-3-4 13:04 | 只看该作者
一种是将IAR版本改为debug,(降低优化程度)另外就是各位说的加个VOLATILE.

使用特权

评论回复
6
wenfen| | 2021-3-4 13:07 | 只看该作者
代码本身没有任何意义而被系统优化掉了。

使用特权

评论回复
7
tian111| | 2021-3-4 13:10 | 只看该作者
中断信号是两次怎么产生的?

使用特权

评论回复
8
songqian17| | 2021-3-4 13:13 | 只看该作者
楼主这个代码是怎么设置的啊

使用特权

评论回复
9
chenho| | 2021-3-4 13:17 | 只看该作者
能够进入中断就是触发了信号

使用特权

评论回复
10
zwll| | 2021-3-4 13:22 | 只看该作者
如果是误触发中断,也有可能是就是你信号收到干扰了。

使用特权

评论回复
11
chuxh| | 2021-3-4 13:27 | 只看该作者
变量b的值在中断过程是多少呢

使用特权

评论回复
12
juventus9554| | 2021-3-4 13:30 | 只看该作者
能够进入中断就是触发了信号

使用特权

评论回复
13
stly| | 2021-3-4 13:32 | 只看该作者
中断误触发了?板子设计怎么样,会不会是电磁干扰

使用特权

评论回复
14
heweibig| | 2021-3-4 13:35 | 只看该作者
main函数里面为什么没有死循环?这样程序运行完就停止了

使用特权

评论回复
15
bqyj|  楼主 | 2021-3-4 13:38 | 只看该作者
好的,我明天去单位试一下,多谢各位大侠了哈

使用特权

评论回复
16
gdszzyq| | 2021-3-5 16:20 | 只看该作者
要在中断里调用的变量一定要加上volatile修饰,没加就被优化掉了,while(b)就永远为真,我吃过这方面的亏

使用特权

评论回复
17
便携手到老| | 2021-3-5 18:29 | 只看该作者
只有进入了中断之后,才能够触发信号的。可以看看。

使用特权

评论回复
18
labasi| | 2021-4-2 14:37 | 只看该作者
监测一下b的值

使用特权

评论回复
19
paotangsan| | 2021-4-2 14:38 | 只看该作者
用debug模式试试看

使用特权

评论回复
20
renzheshengui| | 2021-4-2 14:41 | 只看该作者
进入中断了吗

使用特权

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

本版积分规则

390

主题

4526

帖子

2

粉丝