マイコン入門spacer ad
トップページに戻る(マイコン徹底入門:STM32で始めるARM/Cortex-M3組み込み開発)
「マイコン徹底入門」とは? |  「マイコン徹底入門」を読む |  ダウンロード |  掲示板 |  筆者の自己紹介


Previous: 3.11. タスクの削除(自身の削除)

Up: 3. タスク管理

Next: 4. キュー


マイコン徹底入門:RTOS編:フリーのリアルタイムOS活用法: 3. タスク管理:

3.12. タスクのモニタ

サンプルプログラム

freertos_task_delete_vTaskList

 FreeRTOSには、デバックの便宜のため、ある時点で起動しているタスクの一覧を表示させる機能があります。

 この機能を利用するためには、予めFreeRTOS.hconfigUSE_TRACE_FACILITY1と定義しておきます。変更後ライブラリを再コンパイルしましょう。

#define configUSE_TRACE_FACILITY?????? 1

 またこの機能を利用するためにはsyscall.cを一緒にコンパイルしておく必要があります。FreeRTOSにはオープンソースのsyscall.cが同梱されており、またサンプルプログラムのフォルダにも同じものを収録してありますので、これも一緒にコンパイルしておいてください。本書のmakefileを使用している場合には、プロジェクトのルートフォルダやsrcフォルダにsyscall.cをコピーしておけば、自動的にコンパイルされます。

 サンプルプログラムを実行すると、以下のように表示されます。表示されたタスク名のリストは、左から、名称、状態、優先度、スタック領域の残量、FreeRTOSが管理する際のタスク番号を表しています。名称はxTaskCreate関数の引数pcNameで指定した名称です。登録したタスクの名称タスクの状態はRReady状態、SSuspended状態、BBlocked状態、DDeleted状態です。Suspended状態というのは、タスクの実行を一時停止させる命令であるvTaskSuspend関数によって一時停止させられている状態のことです。Deleted状態というのは、vTaskDelete関数でタスクが削除されて、カーネル上から登録が抹消される直前の状態のことです。スタック領域の残量については後述のメモリ管理の項を参照してください。

Hellow Cortex-M3/STM32 and FreeRTOS World!

Expand your creativity and enjoy making.

 

Running:A

 

TaskA?????????? R?????? 3?????? 145???? 0

TaskB?????????? R?????? 2?????? 189???? 1

TaskC?????????? R?????? 1?????? 189???? 2

IDLE??????????? R?????? 0?????? 117???? 3

Running:B

 

TaskB?????????? R?????? 2?????? 161???? 1

TaskC?????????? R?????? 1?????? 189?? ??2

IDLE??????????? R?????? 0?????? 117???? 3

TaskA?????????? B?????? 3?????? 23????? 0

Running:C

 

TaskC?????????? R?????? 1?????? 145???? 2

IDLE??????????? R?????? 0?????? 117???? 3

TaskA?????????? B?????? 3?????? 23????? 0

TaskB?????????? B?????? 2????? ?23????? 1

Running:A

TaskB deleted.

Running:C

 

TaskC?????????? R?????? 1?????? 23????? 2

IDLE??????????? R?????? 0?????? 102???? 3

TaskA?????????? B?????? 3?????? 23????? 0

Running:A

TaskC deleted.

 

TaskA?????????? R?????? 3?????? 23????? 0

IDLE?????????? ?R?????? 0?????? 102???? 3

TaskC?????????? D?????? 1?????? 23????? 2

 

 このようなタスクの一覧を出力するためには、vTaskList関数を使用します。

関数名

vTaskList関数

関数プロトタイプ

void vTaskList( portCHAR *pcWriteBuffer )

 

動作

タスクの一覧を出力します。

引数

*pcWriteBuffer

出力を格納するバッファのポインタを指定します。

戻り値

無し。

 vTaskList関数はそれ自体ではターミナル等への出力機能を持っていません。出力を一旦保管するバッファ(変数)を用意しておき、このバッファを指定してvTaskList関数を実行します。その後バッファの内容をターミナル等に出力すればよいわけです。

 サンプルプログラムでは、以下のように、優先度の高いTaskATaskBTaskCを削除しながら、その都度vTaskList関数でタスクのリストを出力しています。

cprintf(pcTaskName);

vTaskList((signed portCHAR*)TxBuffer);

cprintf(TxBuffer);

vTaskDelay(30);

cprintf(pcTaskName);

vTaskDelete(xTaskBHandle);

cprintf("TaskBdeleted.\r\n");

vTaskDelay(30);

cprintf(pcTaskName);

vTaskDelete(xTaskCHandle);

cprintf("TaskCdeleted.\r\n");

vTaskList((signedportCHAR*)TxBuffer);

cprintf(TxBuffer);

vTaskDelete(NULL);

 このプログラムでは以下のように、vTaskList関数の出力を格納するための変数TxBufferを宣言しています。変数TxBufferを引数としてvTaskList関数を実行した時点で、変数TxBufferにタスクの一覧が格納されています。あとは、変数TxBufferの内容をcprintf関数等で出力すればよいだけです。ここではターミナルに表示させていますが、たとえばSDカードスロットを接続している場合には、SDカード内のテキストファイルに出力するということもできるでしょう。

int8_t TxBuffer[255];


Previous: 3.11. タスクの削除(自身の削除)

Up: 3. タスク管理

Next: 4. キュー


このページはITと知的財産の法律情報「法務ネット」の管理人が制作・運営しています。