EXCEPTVECTの移動

RX65Nでプログラムを作成中のkhiraoka5です

遠隔でファームウェアを交換する必要があるため、FLASHを分割して2つのプログラムを

入れることにしています。(デュアルバンクは使用しない)

そこで、例外ベクターテーブルEXCEPTVECTの位置を0xffffff80固定から

プログラムセクター(P)の後に移動しました。

動作しているのですが、このようなこと行ってもいいのかちょっと不安があり投稿しました。

アドバイスお願いします。

  • わわいです
    そのEXCEPTVECTというセクションですが、おそらく固定ベクタエリアだと思われます。
    それであれば、一意にアドレスが決められていますんで、別のアドレスに移動させるとダメだと思われます。
    ソースを確認してみてください
  • RX65Nのハードウェアマニュアルによると、リセットベクター以外は、EXTBからのオフセットでベクターが格納されるとなっています。
    FITのBSPで生成されるresetprg.cに
    set_extb((void *)__sectop("EXCEPTVECT"));
    があり、ここでEXTBを設定しているので、もしかして、どこに配置してもいいのかなと思ったのですが。
  • RX210のマニュアルでは、確かに固定ベクターとなっています。
    RX65Nのマニュアルでは、可変となっているように見えます。
    もしかして、rxv1とrxv2で変更があった個所でしょうか?
  • わわいです
    マニュアルにそう記載されているなら、リセットベクタ以外はどこに配置しても良さそうですが、ベクタテーブルは配置アドレスに制限があることが多いのでそこら辺よく確認しといてください。
    んで、リセットベクタはそのアドレスに存在している、ということをしっかり確認しておきましょう。

    #あるあるなのが、リセットベクタまで考え無しで移動してしまって、
    #起動に時間かかるのなんで?となってしまうパターンだったり
  • EXTBはRXv2で追加されたCPUの制御レジスタで、例外ベクタテーブルの先頭アドレスを指定するレジスタです。
    RXv1では固定ベクタテーブルでしたが、RXv2で変更されています。
    RX64M、71Mでも同様です。
    EXTBはINTBと同様、4Byte単位のアドレスならどこにでも設定可能です。
    リセットベクタ云々書かれていますが、初期のコード生成で別に作成されているので気にする必要はありません。
  • windypon さん
    アドバイスありがとうございます。