• ベストアンサー

HEWのバグ?

こんにちは。 HEW4を使ってプログラムしています。 意図したとおり動作しないので調べた所、実行順序がおかしいのです。 設定を見直したり、HEWを再インストールしましたが意図した通りに動作しません。 別の環境にインストールしているHEWでコンパイルしたものは正常に動作します。 二つの間の違いはツールチェインのバージョンのみで、動作がおかしい方はバージョンが新しいです。 画像がソースの一部です。 「正常」のソースは上から順にアドレスが増加していますが、「異常」のソースはバラバラになっています。 お手上げ入っています。 何方かわかる方ご教授願います。

質問者が選んだベストアンサー

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

多くのC言語では、コンパイル時に「最適化」と呼ばれる処理を行っています。 これは、書いたコードと同じ処理をする、「よりよい」コードを使って、メモリ効率や実行速度をよくしよう、というものです。 例えば sum=0; for(i=1;i<=10;i++) { sum +=i : } を「ループ最適化」します。 ・sum+=i を繰り返している。 ・ループ回数は定数で指定されているのて、iの値は固定である。 ・他にループ内で行っている処理はない よって、 ループ終了後の値はコンパイル時に計算できるし、実行時に違う値になることは無い。 ↓最適化後のコード i=11; sum=55; となります。(他の方法を使う場合もあります) しかし、「書いた通りに実行して欲しい」という場合に、これだと不具合の元になります。 そこで、最適化のオプションを指定したり、プログラム中に最適化を制御する命令を書いたりします。 HEWは使ったことが無いので、具体的にどのように設定したらよいかまではわかりません。

参考URL:
http://csps.hitachi-solutions.co.jp/sh-c/support/opt.html
deltatled_002
質問者

お礼

回答有難うございます。 最適化について考えてはいたのですが、設定した覚えも無いのに有効になっていました。 新しいバージョンからデフォルトで設定が変わったのかもしれません。 最適化を無効にして再度コンパイルしてみたところ直りました。 有難うございました。

その他の回答 (1)

  • ki073
  • ベストアンサー率77% (491/634)
回答No.2

volatileが無いのなら。原因は多分No.1に書かれている通りのように思います。 参考 http://www.eleki-jack.com/h8/2009/09/h8-21h8cvolatile.html

関連するQ&A