NUCLEO-F302R8 FreeRTOS タスク
前回はFreeRTOSの導入を行いました。今回はFreeRTOSでタスクを作ってLEDチカチカとUART送信を行います。
リファレンス
FreeRTOSのドキュメントを参照します。以下がトップページです。
https://www.freertos.org/index.html
SW構成
LEDタスクとUartタスクを作成します。
vApplicationTickHookとIDLEタスクはFteeRTOSが自動で作成します。※設定で変更可能
xTaskCreate タスク作成
タスクを作成できます。
スタック
スタックの設定によりタスクが動かせなかったので、はまったポイントを記載します。
そもそもタスクのスタックサイズが何かわからない場合は以下の記事が分かりやすいです。
https://uquest.tktk.co.jp/embedded/learning/lecture07-2.html
- usStackDepth
- xTaskCreateの引数です。タスクのスタックサイズを設定します。設定したサイズがそのままスタックサイズにならず、設定したサイズ × 4byteがタスクサイズになります。 使用しているマイコンが32ビットのメモリなので4byteのアライメントでサイズが確保されます。
- ヒープ
- スタックはヒープのメモリを使用します。ヒープのメモリが足りない場合はタスクが作成できず、xTaskCreateはerrCOULD_NOT_ALLOCATE_REQUIRED_MEMORYを返します。
- IDLEタスク
- vTaskStartSchedulerを実行すると、ユーザが作成したタスク以外にIDLEタスクが作成されます。IDLEタスクのスタックサイズはconfigMINIMAL_STACK_SIZE × 4byteになります。
- IDLEタスクの作成に失敗すると、他のタスクも開始されません。
コード
アプリ タスク定義
LEDチカチカとUart送信を行うタスクを定義している箇所です。これまでの記事と同じです。実行している関数がタスクになっただけです。
- taskAppLedBlink: LEDチカチカ
- taskAppUartTx: Uart送信
タスク作成
タスク作成を行う箇所です。
動作確認
前回と同じように、PCで送信されたデータを受信できました。
以上
次は異なるタスクに異なる優先度を与えて、タスクの切り替えができるかを試してみようと思います。