RenesasさんからRXマイコンの低価格Target Boardが出たのでサンプルプログラムをCSplus projectへ変換してみようと思います

こんにちは。NoMaYです。

ウェブで調べ物をしていたら、ルネサスさんからRXマイコンの低価格ボードが出たことを知りました。でも、サンプルプログラムがe2 studioプロジェクト版しか無いようなのでCS+プロジェクトに変換して後で投稿してみようと思います。(もっとも、ボードが無くて動作確認は出来ないので、MOTファイルが同一になるようにしてみるところまでですが、、、) 30米ドル程らしいので3千円ちょっとぐらいかな。

拡充を続ける32ビットマイコン「RXファミリ」を容易に導入できるターゲットボードを発売
~家電製品、ビル用および産業用オートメーション機器向けなどに、「RX65N」「RX130」「RX231」用を用意。組み込み開発のスタートを支援~
www.renesas.com/ja-jp/.../news20180219.html

Target Board for RX family 製品ページ
www.renesas.com/ja-jp/.../rx-family-target-board.html
 

  • シェルティさん、こんにちは。NoMaYです。

    こちらも、ご連絡有難う御座います。また何か気付いたことがありましたら、投稿しようと思います。(そういった話とは別に、ネタ用に(と言う訳では無いですが)秋月さんやマルツさんで入手したものが実は未消化だったり、投稿したサンプルプロジェクトの拙い点にここ何日かの間に気付いてしまったり、とかありますので、この後も、まだ、このスレッドは続きそうです。)

  • こんにちは。NoMaYです。

    以前(3ヶ月程前)に投稿した、TBボードのサンプルプログラムを基にxxx_main.cをxxx_main.cppにしてスマートコンフィグレータが生成した関数を呼び出せるようにしたプロジェクトですが、それらでBSPモジュールのヘッダファイルの事情でマクロ定義で無理矢理なこと(そもそもC++ソースでありながら__STDC__を定義すること(且つ値を199901Lとすること))をやっていたのが裏目に出てしまい、GNURXの場合にstdio.h等をインクルードするとstdio.h等の中の__strict(C99予約語)がC++ソースでコンパイルエラーを誘発することに気付きました。(下の画面コピーを参照して下さい。) そこで修正版を作成しました。

    また、その際に、以下のことも実施してみました。

    ・GNURXの場合はrx-elf-size.exeを実行してtext/data/bssのセクションサイズを表示させる
    ・e2 studio(GNURX/CC-RX)の場合はツールチェイン未設定だったらFAQのURLを表示させる
    ・別スレッドでのRXスマートコンフィグレータ生成コード不具合に対処する(RX65NだけでなくRX231/RX130でも)
    ・GNURXの場合もワーニングレベルを上げる(以前の投稿で意図的にワーニング無しにしたのは失策でした)
    ・GNURXの場合に出るワーニングで厄介なこと無く対処出来るものはワーニング解消コードを記述する
    ・別スレッドでGNURXでsprintf/snprintfのフォーマット文字列ワーニングがint32_t/uint32_tで出たので細工する
    ・別スレッドでGNURXでsprintf/snprintfを使うとスタックサイズがギリギリなことに気付いたので増やす
    ・xxx_main.cpp版だけでなくxxx_main.c版も追加する
    ・CS+プロジェクトにはe2 studio用.project/.cproject等も同梱する
    ・GNURXプロジェクトでもCS+プロジェクトと同様にDefaultBuildフォルダを使う
    ・RXスマートコンフィグレータをv2.1.0に変える
    ・e2 studio/GNURXをv7.40/2019q2(4.8.4.201902)に変える(CS+/CC-RXはV8.01/V2.03のまま同じ)

    以下、プロジェクトのファイル一式です。(zipファイル(CS+用はe2 studio用.project/.cproject等を同梱)はe2 studioに直接インポート可能です。) [追記] RX130版に別スレッド「RX130のFITのBSPで必ずサブクロック発振安定時間待ち(always wait sub-clock oscillation stabilization time ≒ 1.3sec)しているのは妥当なのかな?」の修正内容を反映させました。

    tb_rx65n_scfg_ccrx_c_csplus_20190506.zip
    tb_rx65n_scfg_ccrx_cpp_csplus_20190506.zip
    tb_rx65n_scfg_gnurx_c_e2v740_20190507.zip
    tb_rx65n_scfg_gnurx_cpp_e2v740_20190507.zip
    tb_rx231_scfg_ccrx_c_csplus_20190508.zip
    tb_rx231_scfg_ccrx_cpp_csplus_20190508.zip
    tb_rx231_scfg_gnurx_c_e2v740_20190507.zip
    tb_rx231_scfg_gnurx_cpp_e2v740_20190507.zip
    tb_rx130_scfg_ccrx_c_csplus_20190508.zip
    tb_rx130_scfg_ccrx_cpp_csplus_20190508.zip
    tb_rx130_scfg_gnurx_c_e2v740_20190507.zip
    tb_rx130_scfg_gnurx_cpp_e2v740_20190507.zip
    tb_rx130_scfg_ccrx_c_csplus_20190518.zip
    tb_rx130_scfg_ccrx_cpp_csplus_20190518.zip
    tb_rx130_scfg_gnurx_c_e2v740_20190518.zip
    tb_rx130_scfg_gnurx_cpp_e2v740_20190518.zip

    [追記] 2019/10/11 13:00

    ご免なさい。実は当方特有の事情でオンボードエミュレータが使えなくて、プロジェクトのデバッグツールの選択が、CS+のデフォルトのシミュレータになっている、ことに気が回っていませんでした。CS+のプロジェクトのデバッグツールの選択をE2Liteに切り替えて下さい。その後、デバッグツールのプロパティの「接続用設定」タブのクロックの設定をそれぞれ以下に設定して下さい。すみません。(あと、e2 studioの場合は.launchファイルが必要ですね。これも付けるようにしないと、ですね。)

    TB-RX65N    120MHz
    TB-RX231     54MHz
    TB-RX130     32MHz

    関連スレッド

    RX231ターゲットボードを動かすには
    japan.renesasrulz.com/cafe_rene/f/forum5/5997/rx231

    [ここまで追記]

    以下、画面コピーです。

    GNURXの場合にstdio.h等をインクルードするとstdio.h等の中の__strict(C99予約語)がC++ソースでコンパイルエラーに


    GNURXの場合はrx-elf-size.exeを実行してtext/data/bssのセクションサイズを表示


    e2 studio(GNURX/CC-RX)の場合はツールチェイン未設定ならFAQのURLを表示(コードページが932以外ならen-supportを)
    https://ja-support.renesas.com/knowledgeBase/18367361
    https://ja-support.renesas.com/knowledgeBase/17797630


    CS+の画面コピー:xxx_main.cpp (CC-RX) の場合


    CS+の画面コピー:xxx_main.c (CC-RX) の場合


    e2 studioの画面コピー:xxx_main.cpp+GNURX の場合





    e2 studioの画面コピー:xxx_main.c+GNURX の場合




    e2 studioの画面コピー:xxx_main.cpp+CC-RX の場合


    e2 studioの画面コピー:xxx_main.c+CC-RX の場合

  • こんにちは。NoMaYです。#前の投稿の続きです

    RXスマートコンフィグレータの設定は、以下の画面コピーの通り、[コード生成設定]→[生成条件]をデフォルトの[コンポーネントが存在する場合は何もしない]にしてコード生成して下さい。理由は、ワーニングを解消する為にr_bsp_config.hに記述した以下のコードが消失しないようにする為です。(別スレッドでのRXスマートコンフィグレータ生成コード不具合に対処するコードとは別ものです。)



    CC-RX  RX65N/RX231  r_bsp_config.h

    /* Workaround for compiler warnings when warning level is set to high */
    #define BSP_MCU_CPU_VERSION                         (2)

    GNURX  RX65N/RX231  r_bsp_config.h

    /* Workaround for compiler warnings when warning level is set to high */
    #define BSP_MCU_CPU_VERSION                         (2)

    /* Workaround for compiler warnings when warning level is set to high */
    void excep_supervisor_inst_isr(void) __attribute__ ((interrupt));
    void excep_access_isr(void) __attribute__ ((interrupt));
    void excep_undefined_inst_isr(void) __attribute__ ((interrupt));
    void excep_floating_point_isr(void) __attribute__ ((interrupt));
    void non_maskable_isr(void) __attribute__ ((interrupt));

    /* Workaround for compiler warnings when warning level is set to high */
    void r_undefined_exception(void);
    /*uint32_t*/ unsigned long get_iclk_freq_hz(void);
    /*uint32_t*/ unsigned long charget(void);
    void charput(/*uint32_t*/ unsigned long output_char);

    GNURX  RX130  r_bsp_config.h

    /* Workaround for compiler warnings when warning level is set to high */
    void excep_supervisor_inst_isr(void) __attribute__ ((interrupt));
    void excep_access_isr(void) __attribute__ ((interrupt));
    void excep_undefined_inst_isr(void) __attribute__ ((interrupt));
    void excep_floating_point_isr(void) __attribute__ ((interrupt));
    void non_maskable_isr(void) __attribute__ ((interrupt));

    /* Workaround for compiler warnings when warning level is set to high */
    void r_undefined_exception(void);
    /*uint32_t*/ unsigned long get_iclk_freq_hz(void);
    /*uint32_t*/ unsigned long charget(void);
    void charput(/*uint32_t*/ unsigned long output_char);

    なお、ワーニング解消コードとしては他にも以下のコードを記述していますが、Start user code ~ End user codeの区間に記述していますので、これらに関してはRXスマートコンフィグレータの設定が[既存のコンポーネントに上書きする]になっていても消失しません。

    CC-RX/GNURX  RX65N/RX231/RX130  r_cg_macrodriver.h

    /* Start user code for function. Do not edit comment generated here */

    ...略...

    /* Workaround for compiler warnings when warning level is set to high */
    void R_CGC_Create_UserInit(void);

    /* End user code. Do not edit comment generated here */

    CC-RX/GNURX  RX65N/RX231/RX130  Pin.c

    /* Start user code for include. Do not edit comment generated here */
    #include "Pin.h"
    /* End user code. Do not edit comment generated here */

    ちなみに、R_CGC_Create_UserInit関数に関しては、一応、以下の宣言があることにはあるのですが、CC-RXもGNURXも、ワーニングレベルを上げると、この宣言自体でワーニングが出てしまいます。

    CC-RX/GNURX  RX65N/RX231/RX130  r_smc_cgc.h

    void R_CGC_Create_UserInit();

    CC-RXの場合

    M0523076: Function declarations should have prototype

    GNURXの場合

    function declaration isn't a prototype [-Wstrict-prototypes]

    また、GNURXの場合は、int32_t/uint32_tの定義に以下の細工をしました。(またも愚策か?) 理由は、別スレッドでGNURXでsprintf/snprintfのフォーマット文字列ワーニングがint32_t/uint32_tで出た為です。(今回のプロジェクトではsprintf/snprintfを使っていませんが。) 例えば、%dをこれらの型の変数に適用するとフォーマット文字列ワーニングが出るのですが、適用するフォーマット文字列が%ldならばワーニングは出ない、というものでした。CC-RXの場合は、(そもそもそういうチェックをしていないので)%dでワーニングが出ることは無く、(ソース共有化の為にGNURXに合わせようとして)%ldとすることにはどうも違和感があります。そこで以下の細工をしてみました。(ただし、もともと%ldにしてあるソースですと、逆に、これがフォーマット文字列ワーニングを誘発してしまいますが、、、)

    GNURX(/CC-RX)  RX65N/RX231/RX130  RenesasRX.h/StdAfx.h

    #if defined(__GNUC__)

    /* A workaround for unexpected warnings because -Wformat option treats int32_t/uint32_t
     * not as signed int/unsigned int but as signed long/unsigned long.
     */

    #ifdef __INT32_TYPE__
    #undef __INT32_TYPE__
    #define __INT32_TYPE__ signed int
    #endif

    #ifdef __UINT32_TYPE__
    #undef __UINT32_TYPE__
    #define __UINT32_TYPE__ unsigned int
    #endif

    #endif

    あと、GNURXの場合は、リンカスクリプトでスタックサイズを以下のように増やしています。理由は、別スレッドでGNURXでsprintf/snprintfを使うとスタックサイズがギリギリなことに気付いた為です。(今回のプロジェクトではsprintf/snprintfを使っていませんが。) スタックサイズはCC-RXの場合のスタックサイズに合わせました。

    以前の版  GNURX  RX65N/RX231/RX130  linker_script.ld

        } > ROM
        .ustack 0x200: AT(0x200)
        {
            _ustack = .;
        } > RAM
        .istack 0x100: AT(0x100)
        {
            _istack = .;
        } > RAM
        .data 0x204: AT(_mdata)
        {

    今回の版  GNURX  RX65N/RX231/RX130  linker_script.ld

        } > ROM
        .ustack 0x4: AT(0x4)
        {
            . += 0x1000;
            _ustack = .;
        } > RAM
        .istack 0x1004: AT(0x1004)
        {
            . += 0x400;
            _istack = .;
        } > RAM
        .data 0x1404: AT(_mdata)
        {

    そして、以前に投稿したプロジェクトは、BSPモジュールのヘッダファイルの事情でマクロ定義で無理矢理なこと(そもそもC++ソースでありながら__STDC__を定義すること(且つ値を199901Lとすること))をやっていたのが裏目に出てしまい(これは愚策でした)、GNURXの場合にstdio.h等をインクルードするとstdio.h等の中の__strict(C99予約語)がC++ソースでコンパイルエラーを誘発してしまいますが、今回投稿したプロジェクトでは、BSPモジュールのr_typedefs.hというヘッダファイルの代替版を作って使うようにしました。(CC-RXの場合も同じやり方に合わせました。) r_typedefs.hは、C99モード以前のCの場合にBSPモジュールでインクルードされますが、本来BSPモジュール(とRXスマートコンフィグレータ)で想定されていないC++モードでもインクルードされます。ですが、その中にC++モードでは都合の悪い記述が含まれていますので、それらの記述をC++モードでは除外するようなやり方(以下の青文字箇所)にしました。

    オリジナル版  GNURX/CC-RX  RX65N/RX231/RX130  r_typedefs.h

    /******************************************************************************
    Macro definitions
    ******************************************************************************/
    #define bool _Bool
    #define false 0
    #define true 1

    /******************************************************************************
    Typedef definitions
    ******************************************************************************/
    typedef signed char int8_t;
    typedef unsigned char uint8_t;
    typedef signed short int16_t;
    typedef unsigned short uint16_t;
    typedef signed long int32_t;
    typedef unsigned long uint32_t;
    typedef signed long long int64_t;
    typedef unsigned long long uint64_t;

    代替版  GNURX/CC-RX  RX65N/RX231/RX130  r_typedefs.h

    #ifndef R_TYPEDEFS_H
    #define R_TYPEDEFS_H

    #if defined(__CCRX__)

    #ifndef __cplusplus
    #define bool _Bool
    #define false 0
    #define true 1
    #define NULL 0
    #endif

    typedef signed char int8_t;
    typedef unsigned char uint8_t;
    typedef signed short int16_t;
    typedef unsigned short uint16_t;
    typedef signed long int32_t;
    typedef unsigned long uint32_t;
    typedef signed long long int64_t;
    typedef unsigned long long uint64_t;
    #ifndef __cplusplus
    typedef unsigned int _Bool;
    #endif
    typedef unsigned long size_t;

    #elif defined(__GNUC__)

    #include <stdint.h>
    #ifndef __cplusplus
    #include <stdbool.h>
    #endif
    #include <stddef.h>

    #endif

    #endif

     

  • こんにちは。NoMaYです。

    RX72Nが広報された時から気になっていたことなのですけれど、RX72NのTBボードは出さないのかな?

    Target Board for RX family 製品ページ ← 現状は、RX65N、RX23W、RX231、RX130、まで。
    www.renesas.com/ja-jp/products/software-tools/boards-and-kits/cpu-mpu-boards/rx-family-target-board.html
     

  • こんにちは。NoMaYです。

    RX671はTBボードありですね。(いつの間にか製品ページが出来てましたね。)

    RX671
    高速リアルタイム制御と非接触HMIを実現する32ビットマイクロコントローラ
    www.renesas.com/jp/ja/products/microcontrollers-microprocessors/rx-32-bit-performance-efficiency-mcus/rx671-32-bit-microcontrollers-fast-real-time-control-and-contactless-hmi

    4.5mm x 4.5mmの64ピンTFBGAを含む豊富なパッケージラインナップ全てに2MBフラッシュメモリと384KB SRAMを搭載

    RL78マイコンとはフラッシュメモリ容量が2桁ほど違う世界になってますね、、、

    Target Board for RX671
    www.renesas.com/jp/ja/products/microcontrollers-microprocessors/rx-32-bit-performance-efficiency-mcus/rtk5rx6710c00000bj-target-board-rx671
     

  • こんにちは。NoMaYです。

    TB-RX671はPmod タイプ6Aのコネクタが標準実装ですね。(基板が前3部作とは改版されていますね。)

    TB-RX671 ユーザーズマニュアル
    www.renesas.com/jp/ja/document/mat/target-board-rx671-users-manual-rev100

    TB-RX671 回路図
    www.renesas.com/jp/ja/document/sch/target-board-rx671-schematic
     

  • こんにちは、尭です。

    Target Board for RX671をいじりながらマニュアル(Rev 1.00)を見ていて気が付いたのですが、メモリマップに書いてある内蔵RAMのアドレスが誤っているように見えます。
    メモリマップを見ると内蔵RAMは0x00000000-0x0003FFFFとなっていますがこれだと256kByteです。下の表は0x00000000-0x0005FFFFで384kByteになっていますし、RAMの章やCS+の定義データも同様っぽいのでこちらが正解で良さそうです。

    そのうち正誤表が出るなり改版されるとは思いますが・・・

  • こんにちは。NoMaYです。

    RX140ですが、広報されていましたね。このマイコン用のTB-RX140ですが、これまでのRX-TBと比べてROMサイズが64Kと極端に小さいですよね、、、現状、量産されているものがこのサイズのものだけということなのでしょうからそう成らざるを得ないのでしょうけれども、さすがにTBボードでは将来になってROMサイズが256Kのものが量産されるようになっても置き換え品は出ないのでしょうね、、、

    #突っ込みどころとしては、48MHz動作のRXv2コアって、その領域はRX200ではないのん?、といったところでしょうか、、、

    家電、産業など幅広い用途に向けて、従来比で約2倍の性能の向上と30%以上の低消費電力化を実現した32ビットマイコン「RX140」を発売
    ~最新のタッチセンシングユニットを搭載し、ノイズ耐性やセンシング精度が向上~
    www.renesas.com/jp/ja/about/press-room/renesas-launches-rx140-mcus-2x-performance-and-over-30-percent-better-power-efficiency-home-and

    TB-RX140 (これも製品写真を見るとPmod タイプ6Aのコネクタが標準実装ですね。)
    www.renesas.com/jp/ja/products/microcontrollers-microprocessors/rx-32-bit-performance-efficiency-mcus/rtk5rx1400c00000bj-target-board-rx140

    [追記]

    TB-RX140の回路図を見ると、TB-RX23WやTB-RX671でPmod Type 6AコネクタのGPIOピンに端子兼用機能として丁度割り付いていたUARTのTxDとRxDが無くなってしまいましたね、、、

    他方、サンプルプログラムのLED点灯制御プログラムですが、rcpcファイルが入っていますね、、、(ただ、TB-RX140だけでなくTB-RX671もそうなのですが、trashフォルダはリリースzipファイルから除いておいた方が良いのではないかと思いました、、、)

  • こんばんは。尭です。

    RXv2コアになったにもかかわらず消費電流がRX130比で4割減ですね。
    プロセスルールが新しくなったのかな。
    RX140 58uA/MHz
    RX130 96uA/MHz
    RL78/G23 44uA/MHz
    RL78/G13A 47uA/MHz
    RL78/G13 66uA/MHz
    スーパースカラ&FPU付きでこの消費電流は大変優秀ではないでしょうか。
    ただ16kByteしかないRAMでその高い計算能力を活かすのは結構難しそうです。
    マルツを見るとRX23Tより安いようなのでモータの制御に使うとか・・・?