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

2019-12-27 19:02发布

先说明一下   a=a+1这条程序语句的执行步骤:
javascript:;

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

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

我的CPU会回到 a=a+1 的第二步!
R寄存器里面是不知道 a 已经被改变了,所以他还是按照原先的值 加1!
然后在写回到 a !
  
这时候就会出现bug了!
这种情况大伙们有考虑过吗?  要怎么避免?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
84条回答
188089942
1楼-- · 2019-12-28 14:29
amigenius 发表于 2016-12-2 19:02
放心,编译器会处理好,如果自己写汇编,中断内程序用到的寄存器都得先入栈,这是常识基础 ...

您没有认真看 认真思考我的问题!
amigenius
2楼-- · 2019-12-28 17:30
188089942 发表于 2016-12-2 19:09
您没有认真看 认真思考我的问题!

大神,请原谅我见识肤浅,您慢慢研究,我还要滚去写代码,后续的产品还要写个几百万行的程序。
amigenius
3楼-- · 2019-12-28 21:23
顺便提醒您一句,主循环和中断都有读写的变量,要加Volatile。
love_ourdev
4楼-- · 2019-12-29 01:47
只要有抢占执行出现,就会出现这个问题。这是互斥访问的来由,有些CPU提供原子操作,如果没有,则"关中断->读修改写->开中断"解决。
love_ourdev
5楼-- · 2019-12-29 04:49
 精彩回答 2  元偷偷看……
redroof
6楼-- · 2019-12-29 10:19
这种情况互斥没用。中断又不能阻塞自己。如果没有原子加指令就只能关中断了

一周热门 更多>