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


Previous: 3.1.7. main関数の終端の処理

Up: 3. タスク管理

Next: 3.3. タスクにパラメータを渡す(文字列)


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

3.2. タスクにパラメータを渡す(整数値)

サンプルプログラム

freertos_pvParameters_int

 FreeRTOSでは、タスクの登録時に、タスクを登録する側から、登録されるタスクに、一定のパラメータを渡すことができます。xTaskCreate関数の第4引数であるpvParametersに、渡したい値を格納した変数のポインタを指定します。void型のポインタですので、実際に渡される値は、どのような型でも構いません。

 このサンプルプログラムの動作は前項のものと同じですが、タスクが表示する文字をタスク用関数の中では指定せず、xTaskCreate関数から渡しています。渡すパラメータはポインタで渡しますので、予め変数として登録しておきましょう。

int8_t TaskA_symbol = ‘A’;

int8_t TaskB_symbol = ‘B’;

 xTaskCreate関数では、第4引数で、渡すパラメータのアドレスを指定します。

xTaskCreate(prvTaskA, (signed portCHAR *)"TaskA", 192, &TaskA_symbol, 1, NULL);

xTaskCreate(prvTaskB, (signed portCHAR *)"TaskB", 192, &TaskB_symbol, 1, NULL);

 xTaskCreate関数の第4引数はタスク用関数の引数として参照渡しされます。void型のポインタなので、実際に利用する前に、利用したい型のポインタとしてキャストします。ここではポインタ自体ではなく値を利用したいので、仮引数をint8_t型のポインタにキャストした後その中身を参照しています。

void prvTaskA(void *pvParameters)

{

? int8_t pcTaskName;

? pcTaskName = *(int8_t *)pvParameters;

 結果、前項と同じように、ABが繰り返し表示されます。

BBBBBBBBBBBBAAAAAAAAAAAABBBBBBBBBBBAAAAAAAAAAAABBBBBBBBB

BBAAAAAAAAAAAABBBBBBBBBBBBAAAAAAAAAAABBBBBBBBBBBBAAAAAAA

AAAABBBBBBBBBBBBAAAAAAAAAAABBBBBBBBBBBBAAAAAAAAAAABBBBBB

...

 ちなみに前項のサンプルプログラムのタスク用関数の冒頭部分もパラメータを受け取るための命令です。パラメータを使わないのに処理を記載していたのは、関数中で使用しない引数があると、GCCが警告を出すためです。警告が出てもコンパイル自体は正常に行えますので、警告が気にならないのであれば、実際にはこれらの行を記載しなくても構いません。筆者は警告が常に出ている状態になってしまうと、本当に気をつけないといけない警告が出たときに見逃してしまうので、不要な警告は表示させないよう処理しています。

void prvTaskA(void *pvParameters)

{

? int8_t *pcTaskName;

? pcTaskName = (int8_t *) pvParameters;


Previous: 3.1.7. main関数の終端の処理

Up: 3. タスク管理

Next: 3.3. タスクにパラメータを渡す(文字列)


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