e2 studio v7.5.0でFreeRTOS+SCFGプロジェクトではRTOS Objectコンポーネントというものは使えないのかな

こんにちは。NoMaYです。

今首を傾げているのですが、以下のドキュメントによると、e2 studio v7.5.0ではAmazon FreeRTOSプロジェクトに於いてスマートコンフィグレータでRTOS Objectコンポーネントというものが使用出来る/存在するらしいのですが、これは単なるFreeRTOSプロジェクトでは使用出来ない/存在しないものなのでしょうか?(スマートコンフィグレータウィンドウの、コンポーネントタブ上に表示されない&コンポーネント追加ダイアロにも表示されない、ので、そうなのかな、とは思っているのですが、Amazon FreeRTOSプロジェクトとFreeRTOSプロジェクトで、このような部分で違っているのが意外でしたので、、、)

e2 studio 7.5.0 Release Note
www.renesas.com/jp/ja/doc/products/tool/doc/016/r20ut4556ee0101-e2studio.pdf
Page 17 of 72

New Amazon FreeRTOS Configuration user interface provide within e2 studio 7.5 featuring:
● Imported FreeRTOS project with pre-loaded FreeRTOS Components (Object, Kernel and Amazon Libraries).

o FreeRTOS Object configuration: allow user to be able to create, configure multiple FreeRTOS objects using GUI (Tasks, Semaphores, Queues, Software Timers, Event Groups, Message Buffers, Stream Buffers)
o Create/Remove FreeRTOS Objects with user friendly UI.



ちなみに、プロジェクトの生成では、コンパイラはCC-RX V3.01、デバイスはR5F565NEDxFP、に設定して試しました。

  • NoMaYさん

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

    >>FreeRTOS v10.3.1のRXマイコンのRTOSDemoプロジェクトがどれだけビルド可能な状態なのか調べてみたら、結構、惨憺たる状態でした、、、

    ご確認ありがとうございます。
    こちら、今後プルリクエスト実行して直していきたいですね。

    >>ふと思ったのですが、ルネサスさんの方でFreeRTOS-kernelのForkだけでなくて、FreeRTOSのForkも作って頂いて、もし私がルネサスさんとAWSの両方にプルリクエストを出したりなんかしたら、後々、リポジトリの管理で面倒なことになったりしそうなものでしょうか?

    問題ないです。NoMaYさんのプルリクエストとかふぇルネでの活動を確認させていただいております。
    コンフリクトしないよう振舞うつもりです。
    FreeRTOSのForkも作ったほうが良さそうですね。
    ものによっては、ルネサスからAWSにプルリクエストを出した方が早いものもあるかもしれませんね。
    そこはかふぇルネで相談させていただければ、と思います。

    それから、以下プルリクエストではNoMaYさんとうちのチームメンバとで会話を進めていただき感謝です。
    github.com/.../89

    ちなみに、以下プルリクエストではうちのチームメンバのリクエストをAWSが正しく本家コードにマージしてくれてます。
    github.com/.../2236

    このあたりのプルリクエストがスムーズに流れるようになってきたので、こちらで気付いたFreeRTOS周りの不整合やメンテ漏れ、新規コード追加をどんどん本家にコミットしていけると考えています。

    以上です
  • こんにちは。NoMaYです。

    実は、FreeRTOS v10.3.1のRXマイコンのRTOSDemoプロジェクトがどれだけビルド可能な状態なのか調べている最中から思っていたことですが、e2 studio v7.8.0でビルド出来るものが殆ど無い、という状況はFreeRTOS.orgの人やAWSの人に起因する訳では無く、e2 studioに起因するものですね。それとは対照的に、EWRXのRTOSDemoプロジェクトは(プロジェクトファイルフォーマットのアップデートを要求されこそすれ)殆ど今でもビルドすることが出来ました。

    また、ビルド出来ない理由のもうひとつの理由はHEWプロジェクトであることなのですが、最近のe2 studio v2020-xxではHEWプロジェクトのコンバータが既に削除されていて、これもe2 studioのスタンスを表しているのかな、という気がします。ただ、実は、現実として、e2 studio v7.8.0のHEWコンバータでは所詮正しくコンバート出来ずにビルドに失敗してしまいますので、そういった現実も関係しているのかな、という気もします。

    他方、CS+はV8.04.00でもHEWプロジェクトをコンバートすることが出来ますし、e2 studioと違いビルドも成功してくれます。なので、RTOSDemoプロジェクトがビルド出来ない件を修正する時はCS+プロジェクトを同梱する方向にするのが今後の為に良いかも知れない、と思い始めています。(ただ、HEWのGNURXプロジェクトは扱えませんけれども。あと、動くかどうかはボードが無く不明ですけれども。)

    ちなみに、上記のCS+での事で思ったのですが、e2 studio v2020-xxでHEWプロジェクトをビルド出来るようにコンバートしたい場合、CS+をインストールして、CS+でHEWプロジェクトを読み込み、CS+でrcpeファイルを出力させ、rcpeファイルをe2 studioで読み込み、e2 studioのネイティブなプロジェクトに変換する手が確実なのでは無いかと思います。とりあえず、ビルドは出来るようになりました。(繰り返しになりますが、HEWのGNURXプロジェクトは扱えませんし、動くかどうかはボードが無く不明です。)

    以下、ビルドチェック結果の一覧です。(なお、マルチコンフィギュレーション型のプロジェクトファイルになっていて、かつ、HEWプロジェクトでたまに遭遇するそもそもビルドエラーになってしまうコンフィグレーションが含まれている、というもののようですので、ちゃんとビルド出来るコンフィグレーションを選択しておかないとビルド出来ませんのでちょっと注意が必要です。)

                                            e2 studio v2020-07      CS+ V8.04       e2 studio v2020-07(CS+経由)
                                            CC-RX                   CC-RX           CC-RX
    RX200_RX210-RSK_Renesas                 N/A(HEW)                Pass            Pass
    RX600_RX62N-RDK_Renesas                 N/A(HEW)                Pass            Pass
    RX600_RX62N-RSK_Renesas                 N/A(HEW)                Pass            Pass
    RX600_RX63N-RDK_Renesas                 N/A(HEW)                Pass            Pass
    RX600_RX630-RSK_Renesas                 N/A(HEW)                Pass            Pass

     

  • こんにちは。NoMaYです。

    あと、FreeRTOS v10.3.1のRXマイコンのRTOSDemoプロジェクトがどれだけビルド可能な状態なのか調べている最中から思っていたことですが、ビルド出来るようにすることはそんなに難しくないと思っていて、とはいえ動作確認をどうしようか?というところで思い悩んでしまうのです。ただ、ビルド出来ない状態でそれを思い悩むのも何だかなぁという気がしてきたので、来週からぽつぽつビルド出来るようにしてみようかと思い始めました。

    HEW時代のもの(と同時代のEWRXのもの)を外すと以下になり、どれもRXスマートコンフィグレータでサポートされているデバイスなので、やっておくのも悪くないかもなぁ、と思い始めましたので。

                                            e2 studio   e2 studio   EWRX        
                                            CC-RX       GNURX       ICCRX       
    RX100_RX113-RSK_GCC_e2studio_IAR        -           Fail        Pass        
    RX100_RX113-RSK_Renesas_e2studio        Fail        -           -           
    RX100-RSK_GCC_e2studio     ← RX111です -           Fail        -           
    RX100-RSK_IAR              ← 同上      -           -           Pass        
    RX100-RSK_Renesas_e2studio ← 同上      Fail(*)     -           -           
    RX200_RX231-RSK_GCC_e2studio_IAR        -           Fail        Fail        
    RX200_RX231-RSK_Renesas_e2studio        Pass        -           -           
    RX600_RX64M_RSK_GCC_e2studio            -           Fail        -           
    RX600_RX64M_RSK_Renesas_e2studio        Fail        -           -           
    RX700_RX71M_RSK_GCC_e2studio_IAR        -           Fail        Pass        
    RX700_RX71M_RSK_Renesas_e2studio        Pass        -           -           

     

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

    夏季休業中のところ申し訳ないのですけど、Dinh Van Namさんのプルリクエストで問題が発生してしまいました。Dinh Van Namさん(ルネサス社のベトナム法人?)も日本に合わせて夏季休業中かも知れませんが、ひとまず問題が発生していることをお伝えしておきます。(私の方から夏季休業中だけどもルネサスさんに連絡したことを、私がアマゾンさん([追記]←違うのかも)に伝えられれば、ひとまず良いのかな、という気がしますので、あとは休業明けのアクションで良いかな、という気がします。)

    Update Renesas GCC compiler #89
    github.com/FreeRTOS/FreeRTOS-Kernel/pull/89#issuecomment-673001361
     

  • NoMaYさん

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

    ありがとうございます。上記承知しました。現在FreeRTOSのOTA部分のレビューをAWSの技術チームと進めており、上記スレッドも課題としてリストアップしております。ですが、今回のOTAのターゲットのコンパイラであるCC-RXとは直接は関係のないプルリクエストであるため少々優先度を下げて対応を進めています。夏季休業明けから対応を再開します。
    ちなみにDinh Van Namさんはルネサス日本採用の社員ですね。私の課の重要なメンバです。

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

    Dinh Van NamさんのGNURX向けポートレイヤのFreeRTOS kernelのプルリクエストが他の方の支援もあってマージされましたが、良く見てみたら、以前に私が指摘した以下の間違いに起因するものと思われるGCC/RX200ポートレイヤの間違いが含まれていました。以前からあるRenesas/RX200ポートレイヤがRXv1コア搭載RX200マイコン向けポートレイヤでしたので、プルリクエストで追加されたGCC/RX200ポートレイヤがRXv2コア搭載RX200マイコン向けなのはさすがにチグハグかと思います。

    Dinh Van Namさんには申し訳ないですが、いったん追加されたGCC/RX200ポートレイヤを削除するプルリクエストを出そうかと思います。

    なお、FreeRTOS kernelにも投稿していますが、どのポートレイヤを使うかは以下のようになると思います。

    > あと、調査を始めたところですが、RXv2コアのRX231でRXv1コア用のRX200ポートレイヤを使うのは間違いな気がします。また、RXv3コアの品種でRXv2コア用のRX600v2ポートレイヤを使うのも間違いな気がします。タスク切り替え時にFPSWや倍精度浮動小数点レジスタが退避/復帰されないような気がします、、、

    [BUG] The newly added GCC/RX200 port is wrong. #139
    github.com/FreeRTOS/FreeRTOS-Kernel/issues/139#issuecomment-680796172

    RX MCU Group        Port Layer
                        CC-RX               GNURX           ICCRX
    RX111               Renesas/RX100       GCC/RX100       IAR/RX100
    RX113               Renesas/RX100       GCC/RX100       IAR/RX100
    RX210               Renesas/RX200       N/A             N/A
    RX62N,RX621         Renesas/RX600       GCC/RX600       IAR/RX600
    RX630               Renesas/RX600       GCC/RX600       IAR/RX600
    RX63N,RX631         Renesas/RX600       GCC/RX600       IAR/RX600
    RX64M               Renesas/RX600v2     GCC/RX600v2     IAR/RXv2
    RX71M               Renesas/RX600v2     GCC/RX600v2     IAR/RXv2
    ...
    RX13T               Renesas/RX600       GCC/RX600       IAR/RX600
    RX230,RX231         Renesas/RX600v2     GCC/RX600v2     IAR/RXv2
    RX23W               Renesas/RX600v2     GCC/RX600v2     IAR/RXv2
    RX65N               Renesas/RX600v2     GCC/RX600v2     IAR/RXv2
    ...

    [関連リンク]

    Update Renesas GCC compiler ports #135
    github.com/FreeRTOS/FreeRTOS-Kernel/pull/135#issuecomment-680609307
     

  • NoMaYさん

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

    ご連絡ありがとうございます。上記承知しました。
    NoMaYさんとの活動のおかげで、AWSとのパイプが強くなり、
    ルネサスのコードのプルリクエストをAWSに見てもらえるようになってきました。

    どんどんコードをプルリクエストしていきたいところです。

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

    もうひとつFreeRTOS RXパッケージ v10.0.03の問題点に気付きました。RX100ポートレイヤですが、このポートレイヤでは消費電力削減用のTICKLESS IDLEという機能が追加されていて、その差分の影響で、freertos_start.c内のTICK割り込み生成のCMT設定のvApplicationSetupTimerInterrupt()がポートレイヤから呼び出されなくなってしまっています。結果、[訂正]下記参照 このポートレイヤではCMTはCMT0固定になります。

    対処案ですが、近々では、CMT0以外は使えないという制限にするのが良いかと思います。その次は、プルリクエストには使えないことを承知の上でRX100ポートレイヤからTICKLESS IDLEという機能を削除して、他のポートレイヤと同じにするのが良いかと思います。(そして、そのポートレイヤはRXv1コア搭載RX200マイコン向けポートレイヤと等価になります。) その後、TICKLESS IDLEという機能をRX100ポートレイヤで復活させるのが良いかな、と私は思います。[訂正]下記参照 ただ、RX100ポートレイヤ内のvPortSuppressTicksAndSleep()という関数内でもCMTを触っていますので、その箇所をポートレイヤ内に残すのか、その部分を関数として切り出してfreertos_start.c内へ移すのか、そういうことを検討した方が良いのかな、とも思います。

    ちなみに、消費電力削減といってもwait()を使うケースだけなので、より多くのスタンバイモード(他品種対応とかディープソフトウェアスタンバイモード対応とか含む)に対応させるにはどうするのが良いか、とか考えるのも面白そうです。

    [訂正]

    先ほどコードを見ていた時には見落としたのですが、以下の記述がRX100ポートレイヤのport.cにありましたので、FreeRTOSConfig.cに以下の記述を追加すればポートレイヤがfreertos_start.c内のvApplicationSetupTimerInterrupt()を呼び出すようになります。ですので、TICKLESS IDLEという機能を使わない場合はそのように記述する、ということにすれば良いのかな、と思います。

    {Renesas/RX100, GCC/RX100, IAR/RX100}/port.c

     * Sets up the periodic ISR used for the RTOS tick using the CMT.
     * The application writer can define configSETUP_TICK_INTERRUPT() (in
     * FreeRTOSConfig.h) such that their own tick interrupt configuration is used
     * in place of prvSetupTimerInterrupt().
     */
    static void prvSetupTimerInterrupt( void );
    #ifndef configSETUP_TICK_INTERRUPT
        /* The user has not provided their own tick interrupt configuration so use
        the definition in this file (which uses the interval timer). */
        #define configSETUP_TICK_INTERRUPT() prvSetupTimerInterrupt()
    #endif /* configSETUP_TICK_INTERRUPT */

    frtos_config/FreeRTOSConfig.c

    void vApplicationSetupTimerInterrupt(void);
    #define configSETUP_TICK_INTERRUPT() vApplicationSetupTimerInterrupt()

     

  • NoMaYさん

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

    本件、AWSチームと会話し、現在進めているOTA込みのAWS認証には
    以下プルリクエストは適用しない(FPU×RX130×GCCの組み合わせなど、影響範囲が小さいのでNGのまま)方向で進めてます。(AWS認証が一旦落ち着いたあとにマージ検討進める方向)

    github.com/.../146
    github.com/.../152


    > 消費電力削減といってもwait()を使うケースだけなので、
    > より多くのスタンバイモード(他品種対応とかディープソフトウェアスタンバイモード対応とか含む)に
    > 対応させるにはどうするのが良いか、とか考えるのも面白そうです。

    こちら、私も非常に興味がありますね。
    Microchipは以下のようなアプリケーションノートを出しております。
    ww1.microchip.com/.../Atmel-42204-SAM4L-Low-Power-Design-with-FreeRTOS_AP-Note_AT03289.pdf

    ルネサスもこういったOSの実装についてももっと追及していくべきですね。
    特に低消費電力がアピールポイントのマイコンでは上記のような実装を徹底的に極めておくのは重要です。

    昨今この機運が高まってはきているので、実現はしやすそうです。(技術ではなく政治に課題有)
    とはいえMicrochipはこのアプリケーションノートを7年前に発行していることから考えると
    まだまだルネサスはOS実装におけるアプローチについて精進しなければならないと感じます。

    以上です

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

    そもそも、プルリクエストをいつマージするか(或いはマージしないか)はアマゾンさん次第のことと思ってますので、まだまだあるビルド出来ない件など、こちらはやれることをやれるときにやるという感じで楽しんでいけば良いかなぁ、と思ってます。(こういった作業は結構好きなのです。)

    FreeRTOS-kernelリポジトリ案件の今後

    RX
    ・Uncrustifyというソース整形ツールと整合性が取れるように全てのRXポートレイヤのソースを整形(RX700v3_DPFPU済)
    ・IARポートレイヤがアセンブラソースでPriorityDefinitions.hというファイルを必要とする点の改善(RX700v3_DPFPU済)
    ・MPU対応(気長に)
    ・消費電力削減機能対応(気長に)

    RL78
    ・IARポートレイヤの最新コンパイラ対応(作業済)(最低限のこと)のプルリクエスト
    ・IARポートレイヤの改善(Applilet3,Applilet4との親和性の改善)
    ・CC-RLポートレイヤの投稿(かふぇルネに今まで投稿したものを見直してから)
    ・GNURL78ポートレイヤの投稿(かふぇルネに今まで投稿したものを見直してから)
    ・割り込み専用スタックを持たせてRAM使用量を削減したい
    ・消費電力削減機能対応(気長に)

    FreeRTOSリポジトリ案件の今後

    RX
    ・最近のツールで容易にビルド出来るようにする(ようやく始めたところ)
    ・動作確認をどうやるか考える(評価ボードを揃えるお金に困るほど貧乏では無いけれど)
    ・e2 studioでFreeRTOSプロジェクトを生成出来る今にFreeRTOSデモプログラムの意義は何かを考える
    ・FreeRTOSデモプログラムにもう少し多くのデモ項目(テスト項目)を追加したいなぁ

    RL78
    ・FreeRTOSデモプログラムの最新IARコンパイラ対応(作業済)(最低限のこと)のプルリクエスト
    ・FreeRTOSデモプログラムのCC-RL版の投稿(かふぇルネに今まで投稿したものを見直してから)
    ・FreeRTOSデモプログラムのGNURL78版の投稿(かふぇルネに今まで投稿したものを見直してから)

    楽しみながら気長にぼちぼちと、、、