先说明一下 a=a+1这条程序语句的执行步骤:
javascript:;
我在想这种情况:
如果执行到第一步,将a的值读到寄存器R中
执行完这一条后,来了个中断就是 a=a-1 !
等执行完 a=a-1 ,这时候重点来了!
我的CPU会回到 a=a+1 的第二步!
R寄存器里面是不知道 a 已经被改变了,所以他还是按照原先的值 加1!
然后在写回到 a !
这时候就会出现bug了!
这种情况大伙们有考虑过吗? 要怎么避免?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
这个前提还是要仔细考量和强调的。
例如这个如果是个串口的 write。你如果在两个级别的中断
里面分别有两个打印串口,就会出现不小心引入多个producer
的情况。或者主程序和中断分别有写串口。这些都很容易犯
的错误。出错起来经常很莫名其妙,所以要份外小心。
溢出是一个现实问题,和计数器超过和 cpu 位数没有关系。
这个关键是代码没有检查剩余空间就写入是很不好的。
一周热门 更多>