デバッグ中に変数の中身を変更するような機能がありますか

stlと申します。

e2 studioのデバッグの機能で、デバッグ中に変数の中身を変更するようなことは出来るのでしょうか?

例えば、LEDの動作確認のため、PWMの値を少しずつ変化させていきたいのですが、そのようなことが出来る機能がありますか?

Parents
  • プログラム無改造でそういうことは多分できないです。


    止めずにデバッグできる機能があっても例えばPWM値をセットする大元の変数を計算してセットする処理が周期的に変数を書き込むだろう作りの場合、デバッガで書き換えられてもすぐにそれは内部処理の変数変更により上書きされるからです。今書いた話はデバッガで書き換えができる場合でもそもそも無改造ではできないという話であって、RAマイコンでそういうデバッグができるできないの話ではないです。

    なお、RAはARMマイコンなのでETMというユニットを搭載しているのでリアルタイムトレースはできると思います。でも、e2studio+E2などでできるかは別の話です。ARMマイコン向けはいろんな会社がデバッグツールを出しているのでルネサス以外でも便利なのがあるかもです。

    https://www.renesas.com/jp/ja/document/mat/chip-debuggers-performance-property

    https://www.computex.co.jp/lp/p4_unstop.htm

  • お答えいただきありがとうございます。

    デバッガの機能としては出来なさそうですね。

    ARMセミホスティングという機能で、scanfを使用して、値の変更を出来るようにしようかと考えています。

  • GCCの場合、_isatty, _write, _read, _close, _lseek, _fstatを実装してやるとprintfとscanfが使えるようになります(他社マイコンですがインフィニオンのXMC4800ではUSBのVCOMをこれでprintfを有効にしてデバッグに使ってます。RAはGCCなので先に書いた関数を定義してやればできるはず。RXマイコンでCC-RXだとまた別のやり方)。これくらいの内容だとセミホスティングじゃなくてもいいんじゃなかろうか?

  • E2やE2 Liteだとセミホスティング機能が利用できないかもですね。ググってもSegger社のJ-Linkの話しか見当たらない。持ってるなら問題ないですけどないなら購入ですね。製品で使える機能を分けてソフトウェアを提供しているので間違えないように選んでください。

    https://ja-support.renesas.com/knowledgeBase/21077326

    https://www.segger.com/products/debug-probes/j-link/#c216543

  • e2 studioのヘルプを確認すると、プロジェクトの設定で、デバッガーをe2 liteが選べるように書いてあるので、使えるのではないかと思っているのですが、どうなんでしょうか?

    「e2 studio ユーザーガイド > デバッグに関する機能 > RA, RE, RZ, Synergy のデバッグ > ARM セミホスティング(Printfデバッグ等)」
    >>_isatty, _write, _read, _close, _lseek, _fstatを実装してやると
    これらを実装するというのはどういう意味でしょうか?
  • gccではnewlibというライブラリがセットで使われprintfなどの標準的な関数を利用できますが、システムコールが未実装になっています。先に書いた関数はその未実装なシステムコールでそれらを自分で実装することでprintfやscanfが必要なシステムコールが揃い使えるようになるということです。なおセミホスティングでのprintfやscanfもエミュレータデバッガを使うためのシステムコールがあるというだけです。

    実装の指針としては空いているUARTやUSBのVCOMに向けて読み書きですね。printfとscanfだけなら_writeと_read以外は適当な実装でもやりたいことはできます。

  • GCCの場合はリンカオプションで
    --specs=rdimon.specs
    が指定されていればセミホスティング用のライブラリがリンクされて
    readやwriteを自分で書かなくてもstdio関数がセミホスティング経由で使えるようになります。
    RAのプロジェクトだとnano.specsのようなチェックボックスがないのでその他のオプションの欄に直接記述してください。
    (RAのヘルプにはここまで書いてありません。RZ/A等の項目を参考にしてください)

    --specs=rdimon.specsの指定でリンクエラーは大体なくなるはずですが、
    関数がないとのリンクエラーになった場合は関数の実装が必要です。
    システムコール関数であれば以下にスタブ関数の例があるので
    コピペして作っておけば回避できます。
    https://sourceware.org/newlib/libc.html#Syscalls
    ※ -specs=nosys.specsでも回避はできるかもしれませんがビルド時に警告が出ます。

Reply
  • GCCの場合はリンカオプションで
    --specs=rdimon.specs
    が指定されていればセミホスティング用のライブラリがリンクされて
    readやwriteを自分で書かなくてもstdio関数がセミホスティング経由で使えるようになります。
    RAのプロジェクトだとnano.specsのようなチェックボックスがないのでその他のオプションの欄に直接記述してください。
    (RAのヘルプにはここまで書いてありません。RZ/A等の項目を参考にしてください)

    --specs=rdimon.specsの指定でリンクエラーは大体なくなるはずですが、
    関数がないとのリンクエラーになった場合は関数の実装が必要です。
    システムコール関数であれば以下にスタブ関数の例があるので
    コピペして作っておけば回避できます。
    https://sourceware.org/newlib/libc.html#Syscalls
    ※ -specs=nosys.specsでも回避はできるかもしれませんがビルド時に警告が出ます。

Children
No Data