RXv3コアのレジスタ一括退避機能の使い方(Register Bank Save Function Usage)を調べてみるスレッド

こんにちは。NoMaYです。

RXv3コア搭載の120MH動作のRXマイコンも、RX66T以降、RX671、RX66N、RX660と品種が増えてきましたが、RXv3コアのセールスポイントの1つであるレジスタ一括退避機能の使い方が今ひとつピンと来ません。そこで、いつものように、ちょっと好奇心からスレッドを立ててみました。(注: RX66Tは、160MHz動作、レジスタ一括退避機能未搭載、です。) いつものように、ぼちぼちと続きます。

ホワイトペーパー
卓越したMCU性能と電力効率を実現するRXv3コア
2019年10月
www.renesas.com/jp/ja/document/whp/introducing-rxv3-core-superior-performance-excellent-power-efficiency#page=6

割り込み応答時間の改善

モータ制御システムなどは、高速な割り込み処理によるリアルタイム性能が必要となってきます。

RXv3コアには、割り込み処理時にレジスタを高速退避/復帰するために、オプション機能として、レジスタ退避バンクと呼ばれる専用メモリを実装しています。図6に示すように、レジスタ退避バンクを使用することで割り込み応答時間を短縮でき、割り込み処理全体の時間を短縮することができます。 割り込み処理ルーチンの中で、SAVE命令を使用すると汎用レジスタとアキュムレータを1クロックで専用メモリに保存できます。RSTR命令は、保存されたレジスタを3~6cycleで復元します。レジスタ退避バンクは専用メモリを複数面持っており、多重割り込みにも対応することが可能です。

図6.割り込み応答時間の改善

レジスタ退避バンクは、割り込みハンドラだけでなく、RTOSコンテキスト切り替えにも使用できます。 RTOSコンテキスト切り替え時間は、レジスタバンク保存機能により最大20%高速化します。


Parents
  • こんにちは。NoMaYです。

    先日の投稿の件を反映させました。なお、他にも調整が入っています。よくよく考えてみれば、多重割り込みを許可する/許可しないの境界はもうBSP_CFG_FIT_IPL_MAXとは無関係になっていますので、小細工マクロの名前を1つ変更しました。

    R_CG_ATTRIB_INTERRUPT_FIT_IPL_MAX_EI(…略…)

    R_CG_ATTRIB_INTERRUPT_EHI(…略…)

     
    プロジェクトのファイル一式をzipファイルに固めました。(今までと同じ様に、FITモジュールのpdfファイルは削除してあります。また、HardwareDebugフォルダは以下を残して他のファイルは削除してあります。) (といっても、何かを動作させてみるというようなものでは無く、リストファイルを確認して、ルネサスRXシミュレータを起動して単純なデバッグプログラムをステップ実行させてみるぐらいのものですけれども。あと、それから、まだ実機では試していません。)

    issue_RXv3_RegBankSave_20230105.zip    3.5 MB

    以下、HardwareDebugフォルダに残してあるファイルです。

    RXv2_NestedInterrupt_CCRX/HardwareDebug/
    src/main.lst

    RXv2_NestedInterrupt_GCC/HardwareDebug/
    src/main.lst

    RXv2_NestedInterrupt_IAR/HardwareDebug/
    src/main.lst

    RXv3_RegBankSave_CCRX/HardwareDebug/
    src/main.lst
    src/RXv3_Check_FSQRT_DSQRT_etc.lst
    src/RXv3_Check_NO_FSQRT_DSQRT_etc.lst
    src/RXv3_RegBankSave_CCRX_ex4.lst
    src/RXv3_RegBankSave_CCRX_ex5.lst
    src/RXv3_RegBankSave_helper.lst

    RXv3_RegBankSave_GCC/HardwareDebug/
    src/main.lst
    RXv3_Check_FSQRT_DSQRT_etc.lst
    RXv3_Check_NO_FSQRT_DSQRT_etc.lst
    RXv3_RegBankSave_GCC_ex4.lst
    RXv3_RegBankSave_GCC_ex5.lst
    RXv3_RegBankSave_helper.lst
    RXv3_RegBankSave_GCC.objdump

    RXv3_RegBankSave_IAR/HardwareDebug/
    src/main.lst
    RXv3_Check_FSQRT_DSQRT_etc.lst
    RXv3_Check_NO_FSQRT_DSQRT_etc.lst
    RXv3_RegBankSave_IAR_ex4.lst
    RXv3_RegBankSave_IAR_ex5.lst
    RXv3_RegBankSave_helper.lst

    RXv3_RX72T_Motor_CG_CCRX/HardwareDebug/
    src/RXv3_Check_FSQRT_DSQRT_etc.lst
    src/RXv3_RegBankSave_helper.lst

    RXv3_RX72T_Motor_CG_GCC/HardwareDebug/
    RXv3_Check_FSQRT_DSQRT_etc.lst
    RXv3_RegBankSave_helper.lst
    RXv3_RX72T_Motor_CG_GCC.objdump

    RXv3_RX72T_Motor_CG_IAR/HardwareDebug/
    RXv3_Check_FSQRT_DSQRT_etc.lst
    RXv3_RegBankSave_helper.lst

     

Reply
  • こんにちは。NoMaYです。

    先日の投稿の件を反映させました。なお、他にも調整が入っています。よくよく考えてみれば、多重割り込みを許可する/許可しないの境界はもうBSP_CFG_FIT_IPL_MAXとは無関係になっていますので、小細工マクロの名前を1つ変更しました。

    R_CG_ATTRIB_INTERRUPT_FIT_IPL_MAX_EI(…略…)

    R_CG_ATTRIB_INTERRUPT_EHI(…略…)

     
    プロジェクトのファイル一式をzipファイルに固めました。(今までと同じ様に、FITモジュールのpdfファイルは削除してあります。また、HardwareDebugフォルダは以下を残して他のファイルは削除してあります。) (といっても、何かを動作させてみるというようなものでは無く、リストファイルを確認して、ルネサスRXシミュレータを起動して単純なデバッグプログラムをステップ実行させてみるぐらいのものですけれども。あと、それから、まだ実機では試していません。)

    issue_RXv3_RegBankSave_20230105.zip    3.5 MB

    以下、HardwareDebugフォルダに残してあるファイルです。

    RXv2_NestedInterrupt_CCRX/HardwareDebug/
    src/main.lst

    RXv2_NestedInterrupt_GCC/HardwareDebug/
    src/main.lst

    RXv2_NestedInterrupt_IAR/HardwareDebug/
    src/main.lst

    RXv3_RegBankSave_CCRX/HardwareDebug/
    src/main.lst
    src/RXv3_Check_FSQRT_DSQRT_etc.lst
    src/RXv3_Check_NO_FSQRT_DSQRT_etc.lst
    src/RXv3_RegBankSave_CCRX_ex4.lst
    src/RXv3_RegBankSave_CCRX_ex5.lst
    src/RXv3_RegBankSave_helper.lst

    RXv3_RegBankSave_GCC/HardwareDebug/
    src/main.lst
    RXv3_Check_FSQRT_DSQRT_etc.lst
    RXv3_Check_NO_FSQRT_DSQRT_etc.lst
    RXv3_RegBankSave_GCC_ex4.lst
    RXv3_RegBankSave_GCC_ex5.lst
    RXv3_RegBankSave_helper.lst
    RXv3_RegBankSave_GCC.objdump

    RXv3_RegBankSave_IAR/HardwareDebug/
    src/main.lst
    RXv3_Check_FSQRT_DSQRT_etc.lst
    RXv3_Check_NO_FSQRT_DSQRT_etc.lst
    RXv3_RegBankSave_IAR_ex4.lst
    RXv3_RegBankSave_IAR_ex5.lst
    RXv3_RegBankSave_helper.lst

    RXv3_RX72T_Motor_CG_CCRX/HardwareDebug/
    src/RXv3_Check_FSQRT_DSQRT_etc.lst
    src/RXv3_RegBankSave_helper.lst

    RXv3_RX72T_Motor_CG_GCC/HardwareDebug/
    RXv3_Check_FSQRT_DSQRT_etc.lst
    RXv3_RegBankSave_helper.lst
    RXv3_RX72T_Motor_CG_GCC.objdump

    RXv3_RX72T_Motor_CG_IAR/HardwareDebug/
    RXv3_Check_FSQRT_DSQRT_etc.lst
    RXv3_RegBankSave_helper.lst

     

Children
No Data