Modules
* xTaskCreate タスクの生成
* vTaskDelete タスクの削除
xTaskHandle
task. h
タスク参照型
例えば、 xTaskCreate へのコールで(ポインタによって)パラメータとしてxTaskHandle 変数を返します。これは vTaskDelete
でタスクを削除するために使用することができる。
task.h portBASE_TYPE xTaskCreate( pdTASK_CODE pvTaskCode, const portCHAR * const pcName, unsigned portSHORT usStackDepth, void *pvParameters, unsigned portBASE_TYPE uxPriority, xTaskHandle *pvCreatedTask );
新しいタスクを作成し、準備完了タスクリストに加える。
もしFreeRTOS-MPU を使っているなら、 xTaskCreate() の代わりに xTaskCreateRestricted() を使うことを推奨します。
FreeRTOS-MPU で xTaskCreate() はPrivileged 及びユーザモードで実行可能なタスクの作成をします(下の uxPriority
の記述参照)。 特権モード・タスクの場合、全メモリマップへのアクセス権を持ちます、またユーザモードが使われるとき、タスクは自身のスタックだけのアクセス権を持つ。
両方のケースで、標準的な FreeRTOS スタックオーバフロー探知スキームは使えるが、 おそらく、MPU は自動的にスタックオーバフローをとらえる事は出来ない。
xTaskCreateRestricted() の方がより柔軟性があります。
パラメータ:
pvTaskCode タスク関数のエントリー・ポインタ。
タスクは決して retun する事なく(すなわち継続するループで)実行されなくてはなりません。
pcName タスクの説明的な名前。
これは主にデバッグすることを容易にするために使われます。 名前の最大長はconfigMAX_TASK_NAME_LEN によって定義されます。
usStackDepth タスクスタックの大きさ−バイト量ではなく、スタックで使用される変数の量。 例えば、もしスタックが幅16ビットで usStackDepth が100と定義されるなら、200バイトがスタック記憶装置に割り当てられる。 スタック幅とスタック深さの積はタイプ size_t の変数が表現できる最大値を超えてはなりません。
pvParameters 、作成されるタスクのパラメータとして使用するポインタ。
uxPriority タスクが走るべきである優先権。
優先度パラメータのビット portPRIVILEGE_BIT をセットすることによって、 システムはMPU サポートを含む特権(システム)モード・オプションとしてタスクを作成することができます。 例えば、優先度2でプリビリッジ(特権を与えられた)タスクを作成するために、 uxPriority パラメータは(2| portPRIVILEGE_BIT)にセットする。
pvCreatedTask これによって作成されたタスクを参照することができまるハンドルを返す。
returns: もしタスクの生成が成功し実行可能リストへ追加したならpdPASSが返る、さもなければファイル projdefs. hで定義されたエラーエラーコードが返る。
使用例
task.h
void vTaskDelete( xTaskHandle pxTask );