お世話になります
e2studioでgcc for RXの環境設定とテストを行っていたところ
実際の変数のアドレスと変数のビューウィンドウやホバー表示が示すアドレスとが食い違っていて、
変数の値もそのアドレスの内容を表示してしまう症状が発生してしまっています。
実際のコードは以下の通りで
volatile int i = 0;
while{ i++; }
上記コードの逆アセンブルの内容は以下の通りでr0には最初0x69cが格納されていました
main:fffe8880: sub #4, r0LM11:fffe8882: mov.l [r0], r5fffe8884: add #1, r5fffe8886: mov.l r5, [r0]fffe8888: bra.b 0xfffe8882 <LM11>
mapファイルのustackは以下の通り
ustack 0x0000000000000700 0x0
メモリやレジスタを確認すると変数iは0x69cから4引いたアドレス0x698の中身がインクリメントされているのですが
変数のビューやホバーは画像の通りアドレス0x700の値を表示してしまいます。
また、変数を増やしていくと実際のアドレスとは逆方向にアドレスが伸びて行ってしまいます。
この症状はRX simulatorを使用しているときは発生せず、E2liteでターゲットに接続しているときのみ発生します
どなたか解決方法をご教授願えますでしょうか?
ななしき さん、こんにちは。NoMaYと申します。とっさに気になったのは以下の2点です。そして、今現在のテスト段階であれば、プロジェクトのファイル一式に企業秘密に関わる部分も無いと思われますので、プロジェクトのファイル一式をzipファイルに固めてリプライに添付して頂けると、私としては、どうしてそうなるのか調べ易いです。お願い出来ませんでしょうか?・ IスタックとUスタックの使い分け(自動的にGDBに認識されると思っていたのですけれども)・ E2Lite向けとSimulator向けとでビルドしたelfファイルが同等か(ビルド日時等の差異はあると思います)あと、e2 studioのバージョンは幾つでしょうか?(他の情報はプロジェクトのファイル一式の中を見れば分かるのですけれども、これは見ても分からないですので。)
ななしき さん、こんにちは。NoMaYです。volatile int i = 0;というようにvolatileを付けておられるのですね。もうひとつ気になる点に気付きました。・最適化無し(-O0)でビルドしているかどうか
NoMaY様リプライありがとうございます
プロジェクトの設定内容と変更した要素は以下の通りです
ターゲットデバイスはR5F5114ADFL、エミュレータはE2liteを使用スマートコンフィグレータでクロック源をHOCOに設定
complier CPPをGNU C++17に変更-std=gnu++17
コンパイラオプションの追加-fpermissive-fno-rtti-fno-exceptions-fno-non-call-exceptions-fno-use-cxa-atexit-fno-threadsafe-statics-fstack-usage
リンカスクリプトセクション.r_bsp_istackと.r_bsp_ustackの set VMA explicitly のチェックを外す※外さないとBLOCKがundefined的なエラーが出てビルドが通らないため
シミュレータ時のみmcu_clocks.c内のHOCO安定待ちのループ(0 == SYSTEM.OSCOVFSR.BIT.HCOVF)をdefineマクロで飛ばす※なのでelfファイルの内容は同じにならないと思われます
最適化レベルはOptimize for debug (-Og)
e2studioのバージョンVersion: 2022-10 (22.10.0)Build Id: R20221013-1357e² studio IDE is based on Eclipse Platform 4.24 (2022-06)and CDT version 10.7.0.
プロジェクト一式を添付いたします
0576.test.zip
ななしき さん、こんにちは。NoMaYです。添付して頂いたプロジェクトをビルドしてみたのですが、HardwareDebugビルド(E2Lite向け)では出ないけれども、Debugビルド(RX Simulator向け)では以下のワーニングが出る、という差異が見られました。これは、そちらでも同じでしょうか?同じということならば、こちらでDebugビルドの設定を修正してみますけれども、そうでは無い、そちらでは以下のワーニングが出ていない、ということであれば、すみませんけれども、もう一度プロジェクトのファイル一式を念の為に添付して頂きたいのです。
cc1.exe: warning: command line option '-fno-rtti' is valid for C++/ObjC++ but not for Ccc1.exe: warning: command line option '-fno-use-cxa-atexit' is valid for C++/ObjC++ but not for Ccc1.exe: warning: command line option '-fno-threadsafe-statics' is valid for C++/ObjC++ but not for Ccc1.exe: warning: command line option '-fpermissive' is valid for C++/ObjC++ but not for C
NoMaY様
今確認したところDebugビルドとReleaseビルドのC Compilerの項目にC++用のオプションが混入していました。
繰り返し設定をいじってたのでどこかで間違えたのかもしれません…
ただ、削除しても状況は変わりませんでした