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にもおそらく共通する話であろうかと思う。

Parents
  • こんにちは。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.
        }
    }

     

Reply
  • こんにちは。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.
        }
    }

     

Children
  • こんにちは。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)で呼び続ける感じなっていますね。このあたりもコード履歴を追うなどして確認して適切な形に直します。

    以上です