我对微控制器的一些 C 代码有疑问。这似乎是语言或编译器问题,但程序编译得很好。然而,当在微控制器上运行时,问题就显现出来了。
(这是针对 Atmel AVR AtTiny26 的。)
我正在从模数转换器读取一个值并将其乘以 10:
int SD;
SD = ADCH * 10;
这不能正常工作。我认为在计算中尝试从 ADC 读取是问题所在,所以我尝试了:
int SD;
SD = ADCH;
SD = SD * 10;
这也不起作用,导致微观不稳定。(只要模拟值低,它就可以工作,但是一旦达到某个值,就永远不会再次从 ADC 获得值,直到复位。)
这似乎有效:
int SD;
int TEMP;
TEMP = ADCH;
SD = TEMP * 10;
引入另一个变量可以解决问题,但似乎令人困惑。这是怎么回事?
关于 EE 的相关问题:https ://electronics.stackexchange.com/q/38404/2028
编辑:
这可能与编译优化有关。当我在编译时在命令行上指定 -Os 与 -O2 或 -O3 时,会得到不同的结果。优化能否改变这种变量分配的工作方式?