TOPPERS/EV3RT活用セミナー

ETロボコン向けTOPPERS活用セミナー

日時:2015年6月20日(土) 10:00 〜 16:30
場所:東京・浜町 東実年金会館
講師:名古屋大学 高田 広章 氏、李 奕驍 氏、石川 拓也 氏

 今年のETロボコンには直接参加はしていないのですが、東京で開催されたETロボコン向けTOPPERS活用セミナーに一般枠で参加させていただいてきました。
 4年前にも「TOPPERS/JSP for NXT」の活用セミナーに参加させていただいたのですが、今年度からターゲットマシンがMindstorms NXTからEV3に変わりソフトウェアプラットフォームもTOPPERS/EV3RT (TOPPERS/HRP2カーネルベース)に一新されたのであらためてお話を伺いに来ました。

 本セミナーでは、名古屋大学教授でTOPPERSプロジェクトを立ち上げられた高田先生をはじめ、EV3RTを開発された李さん、石川さんと豪華講師陣から直接解説を伺い、質問にも丁寧にお答えいただいて大変に勉強になりました。

 会場で私がメモした内容に、ちょこっと私の感想を付け加えてブログに残します。セミナーの網羅的な内容でもなければ、正確な内容でもありません。私が勝手に付け加えている部分もあるので悪しからずご了承ください。間違いがあれば、コメント欄などでご指摘を御願い致します。


 今年からETロボコンの標準ソフトウェアプラットフォームとして採用されたTOPPERS/EV3RTはTOPPERS/HRP2カーネルをベースに開発された。ITRON準拠リアルタイムOSのミニマムセットであるTOPPERS/JSPカーネルに対してTOPPERS/HRP2は保護機能を拡張したカーネルである。 TOPPERS/HRP2はTOPPERS/ASPに保護機能を拡張したカーネルである。

 ETロボコン参加者(初心者???)にはTOPPERS/HRP2カーネルの保護機能を使いこなすのは難しいと感じていたので、このセミナーの機会になぜ保護機能の拡張されたHRP2カーネルを今回採用したかお尋ねしました。
 高田先生からのご回答はすべての参加者が保護機能を直接扱って使いこなすことは期待していない。おすすめの開発環境はダイナミックローディング・モデルでユーザー・プログラムをビルドし実行する方法。するとダイナミックローディングされたユーザー・プログラムは非保護領域ユーザー領域で動作するようにデフォルトでは設定されているため、ユーザー・プログラムが保護領域(OS管理領域)をもし誤って破壊してもエラーがすぐに検出されてデバッグが容易になる、というお話でした。
 保護領域を壊してもWindows 95の「一般保護エラー」的なエラーが検出されるだけですよね?とお尋ねしましたが、それでもOSを壊してシステム全体が暴走するよりはいいと思います、というご説明で腑に落ちました。

 ちなみにEV3RTではユーザープログラムをダイナミックローディング・モデルとワンリンク・モデルの、いずれかのモデル(方法)で作成できますが、ひとまずオススメはダイナミックローディング・モデルだそうです。サンドボックスに隔離された中でユーザー・プログラムを動作させる方法になるそうです。
 以上の説明はあくまでもEV3RTのデフォルト設定(デフォルトのビルドパラメータ)であり、ワンリンク・モデルで保護ドメインを(複数)作ってカーネルを保護することもできるし、ダイナミックローディング・モデルを採用したとしても保護ドメインにアプリ開発者が手を入れることも可能ではあるそうです。

 

名前は似ているが役割が違うので気を付けて!

  • cfgツール : カーネルコンフィギュレーター
  • configureスクリプト : Makefileを生成

 

ダイナミックローディング・モデルでは、ロード可能なユーザープログラムのサイズに制限がある。ただし現状では必要十分なサイズを設定しているため問題とならないでしょう。ワンリンク・モデルであればハードウェアのメモリサイズからくる制約以外は基本的にない。

 

TOPPERS/EV3RTの拡張RTOS機能

 周期起動ハンドラーをユーザー領域(非特権モード)で動作させるように工夫している。

サウンド再生

 音声データをインメモリーに置く必要がある。

microSD対応

 サイズが4GBytes〜32GBytesのSDHC規格のmicroSDカードのみ対応している。

理由
SD規格はByte単位のデータRead/Write。SDHC規格はBlock単位のデータRead/Write。EV3RTはBlock単位のデータRead/Writeしかサポートしてない。48GBytes以上のSDXC規格はハードウェアがサポートしていない。

Bluetooth SoCの機能の違い

  • NXT: SoCにBluetoothプロトコルスタックを内蔵
  • EV3: メインプロセッサでBluetoothプロトコルスタックを実装

EV3ではOSSのBluetoothプロトコルスタックで実現しているがメインプロセッサの負荷は重くなっている。しかしながらNXTよりもEV3のメインプロセッサの能力が格段に上がっているから力づくでBluetooth通信を処理可能である。


Question 1
ポート2~4にセンサーを繋ぐと正しく動作するにも関わらず、ポート1にセンサーを繋いでも動作しないのは、なぜですか?
Answer 1
Beta 4まではポート1をパソコンとEV3を接続してデバッグするためのシリアルコンソールとして利用していたため、センサーとは接続できませんでした。 Beta 5ではポート1もポート2~4と同じようにセンサーを接続できるように修正しました。

Question 2
cre_tsk()で作成するタスクの関数は関数内部で無限ループを回して関数から抜けないような工夫が必要ですか?
Answer 2
タスクの実行方法は色々あります。タスクの内部で無限ループを回してsleep()で定期的な起床イベントを待つ方法もありますが、周期起動タスクから定期的にタスクを起動する方法もあります。後者の場合は周期起動タスクから起動して必要な処理が終了したらext_tsk()でタスクを毎回終了させる必要があります。ちなみにext_tsk()を明示的に呼び出さなくてもタスクの関数から抜けるときには暗黙的にext_tsk()が呼び出されてタスクが終了します。ただし、コーディングのお作法として関数を抜ける前に明示的にext_tsk()を呼び出すことをお勧めします。

Question 3
ポート1と2はネイティブUART、ポート3と4はソフトウェアUART(PRUSS:Programmable Realtime Unit Subsystem)という説明でしたが、ポート1-2とポート3-4を相互に入れ替えることは可能ですか?
Answer 3
ハードウェア(マイクロプロセッサ)の仕様ですので入れ替えることはできません。一般的な機器であればUARTは2つで十分な数ですが、EV3では最大4つのセンサーと同時にUARTで接続するため数が足りません。そこで複数の使い方ができるPRUSSをソフトウェアの力でUARTとして扱えるように工夫して2本のUARTを追加しています。

Question 4
EV3RTで提供されるAPIの内部で処理がブロックされて、タスクスイッチや割り込みも禁止されるようなケースはありますか?
Answer 4
デバイスドライバである以上、APIの内部でタスクスイッチや割り込みを禁止している部分はあります。但し、センサーの値を読み込んだり、Bluetoothで通信する際に、APIの内部で何秒もブロックするようなことは起きないように実装しています。

Question 5
Bluetoothタスクが20ミリ秒周期で高優先度で走る理由は何ですか? 100ミリ秒周期ではダメですか?
Answer 5
Bluetoothの接続をキープするためです。現在の20ミリ周期であればBluetoothの接続が失われないことを確認しています。100ミリ周期にしたときにBluetoothの接続が保持されるか、途中で切断されるかは分かりません。

Question 6
USBホスト機能やUSB接続のWi-Fiドングルを今後サポートする予定はありますか?
Answer 6
要望が高ければUSB接続のWi-Fiドングルもサポートしたいと思います。ネットワークプロトコルスタックの実装も困難ではありません。ただし、サポートするUSBデバイスは、ある程度決め打ちで限定することになると思います。

Question 7
統合開発環境(IDE)を使っていますか?
Answer 8
石川さんはターミナルで開発。李さんはEclipseをコードエディターとして使っているがワンクリックでビルドやデバッグができるような使い方はしていない。

TOPPERS/EV3RT活用セミナー」への3件のフィードバック

  1. TOPPERS活用セミナーに参加くださり,ありがとうございました。

    上の文中で「ユーザー・プログラムは非保護領域(ユーザー領域)で動作する」の「非保護領域」という言葉使いが気になりました。ユーザードメインに属するメモリは,カーネルドメインからは保護されていませんが,他のユーザドメインからは保護されているわけで,非保護というわけではありません。また,ユーザードメインに属するタスクから他の資源は保護されるわけで,上の記述はユーザードメインには言及していないので間違いとまでは言えないのですが,違和感は感じました。という理由で,ここは,単にユーザー領域と書いた方が良いと思います。

  2. 高田先生、ご指摘ありがとうございます。ご指摘いただいた点を訂正しました。大変勉強になるセミナーをありがとうございました。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください