”かふぇルネ“はルネサス製品に関してユーザ同士が自由に会話をするツールであり、回答者はルネサス社内外の方たちとなります。ルネサス製品やソリューションに関して正式な回答をご希望の場合は、ルネサス技術サポート問合せをご使用ください。

RX SmartConfiguratorで気になった点とか改善する案とか報告してみるスレッド

こんにちは。NoMaYです。

過去にも同じようなスレッドを立てていましたが、CC-RXとGNURXで2つ立てていて、スレッドを使い分けるのも少し不便な気がしましたので、両者を区別せず投稿するスレッドを立ててみました。(e2 studioのプラグイン版もCS+の単体版もいっしょくたです。)

CS+でTB-RX140を使おうとして、単体RXスマートコンフィグレータ V2.10.0では未対応だったことに気付き、アップデートマネージャを起動してみたところ、V2.11.0がリリースされていましたのでアップデートしました。V2.11.0を触っていて気付いたのですが、CGコンポーネントのコードを再生成させた時、変更の無いソースファイルは再生成されなくなり、ファイルのタイムスタンプが変わらないようになっていました。

この挙動が設計意図なのか何かの拍子にそうなってしまっただけなのかは分からないのですが、再コンパイルする時間の短縮になるかも!と思ったのも束の間、以下の2つのファイルが変更が無くても毎回再生成されるので、思惑通りにはならないことに気付きました、、、以下の2つのファイルに関しても同様に変更の無い場合にはファイルを再生成しないように出来ないものでしょうか、、、

(1) platform.h (実は何故このファイルがコード再生成時に毎回タイプスタンプが更新されるのか不思議です)
(2) r_bsp_config.h (RX140の場合このファイルだけですがRX671とかの場合はr_bsp_interrupt_config.hもかもです)

[余談]

以下のニュース記事を読んでいて以下の解説に気付きました。ルネサスさんの取締役の人たちはソフトウェア開発ツールも含んで話をされていたのかな、、、まあ、過去形では無くて永遠に現在進行形であるべきテーマですね。(もっとも、Automotive部門の人の話だったようですけれども、、、)

新しい方向性を見出して走り出したルネサス、Progress Updateから見えたもの
2021/10/01 16:37 著者:大原雄介
news.mynavi.jp/article/20211001-1988188/

さてそのIIBUの大きな柱がMCUであることは論を待たないが、2025年までに大幅にシェアを引き上げる、としている(Photo19)。
。。。
これについては、後のAutomotive向けの質疑応答の中で出てきた話ではあるのだが、そもそもルネサスのMCUが使われなかったのは、1つは「良いかもしれないけど使いにくい」という部分があり、こうした部分を徹底的に改善した事で顧客に使って貰いやすくなったという回答があり、これはIIBUにもおそらく共通する話であろうかと思う。

  • NoMaYさん

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

    こんにちは。本件社内の要件管理ツールに入れて開発チームに連絡しておきました。進展がありましたらまた書き込みます。

    [追記] 本件=FreeRTOS with IoT librariesプロジェクトのvendors/renesas/amazon_freertos_common/freertos_start.cのProcessing_Before_Start_Kernel()の件です。

    以上です

  • NoMaYさん

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

    フラッシュFITモジュールのデータサイズ1~1024 or 0~65535の件も、本件社内の要件管理ツールに入れて開発チームに連絡しておきました。進展がありましたらまた書き込みます。

    以上です

  • NoMaYさん

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

    データサイズ1~1024 or 0~65535の件開発チームから見解入手しました。

    ----

    ご指摘いただきありがとうございます。
    
    本件、コンフィグレーションファイルのコメントの誤記となります。
    ドキュメントに記載の範囲(1~1024)でご使用ください。
    誤記は次期バージョンで修正いたします。

    以上です
  • シェルティさん、NoMaYさん

    ありがとうございます。
    これからもよろしくお願いいたします。

  • こんにちは。NoMaYです。

    先日投稿したFreeRTOS with IoT librariesプロジェクトのProcessing_Before_Start_Kernel()の件で、もうひとつ気になるのは、些細なことですが、かつ、RXスマートコンフィグレータからは完全に脱線しますが、ソースコードの以下のwhileループは、くだけた表現をすれが、これはちょっとないわ~、みたいな気がするのです。歴史的事情、もしくは、うっかり適切な終了APIを呼ばずにタスクからリターンしてしまった場合へのフールプルーフかも知れませんけれども、whileループでタスクを無限回実行するのは、かなり気持ち悪い、と思うのです。(でも、個人の感想、ではありますが。)

    現状:

    aws_202107_101_e2v202204\application_code\main.c (トップのフォルダ名は当方のプロジェクトフォルダ)

    /**
     * @brief The application entry point from a power on reset is PowerON_Reset_PC() ← このコメントも間違ってますよね?
     * in resetprg.c.
     */
    void main( void )
    {
        while(1)
        {
            //vTaskDelay(10000);
            main_task();
        }
    }

     
    (参考) aws_202107_101_e2v202204\application_code\renesas_code\main_task.c (トップのフォルダ名は当方のプロジェクトフォルダ)

    void main_task(void)
    {
        uint32_t bank_info;

        /* enable MCU pins */
        R_Pins_Create();


        /* flash initialization */
        R_FLASH_Open();
    //    R_FLASH_Control(FLASH_CMD_BANK_GET, &bank_info);
        R_SFD_Open();

        /* flash access semaphore creation */
        xSemaphoreFlashAccess = xSemaphoreCreateMutex();
        xSemaphoreGive(xSemaphoreFlashAccess);

    //    task_info.main_task_handle = xTaskGetCurrentTaskHandle();


        /* main loop */
        while(1)
        {
            vTaskDelay(10000);
        }
    }

     

    自然なのは以下なのではないかなぁと思うのですけれども:

    void main( void )
    {
        main_task();
        while(1)
        {
            vTaskDelay(10000); //This is a fool-proof loop for returing from main_task() accidentaly.
        }
    }

     

  • こんにちは。NoMaYです。

    またもうひとつ気になるのは、今度はRXスマートコンフィグレータとも関係しますけれども、以下でR_Pins_Create()を呼び出しているのは適切なのでしょうか?R_Pins_Create()はCGコンポーネント向けの端子初期化関数、かつ、使途不明(以前に以下のスレッドで話題にしたことがあります)なのですが、このプロジェクトではCGコンポーネントを一切使用していませんので(厳密にはCGコンポーネント所属のR_CGC_XXX()が呼ばれていますが)、どうも奇妙な気がするのです。

    R_BSP_Pins_Create()について ← R_Pins_Create()のタイプミスでしたとのことです
    japan.renesasrulz.com/cafe_rene/f/forum5/8093/r_bsp_pins_create/41990#41990

    aws_202107_101_e2v202204\application_code\renesas_code\main_task.c (トップのフォルダ名は当方のプロジェクトフォルダ)

    void main_task(void)
    {
        uint32_t bank_info;

        /* enable MCU pins */
        R_Pins_Create();


        /* flash initialization */
        R_FLASH_Open();
    //    R_FLASH_Control(FLASH_CMD_BANK_GET, &bank_info);
        R_SFD_Open();

        /* flash access semaphore creation */
        xSemaphoreFlashAccess = xSemaphoreCreateMutex();
        xSemaphoreGive(xSemaphoreFlashAccess);

    //    task_info.main_task_handle = xTaskGetCurrentTaskHandle();


        /* main loop */
        while(1)
        {
            vTaskDelay(10000);
        }
    }

     
    [関連リンク]

    スマート・コンフィグレータ ユーザーズマニュアル RX API リファレンス編
    R20UT4360JJ0106 Rev.1.06 Pages 533 2022.02.16
    www.renesas.com/jp/ja/document/mat/smart-configurator-users-manual-rx-api-reference
    31P



  • NoMaYさん

    シェルティです。こんにちは。

    ご指摘感謝です。ちょうどFreeRTOSの初期化シーケンスを洗いなおしていたところです。ハードウェアの初期化はスケジューラタスクの起動時に呼び出されるvApplicationDaemonTaskStartupHook()で行うべきと考えています。AWS社とも協議済です。少なくともフラッシュの初期化はvApplicationDaemonTaskStartupHook()に移動します。ピン設定の呼び出しも見直します。

    https://github.com/aws/amazon-freertos/blob/d16aa3b493203ea1b973cf6cf82a290be4b0a52f/vendors/renesas/boards/rx65n-rsk/aws_demos/application_code/main.c#L133

    あと、シェルティが作った最初のコードはNoMaYさんご提示の以下のような形にした記憶があるのですが、いつのまにかmain_task()をwhile(1)で呼び続ける感じなっていますね。このあたりもコード履歴を追うなどして確認して適切な形に直します。

    以上です

  • こんにちは。NoMaYです。

    RXスマートコンフィグレータから少し脱線しますが、e2 studioでGitHubからインポートしたamazon-freertos-202107.00-rx-1.0.1のRSK-RX65N 2MB aws_demosプロジェクトで、以下の画面コピーの赤枠のソースでRX65N以外のターゲット/フラッシュタイプのソースまでコンパイル/リンクしようとしているのは何かおかしいように思うのです。.projectファイルを見ると、わざわざリンクを作成してあるのですが、もしかしてドラッグ&ドロップ操作でガッと作ったまま不要なリンクを削除し忘れていた、といったことなどあったりとかしませんでしたでしょうか?





    [追記]

    e2 studioでGitHubからインポートしたamazon-freertos-202107.00-rx-1.0.1のRSK-RX65N 2MB aws_demosプロジェクト、というのは以下の画面コピーのもののことです。




     

  • こんにちは、すばるんです。

    不具合ではありませんが、タイマの設定について少し気になる点があった為投稿させて頂きます。

    MTUタイマとTPUタイマでそれぞれカウンタクロックの選択をしていたのですが、

    PCLK「A」を使用しているのか、PCLK「B」を使用しているのか分からない状態となっています。

    各タイマでどのクロックを使用しているか、データシートを見ればすぐ分かるお話ではありますが

    画面上でも確認できる状態となっていると良いのでは?と思いました。

    以下画面キャプチャです。(Rx230使用時)

    ・MTU (PCLKAを使用)

    ・TPU (PCLKBを使用)

    ・クロック設定

  • こんにちは。NoMaYです。

    今日、RX72Mの件でr_bsp_config.hを見る機会があって、以前のAmazon FreeRTOS Renesas RX OTA e2 studioプロジェクトのスレッドで疑問を感じていた件の理由が分かったような気がしました。最近のBSPモジュールでは、以下の定義が数値定数⇒文字列定数へ変更されているのですね。(それはそれとして、あと、ちょっと気になるのは、クロック系の定義が追加されているのだけれども、RXスマートコンフィグレータのバージョンが古いものであっても大丈夫だろうか?クロック系はガチのGUI設定画面になっているけれども、そのせいでもろもろハードコーディングされていそうで、バージョンが古いRXスマートコンフィグレータを使ったら適切に処理されずに初期値のままとなってしまうことは無いのだろうか、、、)

    r_bsp_config.h (RX72MのBSPモジュール向けのもの)

    *         : 30.11.2021 2.00     Added the following macro definitions.
    *                                - BSP_CFG_MAIN_CLOCK_OSCILLATE_ENABLE
    *                                - BSP_CFG_SUB_CLOCK_OSCILLATE_ENABLE
    *                                - BSP_CFG_HOCO_OSCILLATE_ENABLE
    *                                - BSP_CFG_LOCO_OSCILLATE_ENABLE
    *                                - BSP_CFG_IWDT_CLOCK_OSCILLATE_ENABLE
    *                                - BSP_CFG_CONFIGURATOR_VERSION
    *                                - BSP_CFG_CPLUSPLUS
    *                                - BSP_CFG_SERIAL_PROGRAMMER_CONECT_ENABLE
    *                               Changed initial value of the following macro definitions.
    *                                - BSP_CFG_MCU_PART_GROUP
    *                                - BSP_CFG_MCU_PART_SERIES

    途中省略

    /* Group name.
       Character(s) = Description
       2M           = RX72M Group
    */
    #define BSP_CFG_MCU_PART_GROUP          "RX72M" /* Generated value. Do not edit this manually */

    /* Series name.
       Character(s) = Description
       57           = RX700 Series
    */
    #define BSP_CFG_MCU_PART_SERIES         "RX700" /* Generated value. Do not edit this manually */

     
    壊れてしまったAmazon FreeRTOS Renesas RX OTA e2 studioプロジェクトを直してみるスレッド
    japan.renesasrulz.com/cafe_rene/f/forum21/8192/amazon-freertos-renesas-rx-ota-e2-studio/42321#42321

    一体、どこで、数値定数が文字列定数に置き換わる、なんてことが起きたのだろう、、、


  • こんにちは。NoMaYです。

    CGコンポーネントの生成ソースの割り込み関数関連のユーザ記述部の追加要望です。以下の2点を念頭においての要望です。

    (1) 割り込みエントリ関数の最初の部分と最後の部分でμITRON(NORTi等)対応のコードを入れたい (※)
    (2) 割り込み関数を全体的に書き換えたい(例えば通信系CGコンポーネントでのリングバッファ対応とかスレーブモード処理とか)

    ※ ただし、割り込みエントリ関数内でauto変数を使ってはいけない、といった制約との兼ね合いで単純にコードは入れられません

    要望する箇所は以下のように割り込みエントリ関数を間に挟んでその上と下です。(CC-RX/GNURX/ICCRXで共通です。)

    例) 赤文字の部分です。(以下はRSPIの例ですが他の生成ソースに関しても同様です。ただし、中身が丸ごとユーザ記述部となるような割り込みエントリ関数では、上と下に無くても構わないです。)

    /******************************************************************************
    * Function Name: r_Config_RSPI0_transmit_interrupt
    * Description  : This function is SPTI0 interrupt service routine
    * Arguments    : None
    * Return Value : None
    ******************************************************************************/

    #if FAST_INTERRUPT_VECTOR == VECT_RSPI0_SPTI0
    #pragma interrupt r_Config_RSPI0_transmit_interrupt(vect=VECT(RSPI0,SPTI0),fint)
    #else
    #pragma interrupt r_Config_RSPI0_transmit_interrupt(vect=VECT(RSPI0,SPTI0))
    #endif

    /* Start user code for patching the interrupt function. Do not edit comment generated here */
    /* End user code. Do not edit comment generated here */

    static void r_Config_RSPI0_transmit_interrupt(void)
    {
        uint16_t frame_cnt;

        for (frame_cnt = 0U; frame_cnt < (_00_RSPI_FRAMES_1 + 1U); frame_cnt++)
        {
            if (g_rspi0_tx_count > 0U)
            {
                /* Write data for transmission */
                RSPI0.SPDR.WORD.H = (*(uint16_t*)gp_rspi0_tx_address);
                gp_rspi0_tx_address++;
                g_rspi0_tx_count--;
            }
            else
            {
                /* Disable transmit interrupt */
                RSPI0.SPCR.BIT.SPTIE = 0U;
                break;
            }
        }
    }

    /* Start user code for patching the interrupt function. Do not edit comment generated here */
    /* End user code. Do not edit comment generated here */

    /******************************************************************************
    * Function Name: r_Config_RSPI0_receive_interrupt
    * Description  : This function is SPRI0 interrupt service routine
    * Arguments    : None
    * Return Value : None
    ******************************************************************************/

    #if FAST_INTERRUPT_VECTOR == VECT_RSPI0_SPRI0
    #pragma interrupt r_Config_RSPI0_receive_interrupt(vect=VECT(RSPI0,SPRI0),fint)
    #else
    #pragma interrupt r_Config_RSPI0_receive_interrupt(vect=VECT(RSPI0,SPRI0))
    #endif

    /* Start user code for patching the interrupt function. Do not edit comment generated here */
    /* End user code. Do not edit comment generated here */

    static void r_Config_RSPI0_receive_interrupt(void)
    {
        uint16_t frame_cnt;
        
        for (frame_cnt = 0U; frame_cnt < (_00_RSPI_FRAMES_1 + 1U); frame_cnt++)
        {
            if (g_rspi0_rx_length > g_rspi0_rx_count)
            {
                *(uint16_t *)gp_rspi0_rx_address = RSPI0.SPDR.WORD.H;
                gp_rspi0_rx_address++;
                g_rspi0_rx_count++;

                if (g_rspi0_rx_length == g_rspi0_rx_count)
                {
                    /* Disable receive interrupt */
                    RSPI0.SPCR.BIT.SPRIE = 0U;
                    break;
                }
            }
        }
    }

    /* Start user code for patching the interrupt function. Do not edit comment generated here */
    /* End user code. Do not edit comment generated here */

     
    以下、運用例です。

    (1) 割り込みエントリ関数の最初の部分と最後の部分でμITRON(NORTi等)対応のコードを入れたい

    #if FAST_INTERRUPT_VECTOR == VECT_RSPI0_SPTI0
    #pragma interrupt r_Config_RSPI0_transmit_interrupt(vect=VECT(RSPI0,SPTI0),fint)
    #else
    #pragma interrupt r_Config_RSPI0_transmit_interrupt(vect=VECT(RSPI0,SPTI0))
    #endif

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

    #pragma nolinline _r_Config_RSPI0_transmit_interrupt
    static void _r_Config_RSPI0_transmit_interrupt(void);

    static void r_Config_RSPI0_transmit_interrupt(void)
    {
        NORTiの割り込み関数(入口用)を呼ぶ
        _r_Config_RSPI0_transmit_interrupt();
        NORTiの割り込み関数(出口用)を呼ぶ
    }

    #define r_Config_RSPI0_transmit_interrupt _r_Config_RSPI0_transmit_interrupt

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

    static void r_Config_RSPI0_transmit_interrupt(void)
    {
        略
    }

    /* Start user code for patching the interrupt function. Do not edit comment generated here */
    /* End user code. Do not edit comment generated here */

    #if FAST_INTERRUPT_VECTOR == VECT_RSPI0_SPRI0
    #pragma interrupt r_Config_RSPI0_receive_interrupt(vect=VECT(RSPI0,SPRI0),fint)
    #else
    #pragma interrupt r_Config_RSPI0_receive_interrupt(vect=VECT(RSPI0,SPRI0))
    #endif

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

    #pragma nolinline _r_Config_RSPI0_receive_interrupt
    static void _r_Config_RSPI0_receive_interrupt(void);

    static void r_Config_RSPI0_receive_interrupt(void)
    {
        NORTiの割り込み関数(入口用)を呼ぶ
        _r_Config_RSPI0_receive_interrupt();
        NORTiの割り込み関数(出口用)を呼ぶ
    }

    #define r_Config_RSPI0_receive_interrupt _r_Config_RSPI0_receive_interrupt

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

    static void r_Config_RSPI0_receive_interrupt(void)
    {
        略
    }

    /* Start user code for patching the interrupt function. Do not edit comment generated here */
    /* End user code. Do not edit comment generated here */

     
    (2) 割り込み関数を全体的に書き換えたい(例えば通信系CGコンポーネントでのリングバッファ対応とかスレーブモード処理とか)

    #if FAST_INTERRUPT_VECTOR == VECT_RSPI0_SPTI0
    #pragma interrupt r_Config_RSPI0_transmit_interrupt(vect=VECT(RSPI0,SPTI0),fint)
    #else
    #pragma interrupt r_Config_RSPI0_transmit_interrupt(vect=VECT(RSPI0,SPTI0))
    #endif

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

    #if 0

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

    static void r_Config_RSPI0_transmit_interrupt(void)
    {
        略
    }

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

    #endif /* #if 0 */

    static void r_Config_RSPI0_transmit_interrupt(void)
    {
        自前の修正版(or全面変更版)割り込み処理
    }

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

    #if FAST_INTERRUPT_VECTOR == VECT_RSPI0_SPRI0
    #pragma interrupt r_Config_RSPI0_receive_interrupt(vect=VECT(RSPI0,SPRI0),fint)
    #else
    #pragma interrupt r_Config_RSPI0_receive_interrupt(vect=VECT(RSPI0,SPRI0))
    #endif

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

    #if 0

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

    static void r_Config_RSPI0_receive_interrupt(void)
    {
        略
    }

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

    #endif /* #if 0 */

    static void r_Config_RSPI0_receive_interrupt(void)
    {
        自前の修正版(or全面変更版)割り込み処理
    }

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

     
    [関連リンク]

    スマートコンフィグレータの自動生成をカスタマイズしたい
    japan.renesasrulz.com/cafe_rene/f/forum5/8248/thread

    スマート・コンフィグレータ SCIの割り込み
    japan.renesasrulz.com/cafe_rene/f/forum21/5875/sci

    シリアル受信の割り込み関数にユーザコード領域があれば...
    japan.renesasrulz.com/cafe_rene/f/forum18/6369/thread