3.1.6. カーネルによるタスクの切り替え

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


Previous: 3.1.5. カーネルの起動

Up: 3.1. タスクの登録と実行

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


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

3.1.6. カーネルによるタスクの切り替え

 この時点でカーネルが起動し、タスクの実行が開始されます。結果冒頭のような表示がなされます。ところで冒頭の表示結果では、複数個のABが交互に表示されました。どうしてこのような結果になるのでしょうか。

 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文字になっているはずです。これはまさに計算通りという結果になります。

 タイムスライスの時間を変更すると、出力されるABの個数が変わりますので試してみてください。FreeRTOSConfig.hを変更した場合には、ライブラリも忘れずにコンパイルするようにしてください。


Previous: 3.1.5. カーネルの起動

Up: 3.1. タスクの登録と実行

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


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