- ベストアンサー
HEWのバグ?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
多くのC言語では、コンパイル時に「最適化」と呼ばれる処理を行っています。 これは、書いたコードと同じ処理をする、「よりよい」コードを使って、メモリ効率や実行速度をよくしよう、というものです。 例えば sum=0; for(i=1;i<=10;i++) { sum +=i : } を「ループ最適化」します。 ・sum+=i を繰り返している。 ・ループ回数は定数で指定されているのて、iの値は固定である。 ・他にループ内で行っている処理はない よって、 ループ終了後の値はコンパイル時に計算できるし、実行時に違う値になることは無い。 ↓最適化後のコード i=11; sum=55; となります。(他の方法を使う場合もあります) しかし、「書いた通りに実行して欲しい」という場合に、これだと不具合の元になります。 そこで、最適化のオプションを指定したり、プログラム中に最適化を制御する命令を書いたりします。 HEWは使ったことが無いので、具体的にどのように設定したらよいかまではわかりません。
その他の回答 (1)
- ki073
- ベストアンサー率77% (491/634)
回答No.2
volatileが無いのなら。原因は多分No.1に書かれている通りのように思います。 参考 http://www.eleki-jack.com/h8/2009/09/h8-21h8cvolatile.html
お礼
回答有難うございます。 最適化について考えてはいたのですが、設定した覚えも無いのに有効になっていました。 新しいバージョンからデフォルトで設定が変わったのかもしれません。 最適化を無効にして再度コンパイルしてみたところ直りました。 有難うございました。