お世話になります。SYOUです。
RX62Tでソフトを作っていて、作成したコードにアドレスが割り当てられず、ブレークポイントを置けなくて困っているので投稿させてもらいます。(開発環境はCS+になります)
下に簡単に関数を書いたのですがこの関数をCS+でビルドしてみたところPos=i;のところにアドレスが表示されず、ブレークポイントが設置できません。
関数の内容をほかのところに直接書いた場合にはアドレスも表示され、ブレークポイントの設定もできました。
似たような状況になったことのある方いらっしゃいましたらお知恵をお借りしたいです。
void f(uint_16 j ,uint_8 k ,uint_32 Pos ){
uint_16 i;
for(m=0; j<10; m++){
if( (box[ m ]==j) && (k==1) ){
Pos = i;
}
わわいです。
Posという変数が代入されるだけで参照されないため、コンパイラの最適化でその命令が削除されてますね。
#また、変数 i に値が入ってません
これをどーにかするには、お使いのコンパイラの設定で、最適化を「なし」にするか、「デバッグ用」、にするかしてコンパイルし直してみればいいです
void f(uint_16 j ,uint_8 k ,uint_32 Pos ){ uint_16 i; for(m=0; j<10; m++){ if( (box[ m ]==j) && (k==1) ){ Pos = i; } } }
CS+ の挙動以前の話として、書かれてるプログラムの見直しをお勧めします。
どのようにアセンブラに変換されたのか見たらどうですか。
わわいさん
最適化を「なし」にしてコンパイルをしたら治りました。ありがとうございました。
fujitaさん
簡単にしようとして大部分を削ったつもりだったのですが、そのせいでよくわからないソフトになってしまっていました。すいません。
Posの型はそのままなので参照型への変更を考えたいと思います。
リカルドさん
混合状態で確認してみたのですがよくわからないところに飛んでしまっていて理解できなかったので、何かヒントになればと思い、質問させてもらいました。
(アセンブラが詳しくないせいなのですが…)
追加の質問になりますが、最適化をそのままの状態にして治す方法などはあるのでしょうか?
なるべくならば今までの最適化レベルでプログラムを進めていきたいと考えているのでもしできるのであれば教えていただきたいです。