IoT用に適切なRTOSとマイクロコントローラプラットフォームを選択する方法
DigiKeyの北米担当編集者の提供
2019-06-12
モノのインターネット(IoT)デバイスの開発は、多くの開発者や企業が考えるよりも困難かもしれません。組み込みシステムをクラウドに接続すること自体が、システムの時間計算量を劇的に増大させるからです。時間計算量が増えると、実行すべきコードとその実行のタイミングをソフトウェアによってどう決定するかを管理するための、より優れた方法が必要になります。カスタムスケジューラの書き込みやベアメタルレベルでタイミングに対処することを回避するには、時間計算量の管理に役立つリアルタイムオペレーティングシステム(RTOS)を使用することが最善の方法です。
現在、RTOSを使用する際に課題となるのが、多くの開発者がオペレーティングシステム(OS)のないベアメタル環境に慣れていることです。そのため、特定のアプリケーションに適切なRTOSを選択するのが難しい場合があります。RTOS市場のオンライン簡易調査を行えば、開発者が利用できるRTOSは、オープンソースから認定された商用RTOSに至るまで100種類以上にのぼるという結果がでるでしょう。では、どのようにRTOSを選択して、開発に着手すればよいのでしょうか?
この記事では、まずアプリケーションに最適なRTOSを評価する方法を説明し、それから開発に着手するために使用可能なSTMicroelectronicsおよびRenesasの開発プラットフォームについて考察します。
RTOS選択時の考慮事項
リアルタイムオペレーティングシステムは、開発者がアプリケーションコードを構築するための基盤となります。適切なRTOSを選択することは、アプリケーションが堅牢で実績のある基盤の上に構築されるようにするために重要です。ただし、1つのパラメータにのみ基づいてRTOSを選択するケースが往々にしてあります。そのパラメータとは、コストです。
コストは考慮すべき重要な要素ですが、唯一の要素ではありません。選択したRTOSの移植および実装に苦労したり、サポートが不足したりするだけで、開発チームは商用RTOSの10倍ものコストをいとも簡単に費やしてしまいます。プロジェクトに費やされる時間は言うまでもありません。一般的に、アプリケーションに適切なRTOSを選択する際に、開発チームが考慮すべき次のような8つのカテゴリがあります。
- 法的責任と負担
- 性能
- 特長
- コスト
- エコシステム
- ミドルウェア
- RTOSベンダー
- エンジニアリング志向
各カテゴリには、RTOSごとに評価する必要のある複数の基準が含まれる場合があります。たとえば、法的責任のカテゴリでは、チームは次の点を考慮する場合があります。
- RTOS侵害責任
- 補償
- 保証
- 法的観点からRTOSをレビューする必要性
性能のカテゴリでは、開発者は次の点を考量する場合があります。
- 実行可能なメモリフットプリント
- RAMフットプリント
- 高度な決定論性
- ランタイム効率
各主要カテゴリは開発および経営チームによって検討され、どの基準でRTOSを評価すべきかが決定されます。基準が設定されたら、Kepner-Tregoe(KT)マトリクスを使用して複数の異なるRTOSを評価することができます。これは、意思決定のための合理的なモデルであり、リスクのアセスメントおよび優先順位付けに重点を置いて、情報を収集、優先順位付け、評価するのに役立ちます。意思決定プロセスから個人的なバイアスを取り除き、マイナスの結果を最小限に抑えつつ、考え得る最善の選択に到達することができます。では、KTマトリクスを使用してRTOSを選択する方法を見ていきましょう。
RTOSの選択にKTマトリクスを使用する
RTOS選択用のKTマトリクスは、図1および図2で示すようにセットアップできます。これは各選択カテゴリに対する選定基準を明らかにし、それを一列に一覧表示しようというものです。各基準には、その重要度を1から5の尺度でランク付けする重みをつけることができます。5は非常に重要である(例:コスト)ことを、1はそれほど重要でない(例:法的責任)ことを示します。次に、チームの各メンバー用の列を作成して、検討中の各RTOSについて各基準の重要度をランク付けできるようにします。各基準は重み付けされた上で合計され、先入観にとらわれない数値結果が生成されます。数値の最も高いRTOSが、基準に最も適したRTOSということになります。
図1:RTOS選択用KTマトリクスの上半分これには、責任負担、RTOS性能、機能、およびコストの評価が含まれます。(画像提供:Beningo Embedded Group)
図2:RTOS選択用KTマトリクスの下半分には、エコシステム、ミドルウェア、ベンダー、およびビジネスの評価が含まれます。(画像提供:Beningo Embedded Group)
図1および図2に示された例は、評価対象となる基準の数が非常に多くなっています。これは多くの開発チームで評価しようとする基準の数よりも多いかもしれません。ただし、ウェイトを0に設定するか、スプレッドシート内の行を非表示にすることで、基準の数は簡単に減らすことができます。
RTOS開発立ち上げの基盤となるプラットフォーム
RTOSの評価で開発者が苦労するかもしれない分野の1つは、そのRTOSが性能と機能のニーズを満たすかどうかを判断することです。多くの場合、開発者が評価を深く掘り下げて、自らRTOSを実際に使用してみない限り、その答えを見つけることはできません。つまり、RTOSを評価およびテストするには、そのRTOSを使用する既存の開発プラットフォームを活用することが非常に簡単で低コストな方法なのです。普及しているオペレーティングシステムのオープンソースFreeRTOSとExpress LogicのThreadXをサポートするプラットフォームをいくつか調べてみましょう。
最初に調べるのは、STMicroelectronicsのSTM32Cubeプラットフォームです。STM32Cubeプラットフォームは、STMicroelectronicsのSTM32CubeMxおよびSTM32CubeIDE開発環境の一部としてFreeRTOSをサポートします。これらのツールでは、単にFreeRTOSチェックボックスにチェックマークを入れるだけでFreeRTOSを有効にできます。また、FreeRTOS設定ツールを使用して、内部のすべての設定値を設定できます。これにより、開発者はFreeRTOSを非常に迅速に立ち上げて実行できるようになり、その機能および性能特性の評価を開始できます。
STMicroelectronicsのツールチェーン内には、選択可能な様々な開発ボードが数多くあります。長年にわたり非常に人気のある実証済み開発ボードの1つは、STM32F429 Discoveryボード(STM32F429I-DISC1)です(図3)。
STM32F429は、最大168MHzの速度で動作するArm® Cortex®-M4プロセッサです。このマイクロプロセッサは、2MBのフラッシュと256KBのSRAMをサポートします。これは、非常に高度なアプリケーションを開発するのに十分なコードとメモリです。開発ボードには、LCD、複数のLED、および拡張可能なI/Oも含まれます。
図3:STM32F429I Discoveryボードは、Arm Cortex-M4プロセッサを使用する低コストの開発ボードであり、RTOSを評価しようとする開発者に大きな処理能力を提供します。(画像提供:STMicroelectronics)
機械学習も実行する必要があるRTOSベースのIoTエッジデバイスに取り組む開発者の場合は、STM32F7 Discoveryボード(STM32F746G-DISCO)がより適しています(図4)。STM32F7 Discoveryボードは、キャッシュを内蔵し、最大216MHzのクロック速度で動作するArm Cortex-M7プロセッサをベースにしており、1MBフラッシュと340KBのSRAMも内蔵しています。開発ボードには、4.3インチの480 x 272ピクセルディスプレイ、Ethernet、SDスロット、USB、マイク、スピーカ接続なども含まれています。
図4:STM32F746G Discoveryボードは、Arm Cortex-M7プロセッサを使用する低コストの開発ボードです。これにより、開発者はRTOSだけでなく、IoTエッジデバイスで使用する必要のある機械学習推論も評価できます。(画像提供:STMicroelectronics)
最後に検討する開発ボードは、STM32L0 Nucleoボード(NUCLEO-L073RZ)です(図5)。STM32L0 Nucleoボードは、最小限のエネルギー消費で動作するように設計されたArm Cortex-M0+をベースにしており、低電力の電池駆動IoTエッジデバイスに最適です。STM32L0マイクロコントローラは最大24MHzのクロック速度で動作し、192KBのフラッシュと20KBのSRAMを内蔵しています。これは、RTOSの実行には欠かせない最低限の特性に非常に近い仕様です。この開発ボードは、ユーザースイッチとLEDが1つずつしかない必要最小限の構成です。
図5:NUCLEO-L073RZ STM32L0開発ボードはArm Cortex-M0+プロセッサをベースにしています。このプロセッサは低電力デバイスに高い性能を提供するよう設計されています。(画像提供:STMicroelectronics)
次に調べるプラットフォームは、Renesas Synergy™ Platformです。これは、定評のあるプロバイダから豊富なサードパーティソフトウェアや開発ツールが提供されるという点で、組み込み業界ではユニークなプラットフォームです。
たとえば、仮にSTMicroelectronics開発ボードのユーザーがIAR SystemsのEmbedded Workbenchコンパイラ/開発環境でExpress LogicのThreadX RTOSを使用しようとした場合、IARからはコンパイラを入手し、Express LogicからはRTOSを入手して、それぞれを使用するためのライセンスを購入する必要があります。しかし、Renesas Synergy Platformなら、Renesas系のマイクロコントローラを1つ購入するだけで、開発者は、作業に必要なツール類とRTOSに加えて他のミドルウェアを自動的に入手できます。
ハイエンドプロセッサでThreadXをテストしようとする開発者にとって、Renesas Synergy SK-S7G2開発ボード(YSSKS7G2E30)は優れた選択肢となります(図6)。SK-S7G2は、240MHzのクロック速度で動作し、3MBのフラッシュと640KBのRAMを内蔵するArm Cortex-M4プロセッサをベースにしています。この開発ボードは、LCD、多数のLED、I/O拡張、CAN、PMOD拡張、およびシリアルポートや追加I/Oへの簡単なアクセスを備えています。
図6:Renesas Synergy SK-S7G2開発ボードでは、Express LogicのThreadX RTOSを含む商用開発ツールが提供されます。(画像提供:Renesas)
ThreadXのテストに使用できるもうひとつの開発ボードは、Renesas Synergy TB-S5D5(YSTBS5D5E10)です(図7)。TB-S5D5ボードは、120MHzで動作し1MBのフラッシュと384KBのSRAMを内蔵するArm Cortex-M4プロセッサを搭載した低コストの開発ボードです。コストを最小限に抑えるため、この開発ボードには、ユーザーボタン、静電容量式タッチ、LEDという最小限の機能だけが搭載されています。
図7:Renesas Synergy TB-S5D5開発ボードは、ThreadXのテストに適した1MBのコードフラッシュと384KBのSRAMを搭載しています。(画像提供:Renesas)
特にIoTアプリケーションに関心を持つ開発者にとって興味深い選択肢となるのが、Renesas Synergy AE-Cloud1 IoTキットYSAECLOUD1(図8)、およびRenesas Synergy AE-Cloud2 Cellular IoTキットYSAECLOUD2(図9)です。
Synergy Cloud1 IoTキットは、Wi-Fi経由でクラウドに接続する機能を備えています。一方、Cloud2 Cellularキットでは、セルラーネットワーク経由でも接続が可能です。どちらの開発ボードもS5D9プロセッサをベースにしており、クラウドからの監視および制御が可能なオンボードセンサとLEDを搭載しています。このキットでは、ThreadXを含む事前インストール済みのソフトウェアも提供され、開発者はRTOSを使用したコネクティビティソリューション全体をテストすることができます。(これは、前述のKTマトリクスにおいてミドルウェアの項目を評価するのに役立ちます。)
図8:Renesas Synergy AE-Cloud1 IoTキットは、Wi-Fi経由でクラウドに接続するIoTデバイス専用に設計された開発ボードです。このキットには、Amazon Web Services(AWS)やMicrosoft AzureなどのクラウドプロバイダからLEDを制御しセンサ値を監視する機能が搭載されています。(画像提供:Renesas)
図9:Renesas Synergy AE-Cloud2 Cellular IoTキットは、Wi-Fiまたはセルラー経由でクラウドに接続するIoTデバイス専用に設計された開発ボードです。このキットには、AWSやAzureなどのクラウドプロバイダからLEDを制御しセンサ値を監視する機能が搭載されています。(画像提供:Renesas)
プラットフォームに関する重要なメモ:RTOSを評価する場合は、同一条件での比較を実行するようにしてください。たとえば、168MHzで動作するSTM32F429 DiscoveryボードでFreeRTOSを評価した場合、他のRTOSを評価する場合も同じ開発ボードを使用するか、同じクロック速度で動作する開発ボードを使用するようにしてください。
RTOSの使用に関するヒントとコツ
すべてのRTOSには独自の「ヒントとコツ」がありますが、RTOS全体に適用可能な経験則がいくつかあります。
- タスクやRTOSオブジェクトを静的に割り当てる。タスクやオブジェクトを動的に割り当てると、メモリ割り当て(malloc())の使用が必要になります。これは、非決定的で、ヒープ断片化の問題を引き起こす可能性があり、性能の低下や、最悪の場合はシステムクラッシュにつながります。
- アプリケーションのニーズに合わせてデフォルトのスタックサイズを変更する。多くのRTOSが提供するデフォルトのスタック値は、ほとんどのタスクには大きすぎてRAMを無駄にしてしまいます。デフォルトのスタックサイズを手動で設定するだけでなく、関数やニーズに合わせて各タスクのスタックサイズも調整してください。
- タスクから呼び出される関数は再入可能にする。これにより、優先度の高いタスクから割り込まれたり、複数のタスクから関数が呼び出されても、他のタスクのデータを破損するリスクがなくなります。
- メモリブロックプールを使用する(利用できる場合)。メモリブロックプールは、決定的動作をするメモリプールであり、実行時にこれを使用してメモリを動的に割り当てることができます。これは、malloc()を使用するよりも優れた選択肢ですが、ほとんどのオープンソースオペレーティングシステムはこのメモリ管理機能を備えていません。
- アプリケーションで使用するタスクの数を最小化する。RTOSを使用するとついタスクをたくさん作成したくなりますが、不必要なタスクを作成すると、タスク制御ブロックとそれに関連した別個のスタック領域のニーズが増え、使用可能なメモリが大幅に減少する場合があります。
結論
IoTによって組み込みシステム内のソフトウェアがますます複雑になる中で、開発者がこの複雑さに取り組んで概念化できるようにするにはRTOSの使用が必須条件になりました。ただし、単に好きなRTOSを選べばいいというわけではありません。すべてのRTOSが同様に作成されているわけではないため、RTOSが開発者の目的と相反する場合は、多大な時間と努力が無駄になる可能性があります。
むしろ、開発者はRTOSの選択において積極的なアプローチを取り、RTOSそのものだけでなく、RTOSベンダーや問題発生時に得られるサポートなど周辺の考慮事項を含む、あらゆる側面を慎重に評価する必要があります。効果的なアプローチは、まずKTマトリクスで検討中のRTOSを慎重に評価し、そのRTOSを完全にサポートするマイクロコントローラプラットフォーム上で実行することです。これにより、そのRTOSがアプリケーションに最適かどうかを確認することができます。
免責条項:このウェブサイト上で、さまざまな著者および/またはフォーラム参加者によって表明された意見、信念や視点は、DigiKeyの意見、信念および視点またはDigiKeyの公式な方針を必ずしも反映するものではありません。


