HI7000シリーズ:OS内でのVBR初期化(設定)値について

HI7000シリーズでは、

OS起動中に、事前に設定されたベクターテーブル情報を関連づける為に、VBR設定を実施している認識です。

ただ、使用するマイコンによっては、VBRアドレス設定可能エリアが決まっていますので、

VBR配置には気を付けなければならない認識です。

 

OS内では、どのようにVBRアドレスを割り出しているのかご存知ないでしょうか。

(恐らく、ベクターテーブルアドレスのシンボルから先頭アドレスを引っ張り出して、VBRアドレス設定していると思うのですが、マニュアル記載がなく、困ってます)

  • わわいです
    HIなんたらは使ったことはありませんが。。
    ベクタベースアドレスはベクタテーブルをどこに置くかで変えるもので、それは作る人の考え方次第でしょ。
    固定でよければROM領域(あるいはデフォルトのまんま)だし、逐次変える必要があるならRAM領域になるし、ということで。
    私は(SHですが)割り込み応答の高速化を狙って、あえて内蔵RAM領域に割り当て、各デバイスのイニシャル時に該当ベクタをセットしていく、というやり方してましたね
  • わわい様

    仰る通り、VBR配置場所は、作り手如何となります。
    ここでの確認は、HI7000 kernelがどのようにしてVBR設定を行っているかの確認になります。

    ご指摘の通り、
    高速動作・応答を期待しております為、RAM(DDR)上での動作・RAM上にVBR設定を意図しています。
    しかし、マニュアル上は、HI7000 kernelが設定する記載はあるものの(+OS起動後は、ユーザではVBR設定を禁止されています)、どのように決定されるのか記載がない状況であり、確認させて頂いております状況です。
  • わわいです
    HI7000ってITRONだったのねw
    ベクタテーブル位置を自分の好きにしたい、というんであれば、そのOSのソースを手に入れて自分でどーにかするしかないんじゃないかと。
    どのように決定されるかってのはそのOSの作成者でもないと答えようもないし、それを答えられたところでどーしよーもないんじゃないんでしょうか。
    #せいぜい自分でVBRの値読み込んでどこにあるのか確認する程度で

    一度、SH-2上でTOPPERSをポーティングしたりしたことがありますが、どーしてもと言うなら、そこら辺から攻めて見るのもいいんじゃないかと。
  • わわい様

    >OSのソースを手に入れて自分でどーにかするしかないんじゃないかと。
    確かに、ソース提供までは求めた事ないですね。ただ、lib提供なので、コード入手は難しいかもしれません。
    HI7000 kernel が、TOPPERS様と考え方・作りが同じか否かもグレーですね。(ITRONとしては、同じ考え方だと思いますが) 悩ましい。
  • わわいです
    LIBでの提供であれば、そこら辺のメモリ配置はユーザ側のセクション設定である程度自由になるのでは。
    マニュアル(かなんか?)でそこら辺の記述はないでしょうか

    ベクタテーブル単体だけ、は無理としても、定数領域やプログラム領域をRAMに持っていくってことはできるんじゃないかと。
    TOPPERSではベクタテーブルをイニシャル時に設定するような作りになってたので、もしかすればそいつでもRAM領域になってそ~な気もしなくもないですが。
  • わわい様

    >LIBでの提供であれば、そこら辺のメモリ配置はユーザ側のセクション設定である程度自由になるのでは。
    ご指摘の通り、ベクターテーブルセクション or ベクターテーブルから、アドレス解決は出来るので、
    上記解決方法を以て、VBR設定していると推測しております。
    しかしながら、
    ・VBRアドレス解決がどのように解決されているのかがマニュアル記載がない事
    ・使用するマイコンのキャッシュ構成上、VBR配置位置に制限がある事
    から、解決に至っていません。
  • https://www.renesas.com/ja-jp/products/software-tools/software-os-middleware-driver/itron-os/hi7000-4-for-sh-family.html#productInfo

    製品パッケージ内容

    仕様 説明 備考
    カーネルソースプログラム カーネル本体ソースプログラム ソースコード付き量産契約の場合にのみ提供

    とあるので契約次第では直接参照もできると思いますが、VBR ならリセット処理から割と早期に設定してると思うので、デバッガで見て行ってもすぐ見つかるのでは?

    それより

    > (恐らく、ベクターテーブルアドレスのシンボルから先頭アドレスを引っ張り出して、VBRアドレス設定していると思うのですが、マニュアル記載がなく、困ってます)

    ユーザの見えないところで行われる VBR の設定で困る状況がわかりません。

  • fujita nozomu様

    御連絡有難うございます。

    >VBR ならリセット処理から割と早期に設定してると思うので、デバッガで見て行ってもすぐ見つかるのでは?
    VBRアドレスがどこに配置されているのかはデバックで把握しております。
    そうですね、契約を見直してみます。

    >ユーザの見えないところで行われる VBR の設定で困る状況がわかりません。
    VBRがどこに設定されるのか不安に感じない事の方が、恐ろしいと感じています。
    可能性の話ですが、VBRがROM/RAMマッピング外に設定されていた場合は、予期しないリセットを誘発してしまうと考えています。また、キャッシュ使用、MMU使用によって配置場所が限定される認識です。
    その為、OS内でVR設定される記述がある以上、どのようにアドレス解決されるのかを確認したい次第です。
  • わわいです
    なんかよーわかりませんが、予期しないリセットを誘発するとかなるなら、OSの不具合なので、カネ払ってそれを使ってるなら、堂々とサポートしてもらえばいいんじゃないでしょうか。

    #ちまたにあふれるPCやらタブレットやらスマホやら、ベクタテーブルの位置が公開されてないからと不安?
  • わわい様

    >ベクタテーブルの位置が公開されてないからと不安?
    製品開発する上で、VBRアドレス決定が不確定であれば、通常の割り込みは勿論、予期しない割り込み検知ケースへのフェール対策が不十分になると考えています。

    >堂々とサポートしてもらえばいいんじゃないでしょうか。
    はい、確認してみます。
    もし、どなたかご存知でしたらお聞きしたい想いで本件を投稿いたしました。