こんにちは。いつもお世話になっております。ロジナカです。現在STOPモードを含むコードのデバッグをE2 Liteで行っているのですが、お聞きしたいことがありますので教えて頂けますと助かります。
質問:下のコードは一旦STOPモードに入り、外部割込み(INTP0)の立ち上がりエッジでSTOP解除、実行を再開というものです。
これをE2 Liteで ”一切のブレーク無し”でRUNさせるとSTOPで止まらずそのままSTOPの次の命令を実行してしまいます。E2 Liteを外してエミュレータ無しで実行させるとSTOPで一旦止まり、外部割込みで実行再開することを確認しています。
E2 Lite上でデバッグした場合、そうなってしまうものなんでしょうか?
一応このフォーラムの過去ログをサーチして似た質問がないか確認しましたが、ステップ実行についての記事は発見できましたが、今回のような質問に該当するものは見当たりませんでしたので書込みさせて頂きました。
宜しくお願いします。
コードは:
DI(); //すべての割込み禁止 PIF0 = 0; // 割込みフラグクリア PMK0 = 0; // 割込み許可(マスク解除) // ** STOP ** STOP(); // STOP命令 // ** RESUME ** PMK0 = 1; // 割込み禁止 PIF0 = 0; // 割込みフラグクリア EI(); // 割込み再開
過去の関連質問はこれでしょうかね?https://community-ja.renesas.com/cafe_rene/forums-groups/beginners/f/002-2095199602/4447/rl78-stop
Yamamoto様はい。そのとおりです。ただ今回の私が聞きたいことと趣旨が違いますので新規に質問させて頂きました。
質問はエミュレータ「あり」と「なし」で同じ振る舞いにならないから、その理由がE2Liteなため?かという事ですよね?https://www.renesas.com/jp/ja/document/mat/e1e20-emulator-e2-emulator-lite-additional-document-users-manualnotes-connection-rl78for-rl78g10
これの注意事項は読まれていますか?デバッグ機能の使い方によってはSTOPモードが解除されてしまうようです。
Yamamoto様
ありがとうございます。質問の趣旨としてはほぼ仰せのとおりで、しいていうなら、「エミュレータの有無に関わらず振る舞いが一緒になって欲しい。そのためにはどうしたらいいのか?どこかCS+の設定変更(すみません、"開発環境は何?"が言ってなかったですね..) でそれが実現できるのか?」ということです。ご指摘のマニュアルは一応目を通してはいたのですが.....改めて見返していい気づきを頂きました。「強制ブレーク」「ステップ事項」「ブレーク設定による一瞬ブレーク」→心当たり無しですが、「疑似RRM」「疑似DMM」現在CS+の変数ウォッチで、リアルタイム変数更新をイネーブルにして使ってるのですが、確か、リアルタイム変数更新は疑似RRM,DMM機能を利用してましたよね。ひょっとしてそれが原因ですかね?後でリアルタイム変数ウオッチをディセーブルにしてどう変化するか試してみたいと思います。ご指摘ありがとうございます!!
何に影響するか、何に影響されるか、が分かりにくいところがある機能の確認は大変ですよね。エミュレータありだとSTOPモード中の消費電力が大きくなるとか(STOPモードは消費電力削減の機能で使われるので)。
Yamamoto様実験しました。私の予想はビンゴでした。やったことは:●スマートコンフィグレータで「疑似RMM DMM」を「使用しない」にする。
●RL78 E2 Liteのプロパティ→デバグツール設定→実行中のメモリアクセス→「実行を一瞬中止してアクセス」「実行中に表示更新を行う」両方とも”いいえ”にする。
です。これでエミュレータ有無によるSTOP命令での振る舞いに差異がなくなりました(勝手にSTOP解除することはなくなりました)解決の為のヒントを下さいましてどうもありがとうございました。