Dinamic Printfが上手くいかない

お世話になっております。

 

e2studio ver7.7.0 

E1デバッガを用いてデバッグをしているのですが、

Dynamic Printfを使用したいのですが、上手くいきません。(ブレークポイントは使用できています。)

エラーメッセージは以下のようなものが表示されます。

Error message from debugger back end:
Warning:\nCannot insert breakpoint 1 in <NULL>() at C:\Desktop\sample.c:2553: Remote failure reply: FFFFFFF5 add software breakpoint\n

どのようなことが原因として考えられますでしょうか。

初心者の質問で申し訳ございませんが、ご教示ください。

  • TOKさん、こんにちは。NoMaYです。#お久しぶりです。

    ブレークポイントは使用出来ているとのことですが、sample.cの2553行目にも設定が出来ますか?出来たとして、ブレークポイントの場所を移動したという旨の警告が出ることなく出来ますか?また、同じく出来たとして、Dynamic Printfで表示させたい式を式ウィンドウに登録した場合に、内容が表示されますか?

    上記の何れかがNGである場合、コンパイラの最適化の設定を、CC-RXを使用中であれば最適化無しに、GNURXを使用中であればデバッグ優先最適化に、もしそのようになっていなければ変更してビルドした後で再度やり直してみるとどうなりますか?(CC-RLやGNURL78だった場合も同様です。)

    逆に、すべてがOKである場合、エラーが表示された時の状況が分かるようなe2 studioの画面コピーを見せて頂けませんか?

    ちなみに、恐らくですが、Dynamic Printfによる表示処理が動作する時にはプログラム実行が数百ミリ秒ほど停止するであろうと、デバッガの内部動作の考察から推測されます。Dynamic Printfを設定する箇所は、そのような停止が起きてもプログラム(特に割り込み処理回り)が誤動作しない箇所に設定する必要があると考えられますので、その点には気を付けた方が良いと思います。

    [追記]

    なお、同様な機能がCS+のAction Eventにもありますが、そちらもプログラム実行が数百ミリ秒ほど停止するであろうと、推測されます。(一応、公平なのが良いかなと、書いておきます。)

  • NoMaYさん。#ご無沙汰しております。

    返事が遅くなってしまい申し訳ありません。

    CC-RXを使用しており、最適化無しに設定しています。

    >ブレークポイントは使用出来ているとのことですが、sample.cの2553行目にも設定が出来ますか?出来たとして、ブレークポイントの場所を移動したという旨の警告が出ることなく出来ますか?また、同じく出来たとして、Dynamic Printfで表示させたい式を式ウィンドウに登録した場合に、内容が表示されますか?

    上記に関してはすべて問題ありません。

     

    エラー画面は以下になります。

    こちらの画面でよろしいでしょうか?#黒塗りの部分はファイルパスです。

    Dynamic Printfは数百ミリ秒ほど停止する可能性があるのですね。

    ありがとうございます。勉強になります。

  • TOKさん、こんにちは。NoMaYです。

    エラーダイアログでは無くて、e2 studio本体の方の画面が見たいです。(エラーの原因となるような何かが見付からないかどうか見てみたいのです。)

    でも、このエラーダイアログからでも分かったことがあります。Dynamic Printfを設定した後、プログラムを実行させようとした時にエラーが発生するのですね、、、(気になるのは、最初の投稿のエラーメッセージにも書かれていたことですが、<NULL>() という表示が気になります。とは言え、現時点では、そこから何かが推測出来る訳ではないのですが、、、)

    私は、RL78のシミュレータでしかDynamic Printfを使ったことが無く、最悪、エミュレータでは使えない、とか、RXでは使えない、とか、そういった可能性も頭の片隅に入れておいた方が良いかな、とも思いつつ、次に確認したいこととしては以下の点です。

    TOKさんの手元で今までに一度でもDynamic Printfが使えたことがありますか?もしも無いのであれば、以下のような単純なプログラムを作成してDynamic Printfが使えるか確認してみると、どうなるでしょうか?

    volatile int dpval;

    void main(void)
    {
        for(;;)
        {
            dpval++; ← ここにDynamic Printfを設定してdpvalの値を"%d"で表示させてみる
        }
    }

     

  • NoMaYさん、回答ありがとうございます。

    エラー画面の認識が異なっており、申し訳ありません。

    >RXでは使えないとか、そういった可能性も頭の片隅に入れておいた方が良いかな、とも思いつつ
    使用できない可能性があるのですね…。

    今回初めてDynamic Printfを使用しているため、動作実績はありません。
    NoMaYさんにいただいたコードを使用してみましたが、さきほどと同じエラーダイアログが発生し、
    Dynamic Printfは使用できませんでした…。
  • TOKさん、こんにちは。NoMaYです。

    RXのシミュレータでDynamic Printfを試すと、以下の画面コピーの通り、使うことが出来ましたので、RXのエミュレータ(もしくはRXやRL78のエミュレータかも知れませんが)では使えない、といったところかと思います。(なお、当方特有の事情で、e2 studioのデバッグプラグインを少し前のバージョンに戻していますので、最新版だとRXのシミュレータでも使えない、という顛末も無くは無いかも知れませんが。)

    ところで、今回、Dynamic Printfを使おうとされている理由は何でしょうか?printfでデバッグ仮想コンソールに出力しようとするとROMサイズをオーバーしてしまうとかでしょうか?(試してみたかった、という理由も考えられますが。)

    RXのシミュレータでDynamic Printfを試すと使うことが出来た(画面コピー)


    Dynamic Printfの設定時にもe2studio⇔rx-elf-gdbの通信にエラー無し(画面コピー)




    Dynamic Printfの設定後の実行開始時にもe2studio⇔rx-elf-gdbの通信にエラー無し(画面コピー)

     

  • NoMaYさん、回答ありがとうございます。
    検証していただきありがとうございます。

    今回、Dynamic Printfを使おうと考えたのはソース上にprintfを実装せずともコンソール上でデバッグが可能であるという情報から、使えたら今後にも便利であると考えたためです。

    printfでデバッグ仮想コンソールに出力する方法でも問題ないと思いますので確認してみます。
  • TOKさん
    ほや です。亀レスで済みません。
    Dynamic printfは、CDTデバッガ共通の仕組みなのでデバイスの種類に関わらず設定まではできます。
    しかしsoftware breakpointを仕掛けようとしてもフラッシュメモリの書き換えができない状況だとご質問のようなエラーになってしまいます。
    ブレークポイントのプロパティ画面でbreakpoint typeをsoftwareからhardwareに変更できれば良いように思いますが…変更できましたっけ?
    (追記)そんなことはできませんでした。GDBトレースを見たらbreakpoint typeがdprintfとなっていて、hwでもswでもない別のタイプとして扱われているようです。

  • ほやさん、回答ありがとうございます。
    返信が遅れてしまい、申し訳ありません。
    Dinamic Printfは使用できそうにないので別の方法を試してみます。