RXv3コアのレジスタ一括退避機能を使ってマルチスーパーループ実行ライブラリ(MultiSuperLoopExecLibrary)を作ってみるスレッド

こんにちは。NoMaYです。

今、以下のスレッドに投稿しているのですけれども、派生ネタが思い浮かびましたので、またひとつ立ててみました。

RXv3コアのレジスタ一括退避機能の使い方(Register Bank Save Function Usage)を調べてみるスレッド
community-ja.renesas.com/cafe_rene/forums-groups/mcu-mpu/rx/f/forum5/9572/rxv3-register-bank-save-function-usage

派生ネタ

・ スーパーループを複数同時実行する(複数のスーパーループを切り替えながら実行する)、という、ありがちなものです
・ RXv3コアのレジスタ一括退避機能の高速性を鑑みて10μsec程度で切り替えてみたいです
・ お遊びです

Parents
  • なんというか、RTOSドメインとスーパーループドメインの2つがあって、10μsec程度で切り替わりながらプログラムが実行されて行く、みたいな実行モデルが実現出来ると、面白いのかなぁ、、、(それとも、それと同じことはRTOSの範疇内で出来てしまうかなぁ、、、) RTOSって、難しいですよね?でも、クラウド接続では無理矢理に使わされる、、、

    発想の発端:

    FreeRTOSのconfigTICK_RATE_HZに1001以上を設定した場合の、USB Host Mass Storage Class(r_usb_hmsc)の動作について
    community-ja.renesas.com/cafe_rene/forums-groups/mcu-mpu/rx/f/forum5/9740/freertos-configtick_rate_hz-1001-usb-host-mass-storage-class-r_usb_hmsc/47370#47370
     
    [追記] 2022/11/19

    > それとも、それと同じことはRTOSの範疇内で出来てしまうかなぁ、、、

    やりたいこと

    ・ スーパーループ処理で実行すべき事案がある時はスーパーループ処理を実行
    ・ スーパーループ処理で実行すべき事案が無い時はRTOSタスクを実行

    補足

    ・ スーパーループ処理で実行すべき事案が何も無くなった後では何かしらの然るべき割り込みの発生に伴ってスーパーループ処理で実行すべき事案が発生する
    ・ 例えばスーパーループ処理にて入力ポートをループ毎に監視するような事案は無く、例えば100μs毎とか1ms毎とか10ms毎とかのタイマ割り込みの発生に伴ってスーパーループ処理で事案が処理される



    ・ スーパーループ処理を最高優先度のタスクに割り当てる
    ・ スーパーループ処理で実行すべき事案が何も無くなった時にはタスク通知待ちに入る
    ・ スーパーループ処理を再開させる必要がある割り込みではスーパーループタスクにタスク通知を送ってタスク通知待ちを解除させる

    [追記] 2022/11/22

    > それとも、それと同じことはRTOSの範疇内で出来てしまうかなぁ、、、

    やりたいことのもうひとつの別方針

    ・ 実行すべきRTOSタスクが無い時はスーパーループ処理を実行
    ・ 実行すべきRTOSタスクがある時はRTOSタスクを実行



    ・ スーパーループ処理をタスク優先度1のスーパーループタスクに割り当てる
    ・ RTOSタスクはタスク優先度2以上に割り当てる
    ・ スーパーループ処理は今までと変わらない(FreeRTOS APIを呼び出さない)
    ・ スーパーループ処理向け割り込み処理は今までと変わらない(FreeRTOS APIを呼び出さない)

    補足

    ・ タスク優先度0のIdleタスクは実行されることがない(タスク優先度1のスーパーループタスクが実行され続けるから)
    ・ スーパーループ処理の中からRTOSタスクよりタスク優先度を高くしたい処理を切り出したくなったらFreeRTOS APIを触り始める(クラウド接続のRTOSタスクはレディメイドのブラックボックスとして扱う)

Reply
  • なんというか、RTOSドメインとスーパーループドメインの2つがあって、10μsec程度で切り替わりながらプログラムが実行されて行く、みたいな実行モデルが実現出来ると、面白いのかなぁ、、、(それとも、それと同じことはRTOSの範疇内で出来てしまうかなぁ、、、) RTOSって、難しいですよね?でも、クラウド接続では無理矢理に使わされる、、、

    発想の発端:

    FreeRTOSのconfigTICK_RATE_HZに1001以上を設定した場合の、USB Host Mass Storage Class(r_usb_hmsc)の動作について
    community-ja.renesas.com/cafe_rene/forums-groups/mcu-mpu/rx/f/forum5/9740/freertos-configtick_rate_hz-1001-usb-host-mass-storage-class-r_usb_hmsc/47370#47370
     
    [追記] 2022/11/19

    > それとも、それと同じことはRTOSの範疇内で出来てしまうかなぁ、、、

    やりたいこと

    ・ スーパーループ処理で実行すべき事案がある時はスーパーループ処理を実行
    ・ スーパーループ処理で実行すべき事案が無い時はRTOSタスクを実行

    補足

    ・ スーパーループ処理で実行すべき事案が何も無くなった後では何かしらの然るべき割り込みの発生に伴ってスーパーループ処理で実行すべき事案が発生する
    ・ 例えばスーパーループ処理にて入力ポートをループ毎に監視するような事案は無く、例えば100μs毎とか1ms毎とか10ms毎とかのタイマ割り込みの発生に伴ってスーパーループ処理で事案が処理される



    ・ スーパーループ処理を最高優先度のタスクに割り当てる
    ・ スーパーループ処理で実行すべき事案が何も無くなった時にはタスク通知待ちに入る
    ・ スーパーループ処理を再開させる必要がある割り込みではスーパーループタスクにタスク通知を送ってタスク通知待ちを解除させる

    [追記] 2022/11/22

    > それとも、それと同じことはRTOSの範疇内で出来てしまうかなぁ、、、

    やりたいことのもうひとつの別方針

    ・ 実行すべきRTOSタスクが無い時はスーパーループ処理を実行
    ・ 実行すべきRTOSタスクがある時はRTOSタスクを実行



    ・ スーパーループ処理をタスク優先度1のスーパーループタスクに割り当てる
    ・ RTOSタスクはタスク優先度2以上に割り当てる
    ・ スーパーループ処理は今までと変わらない(FreeRTOS APIを呼び出さない)
    ・ スーパーループ処理向け割り込み処理は今までと変わらない(FreeRTOS APIを呼び出さない)

    補足

    ・ タスク優先度0のIdleタスクは実行されることがない(タスク優先度1のスーパーループタスクが実行され続けるから)
    ・ スーパーループ処理の中からRTOSタスクよりタスク優先度を高くしたい処理を切り出したくなったらFreeRTOS APIを触り始める(クラウド接続のRTOSタスクはレディメイドのブラックボックスとして扱う)

Children
No Data