尚哥-深圳:
我写汇编的时候有发现过这样的问题,还出过事,一堆人在帮我查,最后发现是,变量在主循环中把数据送给了ACC,这时中断到了,在中断里面改变了这个变量,当回到主循环时,又继续从ACC里面取数据,就错了,后来就用关中断解决的。我觉得 C 语言应该有能解决这个问题,我一直都是用volatile来做的,暂时还没发现问题。
变量不加volatile的话,默认是优化的,如下:
int a = 100;
int b = a;
int c = a;
在执行程中,如果第二条语句和第三条语句之间变量a未成用作左值,那么即使变量被某些操作(如中断)改变成200了,执行完后变量c还是等于100。
如果加了volatile的话,在执行int c = a;语句的时候,会重新从内存取出a的值(此时为200),所以c会等于200。