OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2359|回复: 5

在中断程序内 变量的加加,这种情况是否会出现BUG

[复制链接]

27

主题

58

帖子

0

精华

初级会员

Rank: 2

积分
194
金钱
194
注册时间
2015-2-16
在线时间
5 小时
发表于 2016-12-2 17:43:20 | 显示全部楼层 |阅读模式
1金钱
先说明一下   a=a+1这条程序语句的执行步骤:
[url=]图片[/url]

我在想这种情况:
如果执行到第一步,将a的值读到寄存器R中

执行完这一条后,来了个中断就是 a=a-1 !
等执行完 a=a-1 ,这时候重点来了!

我的CPU会回到 a=a+1 的第二步!
R寄存器里面是不知道 a 已经被改变了,所以他还是按照原先的值 加1!
然后在写回到 a !
  
这时候就会出现bug了!
这种情况大伙们有考虑过吗?  要怎么避免?

a=a 1.png
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

11

主题

1044

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3721
金钱
3721
注册时间
2011-5-23
在线时间
2012 小时
发表于 2016-12-2 18:14:01 | 显示全部楼层
自加自减这类操作,关中断比较简单。
RT-Thread RTOS 音频,WIFI,蓝牙
回复

使用道具 举报

5

主题

40

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
229
金钱
229
注册时间
2016-7-30
在线时间
82 小时
发表于 2016-12-3 10:25:39 | 显示全部楼层
我感觉如果是全局变量的话,你中断处理这个变量肯定是你设想的预期到了才会执行,这个是你想要的不算bug吧,局部变量的话,分配的内存也不一样也不影响
回复

使用道具 举报

5

主题

105

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
419
金钱
419
注册时间
2015-9-16
在线时间
122 小时
发表于 2016-12-3 10:54:52 | 显示全部楼层
不要在中断里处理不就行了么。
回复

使用道具 举报

50

主题

1805

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6662
金钱
6662
注册时间
2016-5-29
在线时间
910 小时
发表于 2016-12-3 11:52:36 | 显示全部楼层
这就是典型的与中断服务程序共享变量.应该执行原子操作就行了.
回复

使用道具 举报

30

主题

1170

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1993
金钱
1993
注册时间
2016-2-16
在线时间
527 小时
发表于 2016-12-3 12:09:35 | 显示全部楼层
本帖最后由 憨厚诚实大叔 于 2016-12-3 12:12 编辑

+1的话,你可以用自加,自加应该是原子操作,汇编有个自加的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-25 20:45

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表