2022年12月25日日曜日

TOPPERS/ASP - RL78版 その6

前回からの続きです。

このテーマを最初からご覧になる場合はこちらからどうぞ。


サンプルプロジェクトの説明

このページ(TOPPERS/ASPのビルドからデバッグまで~サンプルプロジェクトで遊ぼう)を参照してください。

RL78


RL78版カーネルについて

以下、このカーネルにおける備考です。


●割り込み優先度

このカーネルでは、-1(優先度最低)から-3(優先度最高)の3段階の優先度設定が可能です。

RL78の仕様としては、本当はレベル0~3の4段階の割り込み優先度設定が許可されているのですが、一番優先度の高いレベル0が少々クセモノです。

このレベル0は、マスクできない割り込みなのです。

割り込みのマスクは「プログラム・ステータス・ワード(PSW)」というレジスタで行います。

このうち「ISP1」と「ISP0」というビットに注目してください。

これらのビットの操作による効果は、以下のようになります。

PSWレジスタ


ご覧のように最高優先度のレベル0をマスクする手段がありません。

いや、マスクしようと思えばできないこともないのです。

それは「IE」というビットですべての割り込みを無効にしてしまえば良いのです。

しかしながら、これをOSに実装するにはかなりアクロバティックな記述が必要となります。

今回はGCCコンパイラを使いましたが、純正のコンパイラではレベル0用に使用させるレジスタのバンクが存在しないことから多重割り込みにも対応できず、レベル0の割り込みを使用することは半ば禁忌となっています。

このあたりの事情は、「RL78 割り込み レベル0」でググると詳しい方の解説が見つかります。

GCCコンパイラでは、これらの問題は回避できるので、この慣例に従う必要もないのですが、前述の通りアクロバティックな実装が必要なことに加え、そもそも3段階の優先度でも殆どの場合は問題になりませんので、リスクを避け、-1(レベル3)から-3(レベル1)をOS管轄の割り込みとして実装しました。

-4(レベル0)は設定できません。

面倒くさいから!とかではないです…いや、ちょっとそうかも…。


●例外ハンドラ

例外ハンドラとしては一つだけ、BRK例外「BRK命令の実行」のみに対応しています。

この動作は、サンプルプログラムで確認できます。

サンプルプログラム実行中に「z」か「Z」をターミナルで入力すると、以下の命令が実行される仕掛けになっています。

  • asm("brk")


これによりBRK例外が発生し、その様子がターミナルに表示されます。

小文字の「z」と大文字の「Z」の違いは、BRK例外が小文字の場合はカーネル管轄内で、大文字の場合はカーネル管轄外でそれぞれ実行されるということだけです。

デバッグでの用途以外、あまり使い道はないでしょう。


●一部サービスコールは未対応

性能評価用システム時刻取得のための「get_utm()」サービスコールは未実装です。


「RL78」は「H8」より優れているのか?

同じルネサスエレクトロニクスの16bitマイコンである両者。

H8の方は淘汰されてしまった一方、RL78は今も生き延びています。

実際、RTOSを移植してみて分かったことは…。


H8の方が全然使いやすいじゃん!


あくまで個人的な好みですよ?

RL78は、ニーモニックも往年の名CPU「Z80」の亜種といった感じで古臭いし、元々8bitから進化した「78K0R」の後継だけあって、16bitへの拡張がムリクリといった感じでスマートではありません。

CPUの世界においては、優れたアーキテクチャが必ずしも市場において勝利するとは限らないことは歴史が示している(「8086 vs 68000」など。インテル好きな方はごめんなさい…。)ところなのですが、それは違うメーカーの製品同士の話。

同じメーカーで、なぜRL78が勝ち残ったのかは謎ですね~。

(ルネサスエレクトロニクス社内で、旧日立と旧NECの血みどろの派閥抗争の結果?などと邪推してみる…。)

とはいえ、このRL78、Z80を使い慣れているプログラマーにとっては使い勝手は非常に良いです。

低消費電力の点でも大変優れています。

そういった特徴から、既に前身の78K0Rの時代から、H8よりも多くの固定客が付いていたということなのでしょう。

多分、大量に買ってくれる「車載」とかの分野でね…。


ライセンスについて

このカーネルは「TOPPERSライセンス」で配布しております。

無償ですが、使用に関しては自己責任です。

このカーネルを商用利用するチャレンジャーな方場合は、このリンク先の条項に従ってください。

ちなみに、商用利用ならば商用の製品をオススメしたいところなんですが…。

有名どころでは、株式会社ユビキタスAI様の「TOPPERS-Pro/ASP」という商用の実装がありました。

私は使う機会がなかった(会社はソフトウェア、特にミドルウェアやOSは絶対買ってくれない…)のですが、こちらはRL78を含む多くのアーキテクチャに対応していて、すごく良さそうだったんです。

しかし、久し振りにWebページを見てみるとこの「TOPPERS-Pro/ASP」、「当製品は、新規販売を終了しております。」って書いてありますね~。

後継の「TOPPERS-Pro/ASP3」は今でも売ってますが、こちらだとRL78版が無いんですよね。

まあ、こういうRTOSは製品サポートのためのリソースを相当に食いますから、少しでも需要が下がれば販売打ち切っちゃうのは仕方がないですね。

とはいえ、まだまだ使われているCPUなのだから、需要が全く無いはずもなく、RTOS無いと不便な思いをする人もいるかもだし…。

そういう意味では、今回のRL78版の記事にも少しは意義があるのかなと。

今後も頑張ってメンテナンスしていきます。


<終わり>

0 件のコメント:

コメントを投稿

TOPPERS/ASP - Arduino UNO R4版 その7

前回からの続き です。 このテーマを最初からご覧になる場合は こちら からどうぞ。 プログラムの転送とデバッグ ターゲットの「Arduino UNO R4」とデバッガの「E2 emulator Lite」を 前々回 作成したケーブルで接続します。 こんな感じ。 これからTOPPE...