SH4でFreeRTOS動きますか?

FreeRTOSのサンプルとしてSH7216が公開されていますが、

それを参考にSH4(SH7763)でFreeRTOSを動かすことは可能でしょうか?

できないことはないとは思うのですが、大変な作業でしょうか。

SH4で動かした実績のある方がいらっしゃいましたら幸いです。

よろしくお願いいたします。

Parents
  • 131さん、こんにちは。NoMaYと申します。

    SH4で動かした実績のある人がいないか、忙しくてリプライ出来ないか、といった感じのようなので、SH-2AとSH4のハードウェアマニュアルをざっと見比べてみたのですが、印象としては、1週間ほどの作業ではないかな、といった気がしました。

    ただ、前提として、2020年の今にSH4(SH7763)ということですので、もう既に充分にSH4を使用した開発経験があり、ソースコード資産も充分にあって(難無くmain()の先頭に辿り着けるソースは沢山ある)、ノウハウもバッチリ溜まっている(アセンブラを読み書きするぐらいは(マニュアルを読みながらであれ)難なく出来る)、というぐらいを想定してですけど。

    やることは、SH-2AとSH4のCPUレジスタの種類を見比べて、タスク切り替え時に退避/復帰しなければならないCPUレジスタとして、現存のSH-2AのポートレイヤではケアされていないCPUレジスタに対する退避/復帰を追加する、というものになる筈です。(あと、タスクスタート前にCPUレジスタの初期値を設定している部分に、ケアされていないCPUレジスタに対する初期化を追加すること、です。) ざっと見比べた感じでは、レジスタバンクで複雑になっている部分以外は、そんなに差分は無い印象でした。(コンパイラの通常処理(つまり割り込み処理以外)ではレジスタバンクは使われないと思いましたが、そうではないということであれば結構大きな差分になってしまう、のかも知れませんけれど。)

    今の時代、全部作り込んでからビルドすることは時代遅れでしょうから、まず、現存のSH-2Aのポートレイヤをそのまま使い(ビルドする為の最低限の変更は必要かも知れませんが)、DSP演算も浮動小数点演算もマトリクス演算も使わないようなテストプログラムを作り、タスクスタート前のCPUレジスタの初期化とかタスク切り替え時のCPUレジスタの退避/復帰とか全体的な動作とかデバッガで確認した後、もろもろの処理を追加していくようにするのが良いのではないかな、と思いました。

    [追記]

    SH4にはSSRというものがあるようですね。これは最低限ケアしないと簡単なテストプログラムも動作しないかも知れないです、、、(例外発生時にSRがSSRに退避されるなら、タスク切り替え時に退避/復帰すべきはSRではなくてSSRになるような気がしましたので、、、)

Reply
  • 131さん、こんにちは。NoMaYと申します。

    SH4で動かした実績のある人がいないか、忙しくてリプライ出来ないか、といった感じのようなので、SH-2AとSH4のハードウェアマニュアルをざっと見比べてみたのですが、印象としては、1週間ほどの作業ではないかな、といった気がしました。

    ただ、前提として、2020年の今にSH4(SH7763)ということですので、もう既に充分にSH4を使用した開発経験があり、ソースコード資産も充分にあって(難無くmain()の先頭に辿り着けるソースは沢山ある)、ノウハウもバッチリ溜まっている(アセンブラを読み書きするぐらいは(マニュアルを読みながらであれ)難なく出来る)、というぐらいを想定してですけど。

    やることは、SH-2AとSH4のCPUレジスタの種類を見比べて、タスク切り替え時に退避/復帰しなければならないCPUレジスタとして、現存のSH-2AのポートレイヤではケアされていないCPUレジスタに対する退避/復帰を追加する、というものになる筈です。(あと、タスクスタート前にCPUレジスタの初期値を設定している部分に、ケアされていないCPUレジスタに対する初期化を追加すること、です。) ざっと見比べた感じでは、レジスタバンクで複雑になっている部分以外は、そんなに差分は無い印象でした。(コンパイラの通常処理(つまり割り込み処理以外)ではレジスタバンクは使われないと思いましたが、そうではないということであれば結構大きな差分になってしまう、のかも知れませんけれど。)

    今の時代、全部作り込んでからビルドすることは時代遅れでしょうから、まず、現存のSH-2Aのポートレイヤをそのまま使い(ビルドする為の最低限の変更は必要かも知れませんが)、DSP演算も浮動小数点演算もマトリクス演算も使わないようなテストプログラムを作り、タスクスタート前のCPUレジスタの初期化とかタスク切り替え時のCPUレジスタの退避/復帰とか全体的な動作とかデバッガで確認した後、もろもろの処理を追加していくようにするのが良いのではないかな、と思いました。

    [追記]

    SH4にはSSRというものがあるようですね。これは最低限ケアしないと簡単なテストプログラムも動作しないかも知れないです、、、(例外発生時にSRがSSRに退避されるなら、タスク切り替え時に退避/復帰すべきはSRではなくてSSRになるような気がしましたので、、、)

Children
  • NoMaY様

    回答ありがとうございます、131です。

    まさにSH4を使用した過去の開発環境でFreeRTOSを動かそうとした次第です。
    私個人の技量として十分なノウハウがたまっているとは言えませんが、おっしゃる通りタスクディスパッチ時のレジスタ退避/復元とタスク生成時のレジスタ初期化の部分にたどり着いたところです。基本的にはSH4のマニュアルに記載されている割込み時の処理と同等の処理をすればよいという理解でよろしいのでしょうか。

    また、やり方としてはHewでSH4用のまっさらな環境を作りとりあえずタスクが動くところまでやってみようとしています。
    ご指摘いただいたSSRについても十分理解していないのでそのあたりについても勉強しつつ作業をすすめていきます。

    ご丁寧に回答いただきありがとうございました。