本帖最后由 sjl2006 于 2011-11-17 12:00 编辑
以gnu为例,如果用调试模式,不加volatile而用你主帖的写法,是可以的;如果开了code size reduce优化,你的主帖写法第二句很可能会被优化掉。rSRCPND = rSRCPND是否等价于主帖写法,主要取决于rSRCPND是否限制为volatile类型指针的目标,如果限制,开不开优化都等价;如果未限制,调试模式下等价,非调试模式下有可能被优化掉。
同样的问题出现在这里:
rSRCPND=0;
rSRCPND=1;
如果没加volatile修饰,而开了优化,这个寄存器(假设是一个映射到处理器地址空间的普通寄存器)能被正确赋值吗?有兴趣可以反汇编一把看看。
|