初めて投稿させていただきます もぐら と申します。
よろしくお願い致します。
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+からのメモリダンプや
プログラムからのリードでは確認することが出来ないのでしょうか?
また、リードするための設定や手順などありましたら教えていただけると幸いです。
チョコです。
出力された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++;}
もぐら さん、こんにちは。NoMaYです。ひょっとしてその場所にブレークポイントを設定されていませんか?> CS+のメモリ表示機能で表示されたデータ:0x30> motファイルのデータ:0x30> プログラムでリードした値:0xFFこれは、私が以前に書いた以下の件(正確にはそのシミュレータ版の事例)ではないかなぁ、という気がするのです。> あと、初学者さんへ伝えたいこととしては、ソフトウェアブレークポイントを設定するとフラッシュメモリの該当箇所の命令が(命令セット上は非公開の)ソフトウェアブレークポイント命令へとデバッガにより書き換えられます。ですので、その時にユーザプログラムで該当箇所を読むとMOTファイルとは異なる値が読めます。(デバッガのメモリウィンドウや逆アセンブルウィンドウではMOTファイルの値(書き換えられる前の値)が表示されます。)
NoMaY様
お世話になっております。
返信ありがとうございました。
イベント表示ウィンドウで確認しましたところ、ブレークポイントは設定されていませんでしたが、過去にタイマ計測のイベントを設定したままとなったおりました。
そのタイマ計測を全てはずした状態で、データ不一致が発生していたアドレスをプログラムでリードしたところ、motファイルと同じ値を読むことが出来ました。
その後、.textfセクションのサムチェックを行い正常終了し、対象セクション全てのサムチェックも正常終了致しました。
お陰様で解決することができました。ありがとうございます。
チョコ様、NoMaY様
お二人のお陰で悩んでいた問題を解決することができました。
また、今回の問題以外にも色々と学ばせていただきました。
誠にありがとうございました。