Previous: 3.1.5. カーネルの起動 |
Up: 3.1. タスクの登録と実行 |
Next: 3.1.7. main関数の終端の処理 |
この時点でカーネルが起動し、タスクの実行が開始されます。結果冒頭のような表示がなされます。ところで冒頭の表示結果では、複数個のAとBが交互に表示されました。どうしてこのような結果になるのでしょうか。
FreeRTOSでは、優先順位が同一のタスクは、予め設定した時間毎に順番に切り替えながら動作します。この時間のことをタイムスライスといいます。薄切りにされた時間ということですね。
タイムスライスの長さは、FreeRTOSConfig.h(本書の環境中ではlibフォルダ内にあります)の中のconfigTICK_RATE_HZで設定します。ここでの単位はHzです。
#define configTICK_RATE_HZ?? ?????( ( portTickType ) 1000 ) |
上記の設定では1000Hzとなり、一つのタスクが連続して実行される時間は1msとなります。あるタスクを1msの間繰り返して実行し、その後次のタスクをやはり同じく1ms実行するということを繰り返すわけです。
ここで先ほどの実行結果がこのタイムスライスに合致しているものか確かめておきましょう。サンプルプログラムのUSARTの通信速度は115200bpsです。非同期シリアル通信なので、送信される1バイトには、スタートビット1ビットとストップビット1ビットを足されます。そのため1バイトの送信に10ビットが必要です。すると1秒間に11520個の文字を送信できることになり、1msの間には11.52個の文字送信できるという計算になります。サンプルプログラムで出力された「A」と「B」の個数を数えてみてください。まとまり毎に若干の前後がありますが、おおよそ11?12文字になっているはずです。これはまさに計算通りという結果になります。
タイムスライスの時間を変更すると、出力されるAとBの個数が変わりますので試してみてください。FreeRTOSConfig.hを変更した場合には、ライブラリも忘れずにコンパイルするようにしてください。
Previous: 3.1.5. カーネルの起動 |
Up: 3.1. タスクの登録と実行 |
Next: 3.1.7. main関数の終端の処理 |