セクションの複数ページをまとめています。 印刷またはPDF形式で保存...

もとのページに戻る

2025-08-08 現在

class tick_counter - Stop Watch

class tick_counter - Stop Watch
    msec, usec 領域のごく短い処理時間を計測するために用います。マイコンのハードウェアのカウント機能を用いています。

    class tick_counter - Stop Watch

    msec, usec 領域のごく短い処理時間を計測するために用います。マイコンのハードウェアのカウント機能を用いています。

    本ライブラリコードについては、十分な確認の上、実験的な利用にとどめておくことを推奨します。最小30usec程度の単位での計測でよい場合は、ウェイクアップタイマーのカウント値が簡便です。

    • CoreDebug->DEMCR, DWTレジスタを制御します。

      • これらレジスタは一般に広く利用することを目的に紹介されているものではないと考えられます。開発中の一時的な時間計測等の利用では大きな問題を経験しないと考えられますが、最終的な運用段階でのファームウェアでの利用については推奨しません
    • 同時に複数のtick_counterオブジェクトを構築することが可能です

      • 利用するカウント機能は一つで、オブジェクト間で機能を共有します。
      • 最初のオブジェクト構築でカウント機能を動作させ、すべてのオブジェクト破棄時にカウント機能を停止させます。

    例:

    #include <mwf_stop_watch.hpp>
    
    void some_func() {
        ...
    
        // 計測開始1
        mwf::periph::tick_counter sw;
    
        sw.lap(); // 計測開始1(直前の sw 構築時にも lap() は呼ばれるが、より厳密に処理の直前に lap() を呼び出す
        ...       // 計測したい処理
        sw.lap(); // 計測終了1
    
        // 値の表示(計測開始1~計測終了1)
        PRINTF("%dusec", sw.get_us());
    
        // 次の処理
        sw.lap(); // 計測開始2
        ... // 計測したい処理
        sw.lap(); // 計測終了2
    
        // 値の表示(計測開始2~計測終了2)
        PRINTF("%dusec", sw.get_us());
    }

    _start_counter(), _stop_counter()

    static void _start_counter();
    static void _stop_counter();

    CoreDebug機能を用い、カウントタイマーの開始と停止を行います。

    tick_counter()

    コストラクタです。他に構築されたオブジェクトがなければカウンターを開始し、また、lap() を呼び出し計測を開始します。

    ~tick_couter()

    デストラクタです。すべてのクラスオブジェクトが破棄された時点でカウンターを停止します。

    lap()

    直前のカウント値を退避し、呼び出された時点でのカウント値を保存します。

    経過時間は get_us() により得ます。