FIT R_SCI_RXモジュールでprintfをfrom inside interrupt routine内から行えるかどうか考えてみるスレッド

こんにちは。NoMaYです。

最近、以下のスレッドに関わったのですが、そういえばFITのR_SCI_RXモジュールでは送信リングバッファを使えますので、仕組み上は、割り込みルーチン内からでもprintfを使うことが出来ても良さそうな気がします。ということで、いつものように、ちょっと好奇心からスレッドを立ててみました。いつものように、ぼちぼちと続きます。

Config_ICUでのIRQの設定について
community-ja.renesas.com/cafe_rene/forums-groups/beginners/f/002-2095199602/9604/config_icu-irq

本当は、割り込みルーチン内からデバッグコンソールへ出力する方法を考えたいところですけれども、以下の理由で今回は保留です。

(1) 割り込み駆動方式でデバッグコンソールへ文字書き込みする方法が無い(少なくとも公開されている情報では出来ない)
(2) ポーリング方式でデバッグコンソールへ文字書き込みする方法では割り込みルーチン内で使うには性能上の懸念がある

[追記]

こんなことを考えたのも、以前に別スレッドにURLを書いた個人事業主?さんが、こういう記事を執筆されていましたのを、たまたま見掛けたからかも知れません。

RAファミリprintfデバッグ3方法
2022年10月7日 WithHappy
happytech.jp/wordpress/2022/10/07/ra-family-printf-debug-3-method/
 

Parents
  • くだんの関わったスレッドについては、以下のようにすると症状を第三者向けに提示出来るかも、と思いました。(オシロ無しでも。)

    (1) 1msecのtick割り込みを用意して割り込み毎にカウントアップするtickカウンタを用意する(割り込み発生回数計測用)
    (2) 100μsecでカウントアップするfreerunカウンタを用意する(真の経過時間計測用)
    (3) tick割り込みの中で以下を行う
    (3') エンコーダのカウント値が増減していたら以下の値を配列に記録する
    (3'') tickカウント値
    (3'') freerunカウント値
    (3'') エンコーダのカウント値の増減値
    (4) 適当なところでプログラム実行を止める
    (5) デバッガのメモリウィンドウに記録された配列の内容を表示させる

    メモリウィンドウで確認し易いよう配列にする構造体は以下のようにする。配列サイズは200個程で良いかと思う。(1周で40カウントのロータリエンコーダで、数回転で症状が出るようなので。)

    struct encoder_debug_info {
        uint32_t tick;
        uint32_t time;
        uint32_t delta;
        uint32_t padding;
    }

    ただ、気掛かりは、RAMの残りが大変少なかった筈なので、3200バイト確保出来るか微妙でもあり、その場合には、uint32_tではなくてuint16_tにするなどした方が良いかも知れない、というあたりです。

Reply
  • くだんの関わったスレッドについては、以下のようにすると症状を第三者向けに提示出来るかも、と思いました。(オシロ無しでも。)

    (1) 1msecのtick割り込みを用意して割り込み毎にカウントアップするtickカウンタを用意する(割り込み発生回数計測用)
    (2) 100μsecでカウントアップするfreerunカウンタを用意する(真の経過時間計測用)
    (3) tick割り込みの中で以下を行う
    (3') エンコーダのカウント値が増減していたら以下の値を配列に記録する
    (3'') tickカウント値
    (3'') freerunカウント値
    (3'') エンコーダのカウント値の増減値
    (4) 適当なところでプログラム実行を止める
    (5) デバッガのメモリウィンドウに記録された配列の内容を表示させる

    メモリウィンドウで確認し易いよう配列にする構造体は以下のようにする。配列サイズは200個程で良いかと思う。(1周で40カウントのロータリエンコーダで、数回転で症状が出るようなので。)

    struct encoder_debug_info {
        uint32_t tick;
        uint32_t time;
        uint32_t delta;
        uint32_t padding;
    }

    ただ、気掛かりは、RAMの残りが大変少なかった筈なので、3200バイト確保出来るか微妙でもあり、その場合には、uint32_tではなくてuint16_tにするなどした方が良いかも知れない、というあたりです。

Children
No Data