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程度で切り替えてみたいです
・ お遊びです

  • ちょっと思い浮かんだ、ループ切り替え処理の命令数/クロック数を減らせるかも知れない思い付きのメモ

    ・ ループ切り替え管理/作業用にレジスタ一括退避バンクを予約する(但しSAVE命令は1clockだがRSTR命令は3~6clockなので要注意)

    ・ ループ切り替え割り込み発生時はistackはtop位置なのでistackの上位隣接位置にループ切り替え管理/作業用の領域を確保する

  • 倍精度浮動小数点レジスタはレジスタ一括退避バンクに含まれていませんので、現状のままでは退避/復帰されませんけれども、やるとしたらどうすればよいのか、というのは以下のスレッドを参照すれば作り込むことが出来ます。

    FreeRTOS kernelのRXv3-DPFPU port layerの作り方を考えてみようと思います
    community-ja.renesas.com/cafe_rene/forums-groups/tools/f/forum21/6329/freertos-kernel-rxv3-dpfpu-port-layer

    他方、単精度浮動小数点レジスタはレジスタ一括退避バンクに含まれていますので、現状のままで退避/復帰されます。ただ、注意が必要な点として、以下の投稿に書いたことにも関係しますけれども、C言語標準ライブラリのerrnoという変数は退避/復帰されないです。(コードを追加してでもケアした方が良いのかなぁ?、、、)

    SH4でFreeRTOS動きますか?
    community-ja.renesas.com/cafe_rene/forums-groups/mcu-mpu/other_products/sh_family/f/forum15/6540/sh4-freertos/35808#35808