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


Previous: 3.12. タスクのモニタ

Up: マイコン徹底入門:RTOS編:フリーのリアルタイムOS活用法

Next: 4.1. キューへの追加(後ろへの追加・待ち時間なし)


マイコン徹底入門:RTOS編:フリーのリアルタイムOS活用法:

4. キュー

 キューは先入れ先出し式のデータ構造のことです。キューにデータを保管すると、データ構造の先頭から後方に向かって順番にデータを格納していきます。キューからデータを取り出すときも、先頭から後方に向かって順番にデータを取り出します。以下のように、データの格納と取り出しがどのような順番で行われたとしても、データは、キューに入れたときと同じ順番で取り出されます。

①初期状態

 

 

キュー

 

 

 

 

 

 

②データ:7を入れる

 

 

キュー

 

 

7

7

 

 

③データ:3を入れる

 

 

キュー

 

 

3

3

 

 

 

 

7

 

 

④データ:4を入れる

 

 

キュー

 

 

4

4

 

 

 

 

3

 

 

 

 

7

 

 

⑤データ取りだし:7が取り出される

 

 

キュー

 

 

 

 

4

 

 

 

 

3

 

 

 

 

7

7

⑥データ:8を入れる

 

 

キュー

 

 

8

8

 

 

 

 

4

 

 

 

 

3

 

 

⑦データ取りだし:3が取り出される

 

 

キュー

 

 

 

 

8

 

 

 

 

4

 

 

 

 

3

3

 RTOSでは、タスク間の通信のためにキューがよく利用されます。

 例えば、先述のマウスロボットで、シリアル通信、距離センサ、操作ボタンの状態に応じてモータを制御したいとします。シリアル通信、距離センサ、操作ボタンのそれぞれのデータ・状態の取得は、それぞれ別の操作用タスクに行わせます。シリアル通信はデータが送信されてきたとき、距離センサは距離が一定数値以下になったとき、操作ボタンはボタンが押されたときに、イベントが発生したと見なして、それぞれモータに対して制御を行わせます。そのため、それぞれの操作用タスクからどのようなタイミング、どのような順番、どのようなデータが送られてくるかはわかりません。もっともモータ制御用のタスクには、各操作用タスクでイベントが発生した順番に処理させたいとします。このようなときに、各操作用タスクからの指令を、一つのキューにデータとして格納し、モータ制御用タスクにはこのキューからデータを取り出させるようにします。

7

シリアル

前進

モータ制御用タスクは受け取った順(1から7にむけて)処理する

6

ボタン

後進

5

ボタン

前進

4

距離センサ

左回転

3

シリアル

前進

2

シリアル

右回転

1

ボタン

停止

 このようにキューを利用すれば、複数のタスクからあるタスクに対してメッセージを送ることができることになります。送信されたメッセージは送信の順に処理されることが保証されます。

 グローバル変数を利用してタスク間でデータを受け渡しすることはできますが、複数のデータを送信できるようにする、データが送られてきたことを検知する、データが送られてきた順番に処理できるようにしようと思うと結構大変で、結局自分で「キュー」と同じ仕組みを組み上げることになります。

 FreeRTOSには最初からキューが機能として備わっており、関数を経由して利用することができます。以下、利用方法を見てみましょう。


Previous: 3.12. タスクのモニタ

Up: マイコン徹底入門:RTOS編:フリーのリアルタイムOS活用法

Next: 4.1. キューへの追加(後ろへの追加・待ち時間なし)


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