CS+のメモリ表示についての質問

初めて投稿させていただきます もぐら と申します。

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

RL78G13マイコンをE2シミュレータLiteを使用してCS+でデバッグを行っております。

CS+にてメモリ表示機能([表示]->[メモリ])を使ってコード・フラッシュメモリを確認してみたところ、

ベクタテーブルの0x00000番地がダウンロードしたmotファイルと異なるデータとなっておりました。

■ダウンロードしたmotファイルのデータ

 S1130000D800FFFF00000000000000000000000016

■CS+からメモリ表示機能を使用した時に表示されたデータ

 00000 | D0 00 FF FF 00 00 00 00 00 00 00 00 00 00 00 00

また、プログラムで0x00000番地を直接リードしてみましたが、こちらもメモリ表示機能と同じく”0xD0”が取得されました。

そこで質問させていただきたいのですが、RL78G13マイコンのコード・フラッシュメモリはCS+からのメモリダンプや

プログラムからのリードでは確認することが出来ないのでしょうか?

また、リードするための設定や手順などありましたら教えていただけると幸いです。

Parents
  • チョコ様
    お返事ありがとうございました。
    情報が不足しておりまして申し訳ありませんでした。
    サムチェックの領域はコードフラッシュ内の0x0000番地~0x300D番地までを対象としておりまして、
    1バイト加算の総和をチェックサム値としておりました。
    上記のサムチェックをCS+のシミュレータで実行し、motファイルにチェックサム値として埋め込み、
    ROMで動作したところ、サム値が一致しなかったことから、どこのセクションで不一致が発生するかの切り分けとして、
    セクション毎に上記と同じ手法(アドレス範囲の変更)でサムチェックを実施しました。
    その時に、”.textf”セクションに該当します0x01A0番地~0x0D53番地におきまして、チェックサム値の不一致が発生したことから、
    先日の質問をさせていただきました。
    コードフラッシュのアクセス方法としましては__forをつけて20bitアクセスできるようにしております。(下記がサムチェックのプログラムとなります)
    かふぇルネ様の検索機能で同じような質問を漁ってみたのですが、答えにたどり着けずにいます、、
     
    --------------------------------
    #define D_ROM_CHK_STR 0x000001A0
    #define D_ROM_CHK_END 00000D54
    #define D_CHK_SUM 0x00017DFC
     
    unsigned long  endadr;
    unsigned long  chkadr;
    unsigned long  sumchk = 0;
     
    chkadr  = (unsigned long)D_ROM_CHK_STR;
    endadr = (unsigned long)D_ROM_CHK_END;
     
    while( endadr >= chkadr )
    {
     sumchk += (unsigned char)(*(__far unsigned char *)chkadr);
     chkadr++;
    }
     
    gChkSumView = sumchk;
     
    if(*(__far unsigned long *)D_CHK_SUM != sumchk)
    {
     while(1);

    }

Reply
  • チョコ様
    お返事ありがとうございました。
    情報が不足しておりまして申し訳ありませんでした。
    サムチェックの領域はコードフラッシュ内の0x0000番地~0x300D番地までを対象としておりまして、
    1バイト加算の総和をチェックサム値としておりました。
    上記のサムチェックをCS+のシミュレータで実行し、motファイルにチェックサム値として埋め込み、
    ROMで動作したところ、サム値が一致しなかったことから、どこのセクションで不一致が発生するかの切り分けとして、
    セクション毎に上記と同じ手法(アドレス範囲の変更)でサムチェックを実施しました。
    その時に、”.textf”セクションに該当します0x01A0番地~0x0D53番地におきまして、チェックサム値の不一致が発生したことから、
    先日の質問をさせていただきました。
    コードフラッシュのアクセス方法としましては__forをつけて20bitアクセスできるようにしております。(下記がサムチェックのプログラムとなります)
    かふぇルネ様の検索機能で同じような質問を漁ってみたのですが、答えにたどり着けずにいます、、
     
    --------------------------------
    #define D_ROM_CHK_STR 0x000001A0
    #define D_ROM_CHK_END 00000D54
    #define D_CHK_SUM 0x00017DFC
     
    unsigned long  endadr;
    unsigned long  chkadr;
    unsigned long  sumchk = 0;
     
    chkadr  = (unsigned long)D_ROM_CHK_STR;
    endadr = (unsigned long)D_ROM_CHK_END;
     
    while( endadr >= chkadr )
    {
     sumchk += (unsigned char)(*(__far unsigned char *)chkadr);
     chkadr++;
    }
     
    gChkSumView = sumchk;
     
    if(*(__far unsigned long *)D_CHK_SUM != sumchk)
    {
     while(1);

    }

Children
  • チョコです。

    出力されたMAPファイルの.textfにGAP(コードがない部分)はないでしょうか。

    motファイルでGAP部分がどんな状態になっているかが気になります。

  • もぐら さん、こんにちは。NoMaYです。

    どうも説明と#defineとwhile条件(もしくは代入式)が一致していないように思います。

    > 0x01A0番地~0x0D53番地におきまして、

    #define D_ROM_CHK_STR 0x000001A0
    #define D_ROM_CHK_END 00000D54 ← (1) D53の間違いでは?

     

    chkadr  = (unsigned long)D_ROM_CHK_STR;
    endadr = (unsigned long)D_ROM_CHK_END;  ← (3) それとも、-1するのを忘れたとか?

    while( endadr >= chkadr ) ← (2) あるいは、こちらが > の間違いとか?
    {
        sumchk += (unsigned char)(*(__far unsigned char *)chkadr);
        chkadr++;
    }