e2 studio パートナーOS について

大変お世話になっております SAM です。

FreeRTOS を使っていて、タスクトレース機能のようなものを探していました。

e2 studio メニューを見ると
[Renesas Views][パートナーOS][RTOSリソース]
というものがあり、パートナーOSについて調べると以下の名前がありました。
・Smalight OS
µC/OS-III (Micrium社製)
embOS (SEGGER Microcontroller社製)
ThreadX (Express Logic社製)

ここに FreeRTOS が入る日はくるのでしょうか。

もしかして、定義ファイルがあって、そこを変更すると FreeRTOS に対応させることができる
ということはあるのでしょうか。
よろしくお願いします。

  • SAMさん、こんにちは。NoMaYです。

    まず最初の話として、「タスクトレース機能」と「リソース表示機能」ですが、両者は違う機能ですね。そこから既に話が混乱しているように私は思いました。

    SAMさんが書かれたe2 studioの機能は「リソース表示機能」の筈ですけれど、それに相当する無償のFreeRTOS対応プラグインはe2 studioインストール時に追加インストール可能になっています。

    ただ、「タスクトレース機能」に関しては、今のところ、ルネサスさんは有償のTracealyzerを推しているようです。

  • 私が思い描いていたのは、どのタスクがどれくらいの時間動作したかの一覧がグラフィカルに表示されるものでした。

    リソース表示機能の動作を確認しました。

    これだけでも生成したタスクの priority と state が分かるので、これからの開発に少しは役に立ちそうです。

    ありがとうございました。

  • SAMさん、こんにちは。NoMaYです。#フォーラムでリプライすることとは、恥をかくことと、見つけたり。

    ごめんなさい、私、どうも随分と昔の知見でリプライしてしまったようです。(少なくとも)e2 studio 2021-07では普通に以下の画面コピーのようにRenesas Views→Partner OS→RTOS Resourcesで開くViewでFreeRTOSのリソースを見ることが出来ましたね。すみませんでした。また、以下のアプリケーションノートがリリースされていて、Tickカウントを取得するやり方についても書かれていました。でも、実際のユーザーコーディングの部分はGoogle検索して見付かった内容を参考にコーディングするしか無さそうな感じでした。(でも、ひょっとしたらルネサスさんのFreeRTOS with AWS IoT libraries (Amazon FreeRTOS)のサンプルプログラムの方には既にあるかも知れません。)

    e2 studio Partner RTOS Aware Debugging for RX (英文です)
    www.renesas.com/jp/ja/document/apn/e-studio-partner-rtos-aware-debugging-rx

    Google検索: configGENERATE_RUN_TIME_STATS (STM32やKinetisの記事だったりしますが参考になる気がします)
    www.google.com/search?q=configGENERATE_RUN_TIME_STATS

    以下、e2 studioの画面コピーです。



    [関連リンク]

    私の随分と昔の知見

    e2 studio v7.5.0のFreeRTOS ProjectでVisual Expression+Renesas RX Simulator/TB-RX65Nで試せるSample Programを作ってみた
    japan.renesasrulz.com/cafe_rene/f/forum21/5970/e2-studio-v7-5-0-freertos-project-visual-expression-renesas-rx-simulator-tb-rx65n-sample-program/33130#33130
     

  • SAMさん、こんにちは。NoMaYです。

    > どのタスクがどれくらいの時間動作したかの一覧がグラフィカルに表示されるもの

    ということは、Tracealyzerといったようなもののツールを探しておられるのですね。

    Getting Started with Tracealyzer
    percepio.com/gettingstarted/

    Google検索: Tracealyzer ”価格”
    www.google.com/search?q=Tracealyzer+%22%E4%BE%A1%E6%A0%BC%22
     

  • いろいろ情報をいただきありがとうございます。

    別方面から ulGetRunTimeCounterValue の情報でタスクの処理時間を調べていたのですが

    e2 studio Partner RTOS Aware Debugging for RX

    を基にインプリメントしてみました。
    一度は時間を表示することは確認しましたが、時間が加算されなかったり動作が不安定でした。

    スタックデーターロードを有効にしていないのに、デバッガ一時停止するたびに表示が出るようになりました。
    RTOS リソースの動作自体が不安定なのでしょうか。

    ありがとうございました。

  • SAMさん、こんにちは。NoMaYです。

    > 一度は時間を表示することは確認しましたが、時間が加算されなかったり動作が不安定でした。

    > RTOS リソースの動作自体が不安定なのでしょうか。

    そうでしたか。FreeRTOS+e2 studio Partner OS RTOS Resources viewは動作が変でしたか、、、それは私も気になりますので、後日、私も試してみようかな、と思いました。

  • SAMさん、こんにちは。NoMaYです。

    > 一度は時間を表示することは確認しましたが、時間が加算されなかったり動作が不安定でした。

    > RTOS リソースの動作自体が不安定なのでしょうか。

    ものは試しとして、以下の内容で関数を定義して、FreeRTOS+e2 studio Partner OS RTOS Resources viewを表示させてみました。(なお、本Sample Programは FreeRTOS V10.0.0 を使っています。) SAMさんのアプリケーションでは、どのように表示されますか?(時間が加算されていく気配がまったく見られませんか?)

    void vConfigureTimerForRunTimeStats(void)
    {
    }

    unsigned long ulGetRunTimeCounterValue(void)
    {
        static unsigned long ulRunTimeCounterValue = 0;
        return ++ulRunTimeCounterValue;
    }

     
    以下、e2 studioの画面コピーです。


     

  • こんにちは。NoMaYです。

    RXマイコンは、ブレーク中でも、タイマがカウントアップするタイプでしたっけ。それとも、しないタイプでしたでしょうか。カウントアップするタイプでしたら、実機では、一旦ブレークさせてしまうと、ブレーク中の時間が丸ごとどんどんとブレークする前に実行中だったタスクの実行時間に加算されていきそうです。

  • こんにちは NoMay さん
    情報ありがとうございます。
    SAM です。

    時間が加算されていく気配がまったく見られませんか?

    サンプルを参考にさせて頂いた結果気配はありました。


    但し、ブレークする度にスタックデーターロードの子画面が表示されるのは許せません。

    自分がデバッグしていた時のことを話しますと、CMT を使った変数のカウントアップ自体は問題なく
    関数 ulGetRunTimeCounterValue で取得した内容をRTOSリソースに反映させるところに問題があると感じました。
    そこで ulGetRunTimeCounterValue の中で割り込み禁止解除を入れたのですが何も変わりませんでした。

    開発環境なのでコーディング等しながら、もう少し調べてみます。
    ありがとうございました。

  • SAMさん、こんにちは。NoMaYです。

    もし、私のお試しコードで、この後Go/Stopを暫く繰り返してもTotalTickCountが変化しないのであれば、それはidleタスクが(idleタスクだけが)ずっと実行中であることを示していることになるのだろう、と思われるのです。また、その時、idleタスクのTotalTickCountがずっと0のままでも、それはFreeRTOS KernelのRunTimeStatsの実装としては実装通りの挙動ではなかろか、と思われるのです。というのは、ulGetRunTimeCounterValue()がコールされるのはタスクの切り替わりのタイミングのみであろうと推測され、idleタスクが(idleタスクだけが)ずっと実行中の場合には、idleタスクに入った時のtickは取得されているものの、idleタスクからは出ていませんのでidleタスクから出る時のtickが取得されておらず、経過時間を求めることが出来ずにidleタスクのTotalTickCountがずっと0のままになるのではないかと、私には思われるからです。

  • こんにちは。NoMaYです。

    > > どのタスクがどれくらいの時間動作したかの一覧がグラフィカルに表示されるもの
    > ということは、Tracealyzerといったようなもののツールを探しておられるのですね。

    RXマイコン向けではなくRAマイコン向けのものですが、ルネサスさんからタスクトレースを行うTracealyzerという有償製品(サードパーティ製)のアプリケーションノートが出ていました。ざっと見たところ、CortexコアとRXコアに依存する箇所は、以下の#defineぐらいで、あとは、FSPとFITのAPIの違い(UART APIの引数とかエラーコードとか)に依存するような感じでした。(それから、FSPコンフィグレータ(?)のGUIとRXスマートコンフィグレータのGUIが全く違うとこ、とかも。)

    ルネサス RAファミリ Tracealyzer(R)を用いたFreeRTOSのデバッグ
    R20AN0622JJ0100 Rev.1.00 Sep.13.21 全44頁(和文)
    www.renesas.com/jp/ja/document/apn/renesas-ra-family-tracealyzer-freertos-debugging-application-note
    ざっと見てCortexコアとRXコアに依存していた箇所(紫字部分)

    4.3.4 trcConfig.hファイルでのマクロ定義の変更
    "trcConfig.h"ファイルでのマクロ定義のうち、以下に示すように赤字部分のみを変更します。
    ・ #include “bsp_api.h”
    ・ //#error "Trace Recorder: Please include your processor's header file here and remove this line."
    ・ #define TRC_CFG_HARDWARE_PORT TRC_HARDWARE_PORT_ARM_Cortex_M
    ・ #define TRC_CFG_RECORDER_MODE TRC_RECORDER_MODE_STREAMING
    ・ #define TRC_CFG_FREERTOS_VERSION TRC_FREERTOS_VERSION_10_4_1


    [追記]

    あぁっ、Renesas RA C/C++ FreeRTOS プロジェクトテンプレートは static memory allocation なんだ、、、


  • NoMaYさん

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

    RXでも普通にTracealyzer動きますね。RAのようにアプリノートを作ってみようかと考えています。

    最近はFreeRTOS(ネットワークスタック込み)のROM/RAMチューニングなどを進めてます。特にRAMについてなるべく小さいRAMで済むように各タスクのスタック値やバッファサイズなどを切り詰める方法などを煮詰めてます。小さいメモリに詰め込めばその分ラインナップ上から安いチップが選定出来て大量生産を目指すユーザ程コストメリットを訴求できるからです。

    以下のようにRX65NにFreeRTOSを載せてAWS経由のOTAを動作させたときのCPU負荷率やヒープメモリ使用量などが手に取るようにわかります。e2 studioについているRTOSリソースモニタは無料で使えますが静的な解析のみですね。これはこれで便利なのですが動いている最中の動作を見たい場合はTracealyzerがおすすめです。有償ですが相応の機能があります。とても便利ですね。

    画面左下はヒープモニタでずっと増加傾向にあります。mallocに対するfreeし忘れで、そのうちヒープが足りなくなってシステム停止するバグを映した瞬間ですね。この手の不具合は一瞬で見つけられます。

    以上です