有时,我需要一些代码来完全由CPU执行,就像我将其放在源代码中一样。但是任何C编译器都有其优化算法,因此可以期待一些技巧。例如:
unsigned char flag=0;
interrupt ADC_ISR(){
ADC_result = ADCH;
flag = 1;
}
void main(){
while(!flag);
echo ADC_result;
}
有些编译器肯定会使while(!flag);
循环不定式,因为它假定flag
等于false(!flag
因此始终为true)。
有时我可以使用volatile
关键字。有时它可以提供帮助。但是实际上在我的情况下(AVR GCC)volatile
关键字会强制编译器将变量定位到SRAM中,而不是将其定位到SRAM中(由于某些原因,这很糟糕)。此外,Internet上的许多文章建议volatile
谨慎使用关键字,因为结果可能会变得不稳定(取决于编译器,其优化设置,平台等)。
因此,我绝对希望以某种方式指出源代码指令,并告诉编译器应完全按原样编译该代码。像这样:volatile while(!flag);
是否有任何标准的C指令来执行此操作?
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句