餃子を食べるとき、何をつけますか?

こんにちは。

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

お手上げ入っています。
何方かわかる方ご教授願います。

「HEWのバグ?」の質問画像

A 回答 (2件)

多くの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 …
    • good
    • 0
この回答へのお礼

回答有難うございます。

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

お礼日時:2014/05/18 12:28

volatileが無いのなら。

原因は多分No.1に書かれている通りのように思います。

参考
http://www.eleki-jack.com/h8/2009/09/h8-21h8cvol …
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報