FreeRTOS(with IoT libraries)について質問

マイコン初心者です。

いつもかふぇルネから情報を頂き、RX72N-Envisonキットでプログラムを突いています。

今回FreeRTOS(Kernel-Only)で数個のtaskを登録し期待した動作が
出来たのではと思い、FreeRTOS(with IOT libraries)に手をのばし始めました。
これについて質問ポストします。よろしくお願いします。

Kernel-Only版ではSocket機能を含んでいないのでこれを組み込みたいと考えています。
(PCとのローカル通信機能のみ)
T4-もありますが、FreeRTOS+TCPが提供されているので試そうと考えました。

環境:
IDE:E2Studio 2022-07
コンパイラ:GCC 8.3.0.202202(E2Studio:2022-07)
arf:【v202012.00-rx-1.0.2】
基板:RX72N Envision Kit

1. afr  FreeRTOS(with IOT libraries)のお勧めバージョンがありましたらお教えください。
   ダウンロード時、日付では2021xx.xx.-rx-x.x.xなど沢山見えますが
   ダウンロードすると途中で止まり、成功率が良くありません。
   使用中のプロバイダに問題が有るのと思いますが、何度もトライし取得したいと思います。

   また、新規プロジェクト作成時以外で、FreeRTOS(with IOT libraries)の希望バージョンの
   取得方法がありましたらお教えください。

【afr-v202012.00-rx-1.0.2】は何度かトライし成功しました。


2. プロジェクト生成のオブジェクト削減方法がありましたらお教えください。
    afrを指定し新規プロジェクト生成で大量のソースが得られ、コンパイルすると約900kBオーバーです。
   また、RAM、RAM2空間何れも使用され、GLCD用バッファが確保できない状況でです。
   そこでフォルダ【application_code】-【demos】下の【include】と【network_manager】以外は削除。
(一部関数などは別モジュールに保存)
  また【libraries】の一部も削除。結果 bssも含めRAM領域に詰めることができました(?)。
(これでRAM2領域を空け GLCD用バッファ確保できるの状態かと思っています。map情報では)
  LEDチカチカタスク(Kernel-Onlyと同じ処理)とソケットタスクで(main記載の関数から起動)
  LED点滅とPCからのPINGは確認できました。(簡単なメッセージ通信も含め)

  この削除手順をプロジェクト作成時(E2Studioのインポート機能などで)で選択することは
  可能でしょうか? 可能ならお教えください。(削除作業はカット&トライで確認です)


3. afrのマニュアルの入手法をご存知でしたらお教え願います。
  上記の様に資料も確認しないで行った為、誤りが多々あると思われますので確認したいと
  考えています。

以上、よろしくお願い致します。

  • マイコン初心者さん、こんにちは。NoMaYです。

    > 2. プロジェクト生成のオブジェクト削減方法がありましたらお教えください。
    >    afrを指定し新規プロジェクト生成で大量のソースが得られ、コンパイルすると約900kBオーバーです。

    これは御自身でRXスマートコンフィグレータでFITモジュールやCGコンポーネントを追加されてのことでしょうか?

    生成されたデフォルトプロジェクトを当方でビルドしてみたところ、-gc-sectionオプション外しても以下でした。約900kBオーバーという状況に思い当たることが無いです。

    rx-elf-size --format=berkeley "aws_202012_102_e2v202210_20221118.elf"
       text    data     bss     dec     hex filename
     579537    1024  382748  963309   eb2ed aws_202012_102_e2v202210_20221118.elf

     

  • マイコン初心者さん

    こんにちは、シェルティです。ルネサスの中の人です。

    RX72N Envision Kitをご活用いただきありがとうございます。

    1.Release RX MCUs Amazon-FreeRTOS v1.0.2 comes from original 202012.00 が良いかと思います(すでにこれと同じ【afr-v202012.00-rx-1.0.2】をご利用いただいていますね)

    https://github.com/renesas/amazon-freertos/releases

     →この中から使いたいボードが対応している一番新しいバージョンを選ぶと良いです。

    2.試していただいた通り、demoやlibrariesから不要なファイルを削除していってください。残念ながらe2 studio上でこの手の操作は今のところ出来ないです。RAファミリのFSPはこのあたり洗練されており、e2 studio上で「MQTTライブラリだけを取り外す」といったことが可能です。RXファミリもできるようにしていく考えです。

    3.AFR(Amazon FreeRTOS)のマニュアルは以下から入手可能です。

    https://aws.amazon.com/jp/freertos/ (トップページ)

    https://docs.aws.amazon.com/freertos/latest/userguide/freertos-getting-started.html (FreeRTOSのgetting started)

    以上です

  • シェルティさん、リプライありがとうございます。マイコン初心者です。


    ◎"これは御自身でRXスマートコンフィグレータでFITモジュールや
        CGコンポーネントを追加されてのことでしょうか?"

      失礼しました。
      オブジェクト全体でのサイズを記載しました。bssは386840です。
      text        data       bss        dec     hex     filename
      569993 1024 386840 957857 e9da1     xxx.elf

      RAM2への浸食なしで対応できるのではと思います。
     (KernelのHEAP設定、半分でも可ではと思っています。 デフォルトは256K)

    ◎"afr FreeRTOS(with IOT libraries)のお勧めバージョン"
      【afr-v202012.00-rx-1.0.2】でOK、ありがとうございます。

    "ボードが対応している一番新しいバージョン"
       更新されていたのですね。だいぶ前にダウンロードしたファイル使ってました。
       今までこれが古かった為か、設定やビルドエラーに手間取っていました。
       メンテナンスありがとうございます。

       スマートコンフィグレータでコンポーネット更新のみでPING機能が確認できました。
     (シリアルターミナルのSCI2のピン設定のみ実施)※MACアドレスのユニーク設定は必須ですが。

       余りにも簡潔のため、【r_eter_rx】コンポーネントの"PHY-LSI address setting for ETHER0"を
      【1】に変更する事まで忘れましたが、これも【0】のままで可でした。


        新しいボート設定ファイルで新規プロジェクト作成することにします。

        RAファミリでのFSP情報ありがとうございます。
     
    "AFR(Amazon FreeRTOS)のマニュアル"

      AFRのマニュアル情報ありがとうございます。
      参照させてい頂きます。

    以上

  • マイコン初心者です。

    前回NoMaYさん、シェルティさんから頂いた情報を基に
    複数のタスク起動し動作Okと思っていたのですが
    不具合が発生したので相談したくポストします。
    何か情報有りましたらお願いします。
    プロジェクトは再構築しデフォルトから可能な限り変更無しで作成。

    チョット長い文になり、申し訳ありませんが宜しくお願い致します。

    環境:前回と同じ


    不具合状況:
       Window-PCからPINGをRX72N Envision Kitへ発行。
    (ping xxx.xxx.xxx.xxx -n 100000 -w 5000)
     PINGに対して【要求がタイムアウトしました。】が発生します。
     発生タイミングはランダムです。また発生後は復活することはないです。
     (早い時で起動後5分くらいで発生、遅いと20分を超える場合あり)


    プロジェクト作成設定:
       1) afr-v202012.00-rx-1.0.2を選択しプロジェクト生成後
           scfgのデバイス設定で【EnvisionKitRX72N(V1.13)】選択。
           コンポーネントに【Ethernet Driver】【Graphics LCD Controler Module】【ポート】選択。
           各コンポネントを最新バージョンに更新しコード生成。(例:r_bspは7.20)
           ※FreeRTOS_KernelのHeap領域は256*1024 -> 128*1024に変更
           ※B_ETHERNET_BUFFERS_1,B_RX_DESC_1,B_TX_DESC_1, bssはRAM2へマップ(デフォルト)


       2) main_task.cの【main_task()】で【glcdc_initialize()】実行後
          無限ループ内でLED点灯制御に変更(可能な限り新たなタスク作成しないようにするため)

         glcdc_initialize();
         /* main loop */
         while(1)
         {
               vTaskDelay(500);
               LED_PORT ^= 1;
         }

         ◎ glcdc_initialize()はRX65N用サンプルプログラム【R01AN3509JJ0100】の
           【r_screen.c】【r_screen.h】使用。
             フレームメモリアドレス IMAGE_RELOCATION_ADDR, IMAGE_RELOCATION_ADDR2を
              (0x00840000)、(0x00860000)に変更。<= (bss)との競合を避けるため。
              ※最終的には256色では無く64k色仕様想定のため(0x00800000)~(0x0087xxxxx)を占有したい。
              ※ コード生成直後のピン設定、フラッシュ設定、セマフォはそのまま使用。
              ※【r_screen.c】の一部(タッチパネルや、RSPIリード)はコメントアウト。


      3) main.cの【void vApplicationDaemonTaskStartupHook(void)】内の
      【FreeRTOS_printf(( "The network is up and running\n" ))】の後はコメントアウト
        ※【FreeRTOS_IPInit()】を実行し、ネットワーク起動確認のみ。


    確認状況:
      1)【glcdc_initialize()】を起動しなければ【PING】動作問題無し。

      2)【glcdc_initialize()】の先頭にあるフレームバッファ初期化無しでも現象発生。

      3)【glcdc_initialize()】のret = R_GLCDC_Open(&glcdc_init_cfg);実行のみでも発生する。
          ※この後にある【R_GLCDC_Control(GLCDC_CMD_START_DISPLAY, NULL)】をスキップ。
          ret = R_GLCDC_Open(&glcdc_init_cfg);
          if (GLCDC_SUCCESS != ret)
          {
              while (1) {
                nop();
              }
           }
           #ifdef WITHOUT_DISPLAY_START
               return;
           #endif

       4)【glcdc_initialize()】の割り込み設定をfalseにすると発生しない。
            これが大きく係わる?(Ethernet Driverと同じ割り込ベクター)
            /* Interrupt */
            #ifdef SET_ERROR_PARAM <=これが有効なら現象発生。
                  glcdc_init_cfg.interrupt.vpos_enable = true;
               glcdc_init_cfg.interrupt.gr1uf_enable = false;
                  glcdc_init_cfg.interrupt.gr2uf_enable = true;
            #else <=無効なら現象確認されない。
                  glcdc_init_cfg.interrupt.vpos_enable = false;
                  glcdc_init_cfg.interrupt.gr1uf_enable = false;  
                  glcdc_init_cfg.interrupt.gr2uf_enable = false;
            #endif
            割り込み禁止時では、4時間試し不具合は確認されませでした。
          (割り込み禁止で動作するなら、【いいじゃん】が聞こえそうですが)

           ※最初に作成したプロジェクトでも割り込み禁止にすると不具合は発生しない。

    考え方に誤り、確認すべき点有りましたらお願いします。

    以上

  • マイコン初心者さん、こんにちは。NoMaYです。

    まず一点確認させて欲しいのですが、ざっくり5分~20分ほどで動作がおかしくなるのは、前回時点のプロジェクトでも発生したことでしょうか?もし、OKのプロジェクトとNGのプロジェクトの2つがあるなら、差分を考察していくのも1つの取っ掛かりかなと思ったのです。前回のプロジェクトもNGなら、別の取っ掛かりを考えていくのですが。

  • マイコン初心者さん、こんにちは。NoMaYです。

    先ほどの件は、glcdc_initialize()を呼ぶようにしたのが、今回のプロジェクトから、ということでしょうかね?

  • NoMaYさん確認リプライありがとうございます。

    >glcdc_initialize()を呼ぶようにしたのが、今回のプロジェクトから

    チョット違います。

    glcdc_initialize()は元々FreeRTOS kernel-Only環境で呼んでいて、FreeRTOS kernel-Only環境の

    プロジェクトをafr環境に乗せ換えました。(ソケット通信機能を取り込み<=BMPデータ更新をソケット通信で行いたい)

    FreeRTOS kernel-Only環境ではglcdc_initialize()での割り込みは設定はtrueで使用し

    (RX65Nサンプル)期待した動作が行えました。(オーバーレイ、アルファブレンド

    ガンマー、ブライトネス等)

    afr環境では、FreeRTOS_IPInit()を実行するとr_ehernetが初期化され、Sokect機能が有効になり、PING機能もこの時点で有効になる。(理解に誤りがありましたら指摘願います)

    これに別タスクで実行するglcdc_initialize()の割り込み設定にて、FreeRTOS_IPInit()で設定した

    PING機能(Sokect機能)が正常に動作しなくなる現象の相談です。(私の環境ではこの様に見える)

    PING動作が正常でなるなる条件がglcdc_initialize()の割り込み設定に依存しているのでは?の

     相談です。

    補足:

    最初の不具合確認はFreeRTOS_IPInit()でSokect機能正常後、別クライアントタスクを

    作成しPCとコネクト状態を確立後、不定期にディスコネクトが発生するでした。

    原因を調べるため、このクライアントタスクを起動しないで、PING機能が

    動作するかで確認することにし、glcdc_initialize()の割り込み設定が影響し

    VPOS割り込みを有効にすると不具合が発生するのではと行きつきました。

  • マイコン初心者さん、こんにちは。NoMaYです。

    表現の厳密さはともかくも、RX65N FreeRTOS Kernel onlyプロジェクト → RX72N FreeRTOS(with IoT libraries)プロジェクトという移植案件、なのですね。

    そういうことならば、RX65N FreeRTOS Kernel onlyプロジェクトの時は、TCP/IPドライバはT4でしたでしょうか?(すみません、たぶん、この案件は私では早々とギブアップしてしまう、ことになりそうですが、情報集めです。)

    それで、思うに、RX72N Envision KitでLCDを扱うプロジェクトは以下にあり、ここでR_GLCDC_Open()することは行われていると思いますが、RX72N FreeRTOS(with IoT libraries)でもRX72N FreeRTOS(Kernel only)でも無い、というところが手詰まりな感じですね。

    1 GLCDC DRW2D emWin(Segger GUIミドルウェア) - RX72N Envision Kit Wiki
    github.com/renesas/rx72n-envision-kit/wiki/1-GLCDC-DRW2D-emWin(Segger-GUIミドルウェア)
     

  • NoMaYさん。こんにちは。

    マイコン初心者です。また長い記載になります。
    プロジェクトにつて整理します。

    >RX65N FreeRTOS Kernel onlyプロジェクト → RX72N FreeRTOS(with IoT libraries)
    >プロジェクトという移植案件

    RX65N FreeRTOS Kernel onlyプロジェクトは作成してません。(提供も無いと思います)
    【R01AN3509JJ0100】はベアメタル環境で、GLCDC、RSPI、SCI-IIC機能を
    制御しQSPI-ROMに保存したBMPデータをGLCDCへ表示するプロジェクトと
    QSPI-ROMへBMPデータを保存するプロジェクトの2種で構成されています。
    (T4は使用してません)


    これを参考にRX72N EnvisionKitへ、最初にベアメタル版GLCDC制御を作成後
    FreeRTOS Kernel only版GLCDC制御を作成。
    この時点まではQSPI-ROMへBMPデータを保存するには別プロジェクトを使う不便な環境です。


    この不便な環境をPCとのソケット通信でBMPデータ更新機能を付加するために
    with IoT libraries版を作成しました。

    ところが、PCとの通信処理でソケットサーバーとのコネクト状態が
    不定期にディスコネクトが発生するため、with IoT libraries版作成時に不要なコード削除を
    止め出来るだけで変更を加えない版を作成し不具合を確認し今回ポストしました。

    記載頂いたWebのSegger-GUIミドルウェアですが、RX65Nプロジェクトより先に確認したと
    記憶ですがマニュアルをみながらサンプル動作試みましたがその後、理解不足と
    CC-RXの壁(128k)に当たり断念しました。(CC-RX購入には踏み切れていません!)

    個人的な感想で申し訳ありませんが、Segger-GUIはブラックボックス化されていて
    その他のモジュールとの関係がイメージできませんでした。
    (セミナーに参加すれば別かとは思いますが)

    【glcdc_initialize()】と【FreeRTOS_IPInit()】が共存した環境を試された方が
    いましたら、その時のVPOS割り込み設定はどうされたかお教え頂けたらと思います。
    現在発生の不具合が私固有の問題であるのか確認したいと考えています。

    2面のフレームバッファを同時に表示用として使い、オーバーレイ等の
    合成画像を表示してますが、1面のみ表示中に、もう片方の面に新しい画像準備後
    切り替えするタイミングにVPOS割り込みを使うのではと予想。
    (勝手な予想です。)

  • マイコン初心者さん、こんにちは。NoMaYです。

    たぶん、自分の勘違いしていた点は、以前の投稿で以下のように書かれていたのを、RX65Nで実際に何かを動かしていたことがある、というように受け取ったことのように思います。

    > FreeRTOS kernel-Only環境ではglcdc_initialize()での割り込みは設定はtrueで使用し
    > (RX65Nサンプル)期待した動作が行えました。(オーバーレイ、アルファブレンドガンマー、ブライトネス等)

    でも、以下の文面ですと、RX65Nで実際に動かしたことがあったわけでは無さそうですね。どうも失礼致しました。

    > これを参考にRX72N EnvisionKitへ、最初にベアメタル版GLCDC制御を作成後
    > FreeRTOS Kernel only版GLCDC制御を作成。

    サンプルプログラム【R01AN3509JJ0100】がRX65Nのものしか無いので(RX72Nの発表は2020年春)、RX65Nという単語が出てきていたのですね。


    そして、同じ引用ですけれども、以下までは動作していた、ということなのですね。

    > これを参考にRX72N EnvisionKitへ、最初にベアメタル版GLCDC制御を作成後
    > FreeRTOS Kernel only版GLCDC制御を作成。


    他方で、【afr-v202012.00-rx-1.0.2】の単体ではPingに関して動作していた、ということなのですね。ところが、2つを足して共存環境を作成したら動作しなかった、ということなのですね。どうも失礼致しました。

    > 【glcdc_initialize()】と【FreeRTOS_IPInit()】が共存した環境を試された方が
    > いましたら、その時のVPOS割り込み設定はどうされたかお教え頂けたらと思います。
    > 現在発生の不具合が私固有の問題であるのか確認したいと考えています。