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
 

  • こんにちは。NoMaYです。

    e2 studioのプロジェクトの「Renesas Toolchain Builtin Language Settings」の__DBL4と__DBL8の定義ですが、RXv3コア倍精度浮動小数点演算ユニットを内蔵していない品種(例えばRX130とか)でも、以下の画面コピーの通り、間違っていますね。

    現象再現プロジェクトのファイル一式
    e2studio_compiler_issues_20201009.zip

    以下、画面コピーです。(e2 studio v2020-10です。ツールバーは大幅にカスタマイズしています。)

    (1) [double型およびlong duble型をfloat型への変更を抑止する]にチェックマーク無しの場合

    チェックマーク無し ⇒ float型への変更を抑止しない ⇒ float型へ変更する ⇒ __DBL4=1となる筈


    しかし__DBL8=1となっている


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


    (2) [double型およびlong duble型をfloat型への変更を抑止する]にチェックマーク有りの場合

    チェックマーク有り ⇒ float型への変更を抑止する ⇒ float型へ変更しない ⇒ __DBL8=1となる筈


    しかし__DBL4=1となっている


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


    以下、CC-RXのヘルプの画面コピーです。



    [参考リンク]

    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-10 Known Issues List
    List generated on 05/10/2020 12:32:59
    www2.renesas.eu/_custom/software/ree_eclipse/e2studio8/docs/releasenotes/2020_10/openissues.htm
     

  • NoMaY さん

    コンパイラはLanguage Settingsに関係なくオプションの通りに動きます。
    一方、e² studioのエディタはLanguage Settingsにあるシンボルで判断します。
    もう大体分かってきたと思いますが、コンパイラがおかしいのではなく、
    Language Settingsの動きがオプションに付いて行けていないのが原因です。
    Language Settingsには任意のシンボルが自分で追加できるので、それで無理やり合わせてしまうのが手っ取り早いかもしれません。

  • こんにちは。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について、です。

    そういうことでしたか。

  • こんにちは。NoMaYです。

    e2 studio 2022-04+CC-RL V1.11の組み合わせで下記エラーが発生するとの報告がありました。詳細は以下のスレッドに投稿されています。また、私の手元で再現させたプロジェクトを以下に添付します。

    issue_ccrl_odd_reloc_20220627.zip

    E0562332:Relocation value is odd number : ".\generate\cstart.obj"-".text"-"0000005f"

     
    e2studio + CC-RL+コード生成ツールの組み合わせで出る E0562332 エラーについて
    japan.renesasrulz.com/cafe_rene/f/forum18/8267/e2studio-cc-rl-e0562332
     

  • こんにちは。NoMaYです。

    e2 studio 2022-07からCC-RHでのビルドが出来るようになったのですが、コンパイルオプションの設定項目に MISRA C Rule Check の項目がありません。CC-RXの設定項目にもCC-RLの設定項目にも存在して、CC-RHのオプションとしても存在します。素朴に、なぜ未実装のままリリースしたのかなぁ?、、、と不思議に思ってしまいます。

    以下、e2 studioのCC-RX/CC-RL/CC-RHの各場合とCC-RHのヘルプとCS+ for CCのCC-RHの場合の画面コピーです。

    e2 studio+CC-RXの場合:ある



    e2 studio+CC-RLの場合:ある



    e2 studio+CC-RHの場合:無い、、、



    CC-RHのヘルプ


    CS+ for CC+CC-RHの場合:ある (ちなみにCS+ for CCの64bit版?はRH850専用です)


     

  • こんにちは。NoMaYです。

    e2 studio 2022-07からCC-RHでのビルドが出来るようになったのですが、前の投稿の件の他にも、CC-RXの場合にもCC-RLの場合にも設定項目があるのにCC-RHの場合には無い、というのがあります。以下の画面コピーのとおり、Stack Analysis ビュー(CS+ for CCでのCall Walkerに相当する)の為の設定項目がそうなってしまっていました。これも、素朴に、なぜ未実装のままリリースしたのかなぁ?、、、と不思議に思ってしまいます。

    以下、e2 studioのCC-RX/CC-RL/CC-RHの各場合とCS+ for CCのCC-RHでのCall Walkerの画面コピーです。

    e2 studio+CC-RXの場合:ある


    e2 studio+CC-RLの場合:ある


    e2 studio+CC-RHの場合:無い、、、


    (参) CS+ for CC+CC-RHでのCall Walker