e2 studioのcompiler関連のBugではないかと思われる動作について

こんにちは。NoMaYです。

別スレッドのFreeRTOSのRTOSDemoプログラムを作っていて気付いたのですが、e2 studioのバグだと思われる現象に遭遇しました。e2 studioのプロジェクトのプロパティでCC-RXの設定を以下の画面コピーのように設定した場合に、CC-RXでは期待した通りにワーニングメッセージが表示されますが、e2 studioのエディタ上では条件コンパイル文によりコードが除外されていることになっています。一応、e2 studioのプロジェクトのプロパティで「Renesas Toolchain Builtin Language Settings」を確認してみたところ、実際に、e2 studioが組み込みマクロを間違えていることも確認出来ました。

現象再現プロジェクトのファイル一式(投稿用に作成し直して大幅に簡素化したものです)
e2studio_compiler_issues_20200714.zip

現象再現プロジェクトのコード

void main(void)
{
#if ( __TFU == 1 )
    int __tfu = 1;
#endif

#if ( __DBL8 == 1 )
    int __dbl8 = 1;
#endif
}

以下、画面コピーです。

CC-RXのワーニングメッセージが出ている行がe2 studioのエディタ上でグレー表示になってしまっている


e2 studioのプロジェクトのプロパティのCC-RXの設定



e2 studioのプロジェクトのプロパティの「Renesas Toolchain Builtin Language Settings」の内容が間違っている
(具体的には、__DBL8の定義が無く(代わりに__DBL4の定義がある)、__TFUの定義が無い、です。)


[参考リンク]

e2 studio バグリスト

e²studio 7.8 Known Issues List
List generated on 30/03/2020 15:14:31
www2.renesas.eu/_custom/software/ree_eclipse/e2studio7/docs/releasenotes/7.8.0/openissues.htm

e²studio 2020-04 Known Issues List
List generated on 14/04/2020 15:14:31
www2.renesas.eu/_custom/software/ree_eclipse/e2studio8/docs/releasenotes/2020_04/openissues.htm
 

Parents
  • こんにちは。NoMaYです。

    ちょっと好奇心から、e2 studio v2020-10でRX13TのGNURXプロジェクトを作成したのですが、RX13Tは以下の製品ページの通りRXv1コア+FPU搭載ですけど、以下の画面コピーの通りFPU命令を生成しないオプション設定になっていました。これは不適切ですね。(以下の画面コピーのオプション設定を弄ることでFPU命令を生成させることが出来るようにはなるようです。)

    RX13T 製品ページ
    www.renesas.com/jp/ja/products/microcontrollers-microprocessors/rx/rx100/rx13t.html

    RX13Tグループマイコンは、RXファミリで実績のあるRXv1コア 32MHz動作、FPU(Floating Point Unit、浮動小数点演算処理装置)、インバータ制御タイマ(MTU3)や12ビットA/Dコンバータなどを搭載し、1チップでブラシレスDCモータの高効率なインバータ制御を実現します。既存製品との互換性も高く、ハードウェア/ソフトウェアの設計資産の流用が容易です。加えて、32pin/48pinの少ピンパッケージをラインアップし、PGA(プログラマブルゲインアンプ)やコンパレータ、データフラッシュ、HOCOなどの機能を内蔵しており、お客様の制御基板面積縮小/BOM低減に貢献します。


    e2 studio 画面コピー


    [関連リンク]

    ちょっとお高いと言われるマルツさんでも\200で5V対応FPU入り32ビットCPUが買えるんですね、、、(ROM/RAM少ないですけど) (でも、競合メーカのものはもっと安いのかな?)

    RX13TグループRXファミリマイコン(32ピン)【R5F513T3ADFJ#30】
    www.marutsu.co.jp/pc/i/1632546/
     

  • NoMaY さん

    ほや です。

    RX13TでFPUオプションが有効にならない件、-fpu オプションを直接ぶっこんで見たらGNURXだとエラーになってしまいますね。認知済だそうなのでそのうち直ると思いますが。
    CC-RXだと選択できるので問題なさそうに見えます(追記:listingを見たらデフォルトのままでも-fpu付きでコンパイルされていました)。

  • ほやさん、こんにちは。NoMaYです。

    > (追記:listingを見たらデフォルトのままでも-fpu付きでコンパイルされていました)。

    私が試すと以下のコードで以下のリストファイルになっていてFPU命令は生成されてませんでしたよ。

    float f1, f2, f3;

    int main(void) {

        f3 = f1 + f2;
        while(1) {
        }
        return 0;
    }
      35:../src/TestGNURX_RX13T.c **** int main(void) {
      14                                    .loc 1 35 16
      15 0000 7E AA                         push.l  r10
      16                                .LCFI0:
      17 0002 EF 0A                         mov.L   r0, r10
      18                                .LCFI1:
      36:../src/TestGNURX_RX13T.c ****
      37:../src/TestGNURX_RX13T.c ****     f3 = f1 + f2;
      19                                    .loc 1 37 13
      20 0004 FB 52 00 00 00 00             mov.L   #_f1, r5
      21 000a EC 54                         mov.L   [r5], r4
      22 000c FB 52 00 00 00 00             mov.L   #_f2, r5
      23 0012 EC 53                         mov.L   [r5], r3
      24 0014 EF 32                         mov.L   r3, r2
      25 0016 EF 41                         mov.L   r4, r1
      26 0018 05 00 00 00                   bsr ___addsf3
      27                                .LVL0:
      28 001c EF 15                         mov.L   r1, r5
      29 001e EF 54                         mov.L   r5, r4
      30                                    .loc 1 37 8
      31 0020 FB 52 00 00 00 00             mov.L   #_f3, r5
      32 0026 E3 54                         mov.L   r4, [r5]
      33                                .L2:
      38:../src/TestGNURX_RX13T.c ****     while(1) {
      34                                    .loc 1 38 10 discriminator 1
      35 0028 2E 00                         bra .L2
      3
      36                                .LFE0:

    私は、-fpuを直接指定するのではなく、以下の設定にしたらFPU命令を生成させることが出来ました。(あぁ、「デフォルトのまま」というのは以下の画面コピーのCPU Typeの日本語モードでの表記かな。)

    e2 studio 画面コピー

      35:../src/TestGNURX_RX13T.c **** int main(void) {
      13                                    .loc 1 35 16
      14 0000 7E AA                         push.l  r10
      15                                .LCFI0:
      16 0002 EF 0A                         mov.L   r0, r10
      17                                .LCFI1:
      36:../src/TestGNURX_RX13T.c ****
      37:../src/TestGNURX_RX13T.c ****     f3 = f1 + f2;
      18                                    .loc 1 37 13
      19 0004 FB 52 00 00 00 00             mov.L   #_f1, r5
      20 000a EC 54                         mov.L   [r5], r4
      21 000c FB 52 00 00 00 00             mov.L   #_f2, r5
      22 0012 EC 55                         mov.L   [r5], r5
      23 0014 FC 8B 54                      fadd    r5, r4
      24                                    .loc 1 37 8
      25 0017 FB 52 00 00 00 00             mov.L   #_f3, r5
      26 001d E3 54                         mov.L   r4, [r5]
      27                                .L2:
      38:../src/TestGNURX_RX13T.c ****     while(1) {
      28                                    .loc 1 38 10 discriminator 1
      29 001f 2E 00                         bra .L2
      30                                .LFE0:

     

  • > CC-RXだと選択できるので問題なさそうに見えます(追記:listingを見たらデフォルトのままでも-fpu付きでコンパイルされていました)。
    これはCC-RXについて、です。
  • ほやさん、こんにちは。NoMaYです。

    > > CC-RXだと選択できるので問題なさそうに見えます(追記:listingを見たらデフォルトのままでも-fpu付きでコンパイルされていました)。
    > これはCC-RXについて、です。

    そういうことでしたか。

Reply
  • ほやさん、こんにちは。NoMaYです。

    > > CC-RXだと選択できるので問題なさそうに見えます(追記:listingを見たらデフォルトのままでも-fpu付きでコンパイルされていました)。
    > これはCC-RXについて、です。

    そういうことでしたか。

Children
No Data