現在、Renesas Debug Virtual Console画面にprintf出力にてログ出力を行っております。
https://community.renesas.com/cafe_rene/forums-groups/mcu-mpu/rx/f/forum5/54507/renesas-debug-virtual-console/194027
しかし、ログの量が多いと、Renesas Debug Virtual Consoleに表示しきれないようです。表示バッファの拡張を行うことはできるのでしょうか?
おそらく、解決したい課題はprintfが送信を待った状態で詰まっているという状態かと思います。
まず、データの平均出力レートを高めるところから始めたらいいと思います。
r_bspのBitrate for serial terminalですね。
もし、printf処理は定期的で、バッファに貯めて、バックグランドでSCI(内部ではSCIで送信しています)に順番に送るような実装にするのがいいと思います。
Serial terminal select=Disabled
Enable user stdio charget function/Enable user stdio charput function
これを設定して自分でprintfやputsから1バイトごと受け取って、FIFOに突っ込んで、SCIに送信させるようにすればできます。もちろん、FIFOは転送速度を上げることはできません。あくまで、ピークを吸収する目的になります。
あとは処理を分けることが必要です。データが発生する場所が割り込みハンドラでもprintfはバックグランドで処理できるようにデータの受け渡しなどを工夫しましょう。
回答ありがとうございます。
言葉たらずで申し訳ありませんが、今回の問題はprintfが送信を待った状態で詰まっているという状態ではありません。
プログラムRUN直後にRenesas Debug Virtual Consoleに表示されていたログが、ログ量が増えるにつれ消えてしまうようです。
このため純粋にRenesas Debug Virtual Consoleの問題かと思います。
要望としては全ログを閲覧・保存したいです。
printfの出力先を自前でSCIにしてPythonやCで受け取り用のプログラムを作ればいいと思いますよ。
Teratermとかでも済むならそれも手だと思います。
もし、低層のIO処理の追加方法がわからないなら、SCIを追加してprintf内容をsprintfにてバッファに出力してそれをスマートコンフィギュレータ提供のAPIで送信したらいいと思いますよ。
uint32_t timeout = 0; // timerの割込みでデクリメントされる void main(void) { R_Config_TPU0_Start(); R_Config_SCI1_Create(); R_Config_SCI1_Start(); while (1) { if (0 == timeout) { timeout = 1000; static uint32_t id = 0; static char tmp[64]; long n = sprintf(tmp, "Hello RX World! %08lX\r\n", id); (void) R_Config_SCI1_Serial_Send((uint8_t*) tmp, (uint16_t) n); id++; } } }
文字バッファはstaticをつけるの忘れないでください。
送信完了まで実データが静的に確保されている必要があります。
「ウィンドウ」メニュー→設定の「実行/デバッグ」→「コンソール」(Window->PreferencesのRun/Debug->Console)の設定はVirtual Consoleにも影響を与えるようなので調整してみてください。大きくし過ぎると重くなったり動かなくなったりするかもしれません。
ご回答ありがとうございます。
教えていただいた方法で無事Virtual Consoleのバッファが拡張できました。また、全てのログをとることが出来ました。
いつも的確なアドバイスをありがとうございます。