マイクロコントローラーの 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 を指定すると、異なる結果が得られます。最適化によって、そのような変数割り当ての仕組みが変わる可能性はありますか?