Previous: 3.1.2. ハードウェアの初期化 |
Up: 3.1. タスクの登録と実行 |
Next: 3.1.4. タスク用関数の作成 |
次に、RTOSにタスクを登録して、RTOSのカーネルを起動する処理を行います。RTOSでは、タスクは単純な関数として作成しておきます。カーネルというのは、OSの中心部分となる、タスクのスケジューリングやメモリ管理等を行うプログラム群のことです。
RTOSにタスクを登録するには、xTaskCreate関数を使用します。
関数名 |
xTaskCreate関数 |
|
関数プロトタイプ |
portBASE_TYPE xTaskCreate( ????????????????????????????? pdTASK_CODE pvTaskCode, ????????????????????????????? const portCHAR * const pcName, ????????????????????????????? unsigned portSHORT usStackDepth, ????????????????????????????? void *pvParameters, ????????????????????????????? unsigned portBASE_TYPE uxPriority, ????????????????????????????? xTaskHandle *pvCreatedTask ????????????????????????? ) |
|
動作 |
カーネルにタスクを登録します |
|
引数 |
pvTaskCode |
登録するタスクの関数名。関数名のポインタを渡しますので、関数名を直接指定します。 |
pcName |
デバッグの際に使用するタスクの名称。 |
|
usStackDepth |
スタックの大きさ。 |
|
pvParameters |
タスク起動時にタスクに渡される引数。 |
|
uxPriority |
優先度。 |
|
pvCreatedTask |
タスクハンドラ |
|
戻り値 |
タスク登録に成功した場合にはpdTRUEが返されます。その他の値が帰ってきた場合には登録に失敗しています。 |
いきなりたくさんの引数があって面食らいますが、ここではpvTaskCodeにタスクの関数名を登録するということだけ押さえておいてください。
サンプルプログラムでは以下のようにして、prvTaskA関数とprvTaskB関数をカーネルにタスクとして、同じ優先度で、登録しています。ここではカーネルに対して今後カーネルが起動したときに動作させるタスクを知らせているだけで、この時点でタスクが動作を始めるわけではありません。
xTaskCreate(prvTaskA, (signed portCHAR *)"TaskA", 192, NULL, 1, NULL); xTaskCreate(prvTaskB, (signed portCHAR *)"TaskB", 192, NULL, 1, NULL); |
Previous: 3.1.2. ハードウェアの初期化 |
Up: 3.1. タスクの登録と実行 |
Next: 3.1.4. タスク用関数の作成 |