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


Previous: 1.1.2. 単純なループ処理の問題点

Up: 1.1. OSを使用する理由

Next: 1.2. RTOSを使用することのメリット・デメリット


マイコン徹底入門:RTOS編:フリーのリアルタイムOS活用法: 1. リアルタイムOS: 1.1. OSを使用する理由:

1.1.3. リアルタイムOS

 マルチタスク処理はPC用のOSでも実装されています。Windowsでも、Linuxでも、MacOSでも、「ホームページを見ながらワープロで資料を作成し途中で飛び込んできたメールを参照する」といった処理は当然のように行えます。この意味で組み込み用マイコンのために使用するOSPC用のOSは同じ機能を有していると言えるのですが、PCOSと組み込みマイコン用OSには、実装の方法に大きな違いがあります。それはリアルタイム性と呼ばれるものです。

 先ほどのマウスロボットの各関数の「実行されるべきタイミング」を考えると、「遅延しては困る処理」と「多少遅れても問題ない処理」に分けることができます。筆者がこのマウスロボットの性能なり仕様として求めたいところからすると、

遅延しては困る処理

GetEdge関数(縁の検出)

SetMotorSpeed関数(モータ用タイマへのPWMデューティー比設定)

GetUSARTData関数(USARTからのデータ取得)

GetMotorCurrent関数(電流検出用抵抗の電圧値を取得)

RobotControl関数(動作を判断するルーチン)

多少遅れても問題ない処理

GetButtonStatus関数(ボタンの状態の確認)

SetLEDColor関数(LED用タイマのPWMデューティー比の設定)

GetPSDDistance関数(PSDセンサの出力をADCで取得)

SetLCDData関数(I2C液晶にデータを送信)

と分けられます。

 先述のようにロボットが落下しては困りますから、縁の検出、そして検出した状態に応じてモータを制御する処理は遅れてはいけません。そしてフォトインタラプタの状態を取得してモータを制御するルーチンも遅延すると、モータ制御が遅延してしまうことになります。USARTからデータを受信する処理は、あるデータが送られてきた後、その次のデータが送られてくるまでにUSARTのバッファからデータを取得しておかないと、データが失われてしまいます。USARTの通信速度はCPUの処理速度からするとかなり遅いので処理に余裕はあるのですが、締め切りより少しでも遅れてしまうと、取り返しが付かない結果になります。

 ボタンの状態を確認するルーチンは、チャタリングを除去する必要性もあるので、定期的に実行できるに超したことは無いのですが、多少タイミングがずれたり遅れたりしても、操作する人間にはわからないでしょう。LED用のタイマはPWMなので、一旦設定すればタイマが自動的にデューティー比を保ちます。光り方が変化するタイミングが多少ずれても、マシンの本来の機能には影響を与えません。PSDセンサの状態取得は、あまりにも遅れてしまうと問題なのですが、もともと判断時間に余裕がありますから、これも多少遅れても問題は無いでしょう。液晶へのデータ表示についても、表示が0.1秒で更新されるか、その倍の0.2秒で更新されるかは、使用する人間の側からするとたいした問題ではないので、遅れてもよい処理ということになります。

 これは今回のマウスロボットでの例ですが、多くの組み込み機器では、このように「一定時間内に処理しないといけない処理」というものが多くあります。このような時間制限のある処理が要求されるシステムをリアルタイムシステムと呼んでいます。

 リアルタイムシステムを機能させるためによく用いられるのは割込みです。先の例をSTM32で実装した場合には、フォトインタラプタはEXTI割込み、USARTUSART_RXNE割込みを利用すれば、対応するイベントが発生した時にはすぐに対応をすることができます。

 組み込みシステムでOSを使用する場合にも、同じように一定の処理を一定の時間内に処理できる仕組みが盛り込まれている必要があります。このようなOSをリアルタイムOS(RTOS)と呼んでいます。

 RTOSでは、通常のマルチタスクOSが備えている機能に加えて、

・優先度の高いタスクから順番に処理する機能

・割込みがあったときに必要なタスクの処理を開始できる機能

が備わっています。

 単なるマルチタスクOSであれば、「そのCPUの能力であれば本来一定時間内に処理可能なタスク」であっても、複数のタスクにCPUの能力が分散されてしまっています。結果一定時間内に処理されることは保証されません。RTOSで優先度の高いタスクから順番に処理するというのは、「優先度の低いタスクよりも実行時間を増やす」ということではなく、「優先度の低いタスクの処理は中止し、優先度の高いタスクを先に処理する」ということです。これによりCPUの計算能力が優先度の高いタスクに集中されることになりますから、「そのCPUの能力であれば本来一定時間内に処理可能なタスク」が一定時間内に処理されることが保証されます。

 また組み込みマイコンではリアルタイム処理を割込みで処理することが多いですから、RTOSでも割込みに対応できる必要があります。そこでRTOSでは、CPU起動時から割込み処理で使用するタスクを起動するものの、割込みが発生するまでは中断させておき、割込みが発生してすぐにその中断を解除させて、直ちに割込み処理のためのタスクを開始できるようにするという機能が備わっています。


Previous: 1.1.2. 単純なループ処理の問題点

Up: 1.1. OSを使用する理由

Next: 1.2. RTOSを使用することのメリット・デメリット


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