同一のソースプログラム群, RL78/G13-100LEAFBでは正常動作 ,RL78/G13-100LLAFBでは誤動作

はじめて投稿いたします。

nakaiと申します。

試作で汎用基板(RL78/G13-100LEAFB)で開発したプログラムを、試作基板RL78/G13-100LLAFBで

動作させたところ、誤動作してしまいます。

開発環境:e2studio, gcc 

同一のソースプログラム群をビルドしデバッガ(E1)経由で動作させたところ

現象としてはプログラムの飛び先がおかしくなります。

例えば、関数のあるアドレスを静的にテーブル化して

関数コールした場合にあらぬところにジャンプします。

見てみると、そもそもテーブルに正しい飛び先が格納されていません。

 

汎用基板と試作基板にI/Oデバイスは違いますが、I/Oデバイスアクセスの以前のところで

 

トラぶっているようです。

 

この様な現象で解決の糸口がつかめていません。

チェックする項目をご教示頂きたく、お願い致します。

Parents
  • 皆様 ご教示ありがとうございます。

    RL78/G13-100LEAFB のプロジェクトも、RL78/G13-100LLAFB のプロジェクトもマップは
    CPUの設定は変えていますが同じでした。

    プログラム容量は64kを超えていません。

    とび先がおかしくなるアドレスは0FD8F2Hで0272Hと書かれなければいけないはずが223AHと書かれています。

    気になったのは、データが化けないRL78/G13-100LEAFBでは0FD8F2Hがミラー領域(0F2000H~FEEFFH)内ですが
    データが化けるRL78/G13-100LLAFBではミラー領域(F3000H~F7EFFH)外であることです。

    プログラムではミラー領域を意識せずに作成し、CPUの設定をすれば勝手にマッピングされるものだと
    考えていたのですが間違っているのでしょうか?

    ご教示お願いいたします。
  • チョコです。
    >とび先がおかしくなるアドレスは0FD8F2Hで0272Hと書かれなければいけないはずが223AHと書かれています。
    ここは,明らかにメモリ空間が異なる部分ですね。このアドレスをどのように定義し,参照しているかが気になる
    ところです。
  • チョコ様 皆様
    e2 studioはプロジェクト設定のデバイス名を変更してもセクションの
    配置アドレスを自動的に付け直すことはなく、セクションのメモリー領域の設定を
    以下に変更するようにアドバイスをいただきました。

    開始アドレス   終了アドレス
    VEC   0x00000       0x00003
    IVEC  0x00004 0x000BF
    OPT 0x000C0 0x000C3
    SEC_ID 0x000C4 0x000CD
    OCDSTAS 0x000CE 0x000D7
    OCDROM 0x000D8 0x7FFFF
    ROM 0x000D8 0x7FDFF
    MIRROR 0xF3000 0xF7EFE
    RAM 0xF7F00 0xFFEFE

    しかしながら、まだ、ジャンプ先をミラー領域外の0x0FD8F2Hに書き込み
    データ化けしています。

    上記以外にも設定が必要なのでしょうか?

    ご教示お願いいたします。
  • > しかしながら、まだ、ジャンプ先をミラー領域外の0x0FD8F2Hに書き込み
    データ化けしています。

    ビルド時に生成される .map ファイルの

    > Memory Configuration
    >
    > Name Origin Length Attributes
    > VEC 0x00000000 0x00000004
    > IVEC 0x00000004 0x000000bc
    > OPT 0x000000c0 0x00000004
    > SEC_ID 0x000000c4 0x0000000a
    > OCDSTAD 0x000000ce 0x0000000a
    > OCDROM 0x0007fe00 0x00000200
    > ROM 0x000000d8 0x0007fd28
    > MIRROR 0x000f3000 0x00004eff
    > RAM 0x000f7f00 0x00007fff
    > *default* 0x00000000 0xffffffff

    等の結果はどうなってますか?
  • fujita様 皆様

    mapファイルは新しい設定が反映されています。
    以下に示します。

    Name Origin Length Attributes
    VEC 0x00000000 0x00000004
    IVEC 0x00000004 0x000000bc
    OPT 0x000000c0 0x00000004
    SEC_ID 0x000000c4 0x0000000a
    OCDSTAD 0x000000ce 0x0000000a
    OCDROM 0x0007fe00 0x00000200
    ROM 0x000000d8 0x0007fd28
    MIRROR 0x000f3000 0x00004eff
    RAM 0x000f7f00 0x00007fff
    *default* 0x00000000 0xffffffff

    しかしながら、化けているジャンプ先が格納されるアドレスはROMでは0xD714Hに
    RAMでは0xFD714H に格納され ミラー領域から外れています。
  • 皆様

    MAPでは

    .rodata 0x0000d4f8 0x412
           0x0000d4f8 . = ALIGN (0x2)

    となっており、0xD714H に書かれたデータがせっかくのミラー設定した領域に行かずに
    単純にFD714Hと頭にFがつくだけみたいです。

    ジャンプ先をミラー領域にいれるのはどうするのが正しい方法なのでしょうか?
    ご教示お願いいたします。
Reply
  • 皆様

    MAPでは

    .rodata 0x0000d4f8 0x412
           0x0000d4f8 . = ALIGN (0x2)

    となっており、0xD714H に書かれたデータがせっかくのミラー設定した領域に行かずに
    単純にFD714Hと頭にFがつくだけみたいです。

    ジャンプ先をミラー領域にいれるのはどうするのが正しい方法なのでしょうか?
    ご教示お願いいたします。
Children
No Data