メインコンテンツ

STM32 プロセッサにおける FreeRTOS のスケジューリングの最適化

この例では、Embedded Coder® Support Package for STMicroelectronics® STM32 Processors を使用して、STMicroelectronics NUCLEO-F207ZG ボードで Simulink® モデルを実行する方法を示します。STM32CubeMX ワークフロー内での "FreeRTOS" のスケジューリングの実装をガイドし、効率的なタスク管理とコード実行を実現できるようにします。

"FreeRTOS" は、組み込みデバイス向けに設計されたオープンソースのリアルタイム オペレーティング システム (RTOS) であり、効率的なマルチタスクとリソース管理を可能にします。STM32 プロセッサと組み合わせると、複雑なリアルタイム アプリケーションを開発するためのフレームワークが提供されます。

はじめに

Embedded Coder® Support Package for STMicroelectronics® STM32 を使用すると、モデルで指定されたレートに基づいてコード実行をスケジューリングできます。これは FreeRTOS と統合されており、スレッドと時間の管理のための標準インターフェイスを提供します。この STMicroelectronics® STM32 プロセッサでは "Digital Port Write" ブロックがサポートされており、異なる基本レートで動作できます。

この例では、STMicroelectronics NUCLEO-F207ZG のコードを生成するように Simulink モデルを構成し、生成されたコードを実行して指定したレートで定期的に LED を点灯および消灯する方法について説明します。

前提条件

以下のチュートリアルを完了します。

必要なハードウェア

STMicroelectronics NUCLEO-F207ZG

モデル

事前構成済みのモデル FREERTOS_gettingstarted を開きます。この例では、STM32 プロセッサで FreeRTOS を使用して、指定したレートで LED を点滅させる方法を示します。

1. モデルで指定したサンプル レートで LED ライトを点滅させるようにターゲット モデルを構成します。

2. GPIO ブロックをダブルクリックして [ブロック パラメーター] ダイアログ ボックスを開き、次のピン番号が構成されていることを確認します。

  • 緑色 LED は GPIOB 端子のピン 0 に接続されています。

  • 青色 LED は GPIOB 端子のピン 7 に接続されています。

  • 赤色 LED は GPIOB 端子のピン 14 に接続されています。

3. STM32CubeMX プロジェクトで、ユーザー LED を切り替えるために、同じピン (PB0、PB7、PB14) を GPIO_Output として構成します。詳細については、FreeRTOS の STM32CubeMX プロジェクトの構成を参照してください。

Simulink モデルの構成

1. FREERTOS_gettingstarted モデルを開きます。

2. Ctrl+E を押して [コンフィギュレーション パラメーター] ダイアログ ボックスを開きます。左側のペインで [ハードウェア実行] をクリックします。[ハードウェア ボード][STM32F2xx Based] に設定します。

3. [ハードウェア ボード設定][オペレーティング システム/スケジューラ] を展開し、[オペレーティング システム][FreeRTOS] に設定します。

4. [ビルド オプション] に移動し、[参照] をクリックして gettingStarted_F2027ZG.ioc STM32CubeMX プロジェクト ファイルを選択します。STM32CubeMX プロジェクトの詳細については、STMicroelectronics の STM32 プロセッサ ベースのボード入門を参照してください。

5. [オペレーティング システム][FreeRTOS] に設定する場合は、次の Simulink 構成を検討してください。

  • FreeRTOS を使用する場合は、モデルの基本レートを 1 ms 以上の値に設定してください。

  • FreeRTOS では、最大 56 のスレッド優先順位 (0 ~ 55) がサポートされています。1 - 40 のスレッド優先順位はモデル レートのスケジュールに使用できます。41-55 のスレッド優先順位は、カスタム定義の高優先順位のスレッド用に予約されています。アイドル スレッドの優先順位はエクスターナル モード シミュレーション用に予約されています。

  • メモ: モデル レートのスケジューリングにはソフトウェア タイマーが使用されます。タイマーのタスクの優先順位は、最高のスケジューリング レート (基本レートは 40) よりも高い優先順位に設定する必要があります。

  • FreeRTOS を使用する場合、[コンフィギュレーション パラメーター][コード生成][最適化][詳細設定パラメーター][最大スタック サイズ] リストで指定した値が各スレッドに適用されます。ただし、一部のスレッドでは指定されたスタック サイズが完全には利用されない可能性があります。

メモ: スレッドのスタック サイズは、[コンフィギュレーション パラメーター][コード生成][最適化][詳細設定パラメーター][最大スタック サイズ] および [STM32CubeMX][Middleware][FREERTOS][Kernel settings][Config parameters][Minimal stack size] [最大値] として設定されます。

FreeRTOS の STM32CubeMX プロジェクトの構成

オペレーティング システムとして FreeRTOS を選択する場合は、STM32CubeMX プロジェクトで次の設定が構成されていることを確認してください。

1. gettingStarted_F2027ZG.ioc ファイルを開きます。

2. STM32CubeMX プロジェクトで、ユーザー LED を切り替えるために、"ピン (PB0)"GPIO_Output として構成します。

3. 同様に、IOC ファイル内で他のピン PB7 と PB14 も GPIO_Output として設定します。

4. [STM32CubeMX][Middleware][FREERTOS][Interface] で、Interface として CMSIS_V2 を選択します。

5. 十分なヒープ サイズと、40 よりも高いタイマーのタスクの優先順位を割り当ててください。

6. [STM32CubeMX][Middleware][FREERTOS][Advanced settings][Newlib settings] で、[USE_NEWLIB_REENTRANT]Enabled に設定します。

Simulink モデルからコードを生成してハードウェア ボードに読み込む

1. モデルのコードを生成するには、"Ctrl+B" を押すか [ビルド、展開、起動] をクリックします。

2. モデル キャンバスの下部に示されるリンクを使用して診断ビューアーを開き、ビルド プロセスに従います。コードをボードに読み込むと、ハードウェア ボード上で LED が点滅します。これは、コードが実行されていることを示します。