エッジコンピューティングの逆襲 特集

アマゾン買収から2年半、「Amazon FreeRTOS」は最も手頃なRTOSにリアルタイムOS列伝(2)(2/3 ページ)

» 2020年05月27日 10時00分 公開
[大原雄介MONOist]

「FreeRTOS」と「FreeRTOS+」

 さて、そのAmazon FreeRTOSであるが、実際にはFreeRTOSと「FreeRTOS+」の2つがある。FreeRTOSの方がもともと提供されてきたFreeRTOSの本体であるが、こちらはカーネルの機能として以下のようなものがある。

  • Task/Co-Rountine生成/起動/終了
  • Task間同期(Queue/Mutex/Semaphore)
  • Task Notification(ISRからTaskへの直接通信)
  • Stream/Message Buffer(Task間、あるいはTask/ISR間のデータ転送)
  • Software Timer
  • Memory Management/Protection

 他には、以下のような機能が提供される程度だ。

  • Low Power Support(Sleep機能)
  • Trace用Macroの提供
  • Run Time Stateの取得

 余談になるが、FreeRTOSのプログラムの最小実行単位はTaskである。ただし、ArmベースMCUへの移植に当たってはCMSIS(Cortex Microcontroller Software Interface Standard)を利用しており、このCMSISではプログラムの実行最小単位がThreadと呼ばれていることもあって、一部のFreeRTOSのドキュメントの中にはThreadと記述されているものがある(例えば、TLS:Thread Local Storageなる、Taskが独自に持てるデータストレージ領域がある)。TaskとThreadはFreeRTOSでは同義語と言っていい。

 余談のついでにもう1つ書いておくと、32ビットのターゲットであればTaskをそのまま使えばよいのだが、8/16ビットではTaskを多数作ると負荷が高すぎる場合がある。これに向けて提供されるのがCo-Rountineで、いわばTaskのサブセットである。これは特にメモリ容量の制限が厳しい場合に利用するもので、通常32bitターゲットでは使わない、というただし書きがあったりする。

 話を戻すと、これらFreeRTOSカーネルの機能は、一般的なRTOSとしては過不足無いが、これだけだとI/Oが一切不可能である。

 このI/Oは、FreeRTOS+の方で提供される。現在提供されているのは以下の4つだ。

  • TCP(Lightweight TCP/IP Stack):一応Berkeley Socket APIに準拠している。メモリサイズはCortex-M向けの場合、-Osで20.1K、-O1で34.9Kとされる。
  • CLI(Command Line Interface):文字通りCLIを提供するもの。もっとも標準のShellなどは用意されておらず、自分でコマンドインタープリタから構築する必要がある(コマンドインタープリタのサンプルは提供されている)
  • IO(図2):POSIX風のopen()/read()/write()/ioctl()の4つが利用可能になる。あくまでPOSIX「風」であって、厳密にはPOSIX準拠ではない。close()がないあたりはいかにもという感じ。ioctl()ではI/Oの方法を定義可能で、現状は以下の4つが定義されている。UARTとかI2C、SPIなどを利用するためにはこのI/Oが必須となる
    • Polled(PollingによるI/O。完了までの間は制御が戻ってこない)
    • Interrupt driven circular buffer(データを受信すると割り込みが掛かる方式。受信バイト数を確認してRing Bufferから取得する)
    • Interrupt driven zero copy(ISRの中から送信が行われるので、write()はすぐ帰ってくる。次の書き込みを行うためには、まず直前の送信が完了したかどうかを確認する必要がある)
    • Interrupt driven character queue(ISRの中で送受信を行うが、Taskとの間にキューを挟み、ここに送受信データを載せる方式)
  • UDP(Tiny Embedded UDP/IP):これもTCP同様、最小限のUDP/IPの機能が一応Berkeley Socket APIに準拠する形で提供される。ちなみにIPv4のみ対応
図2 図2 FreeRTOS+IOの構図。ここで右側にある「Peripheral Driver Library」は、一部が標準で提供されるものの、各MCUベンダーが提供するのが原則(クリックで拡大)

Copyright © ITmedia, Inc. All Rights Reserved.