FreeRTOS-Tickless 低電力モード | FreeRTOS Fourteen

目次

例証します:

1. 低消費電力モードの概要

1.1. STM32 低消費電力モード

2.ティックレスモード

2.1. Tickless モードで電力を消費するにはどうすればよいですか?

2.2. Tickless モードの設計アイデア

2.3. システムの動作に影響を与えずに消費電力を削減するにはどうすればよいですか?

3. Tickless モードで構成を変更する

3.1. 設定関連のマクロ定義

4.ティックレス低電力モードを使用する

4.1. 使用手順


例証します:

内容について:

        1) 以下の内容は主に概念的な理解とステップ分析です。

        2) 個人的なサンプルコードはまだありませんので、FreeRTOS の公式サンプルコードを使用します。

        3) テスト用コードを移植したい場合は、以下のコンテンツに個人的なテスト用サンプルコードはありませんので、他を探してください。

その他について:

        1) オペレーティングシステム: win10

        2) プラットフォーム: keil 5 mdk

        3) 言語: C 言語

        4) ボード:STM32シリーズをFreeRTOSに移植

1. 低消費電力モードの概要

        ウェアラブル ウォッチ、物理ネットワークの低電力製品など、多くのアプリケーションには厳しい消費電力要件があります。一般的な MCU には対応する低電力モードがあり、MCU の低電力モードはベアメタル開発中に使用できます。

        FreeRTOS は、FreeRTOS オペレーティング システムでのアプリケーション開発を容易にするために、Tickless と呼ばれる低電力モードも提供します。

 1.1. STM32 低消費電力モード

以下の図 1 に示すように:

       図1

        主にスリープ モードを使用し、スリープ モードに入る WFI コマンド: _WFI、WFE コマンド: _WFE; スリープ モードを終了し、割り込みまたはイベントによってスリープ モードをウェイクアップできます。

 

2.ティックレスモード

2.1. Tickless モードで電力を消費するにはどうすればよいですか?

        本質は、WIF 命令を呼び出してスリープ モードを実装することです。アイドルタスクを実行中に、スリープモードに入ります。

2.2. Tickless モードの設計アイデア

        タスク実行時間の統計実験では、以下の図 2 に示すように、システム全体の動作中、ほとんどの時間がアイドル状態のタスクを実行していることがわかります。

図2

2.3. システムの動作に影響を与えずに消費電力を削減するにはどうすればよいですか?

        アイドル タスクの実行中は、MCU を対応する低電力モードに移行させます。他のタスクの実行準備が完了したら、MCU をウェイクアップして低電力モードを終了します。

困難:

        1) 低消費電力に入ってから復帰するまでにどれくらい時間がかかりますか? 次のタスクが実行される前に MCU を正確にウェイクアップするにはどうすればよいですか?

        2) 割り込みは MCU をウェイクアップする可能性があります。ティック タイマーの頻繁な割り込みは、低消費電力の効果に影響します (1ms に 1 回割り込み)。

解決する:

        1) タスクのブロック時間を計算します。

        2) ティックタイマーの割り込み周期を低消費電力動作時間に変更します 低消費電力動作から抜け出した後は、システムクロックのビートを補う必要があります。

 良いニュースは、FreeRTOS の低電力モード Tickless モード メカニズムがすでにこれらの問題に対処しており、関連する API 関数を直接呼び出すことで使用できることです。

3. Tickless モードで構成を変更する

3.1. 設定関連のマクロ定義

        1) configUSE_TICKLESS_IDLE --> このマクロ定義は、低電力 Tickless モードを有効にするために使用されます (1 は有効、0 は無効、他の値は自分で Tickless 機能を実装する必要があります)。

        2) configEXPECTED_IDLE_TIME_BEFORE_SLEEP -->このマクロ定義は、システムが対応する低電力モードに入る最小期間 (少なくとも 2 システム ビート、つまり少なくとも 2ms) を定義するために使用されます。

        3) configPRE_SLEEP_PROCESSING (x) --> このマクロ定義は、低消費電力に入る前にシステムによって実行されるトランザクションに使用されます。たとえば、低消費電力をさらに削減するために、低消費電力に入る前に周辺クロックをオフにする。

        4) configPOSR_SLEEP_PROCESSING (x) --> このマクロ定義は、通常のシステム動作を達成するために、低消費電力を終了する前に周辺クロックをオンにするなど、低消費電力を終了する前にシステムによって実行されるトランザクションに使用されます。

注: configPRE_SLEEP_PROCESSING (x) および configPOSR_SLEEP_PROCESSING (x) は、関数の内部操作を直接実装する必要があります --> 別の関数にマクロを定義し、それを別の関数に実装します。

4.ティックレス低電力モードを使用する

4.1. 使用手順

        1) 関連するマクロ定義を構成する

        2) configPRE_SLEEP_PROCESSING()、configPOSR_SLEEP_PROCESSING()の2つの関数を実装し、これら2つの関数でさらなる低消費電力化を実現します(外部割り込みのオフ、タイマーのオフなど)。

おすすめ

転載: blog.csdn.net/qq_57663276/article/details/129028591