スライド 1

Similar documents
EV3_APIの解説.pptx

EV3RTの概要.pptx

EV3RT Real- Time platform for EV3 user/ev3pf/wiki/whatsev3rt TOPPERS/HRP2カーネルをベースとしたプラット フォーム メモリ 保 護 機 能 を 提 供 CやC++で 開 発

Microsoft PowerPoint _開発環境構築相談会_資料_05.pptx

ERTLテンプレート

第一章 LPC2478 ボードの概要...3 第二章 uclinux の初体験 SD カードのテスト USB メモリのテスト USB Devices のテスト network のテスト...6 第三章 uclinux のコンパイル...

Raspberry Pi で WEB カメラを使用 会津大学 RT ミドルウェア講習会 2017 The University of Aizu

C#の基本

CommCheckerManual_Ver.1.0_.doc

GettingStartedTK2

TOPPERS基礎ロボコンセミナー

1. USB の VCP( 仮想 COM ポート ) について USB の VCP( 仮想 COM ポート ) は USB を非同期シリアル通信として使用するための USB のドライバです PC には VCP ドライバをインストールする必要があります USB の VCP( 仮想 COM ポート )

CoIDE 用 F4D_VCP の説明 V /07/05 USB の VCP( 仮想 COM ポート ) による非同期シリアル通信を行うプログラムです Free の開発ツール CoIDE で作成した STM32F4 Discovery 用のプロジェクトです プログラムの開始番地は 0x

MINI2440マニュアル

PowerPoint プレゼンテーション

1. 概念 STM32F4 Discovery 基板は Mini USB を接続して デバッグやプログラムの書き込みができるようになっています 通常は CPU の 0x 番地からプログラムを実行します では なぜわざわざこのプロジェクトの雛形を使用して CPU の 0x

Application Note Application Note No. ESC-APN Document No.: ESC-APN adviceluna Linux デバッグ手順 (MIPS コア編 ) はじめに adviceluna Linux デバッグ手順 ( 以

SDC_SDIO_STM32F4 の説明 2013/09/17 SDIO インターフェースで SD カードをアクセスするプログラムのプロジェクトサンプルです FAT でファイルアクセスするために FatFs( 汎用 FAT ファイルシステム モジュール ) を使用しています VCP(USB 仮想 C

Raspberry Pi (Windows10 IoT Core) を使用したリーダ ライタの制御例 (UART 接続 ) 2018 年 12 月 18 日第 版 株式会社アートファイネックス

Microsoft Word - XOOPS インストールマニュアルv12.doc

RTC_STM32F4 の説明 2013/10/20 STM32F4 内蔵 RTC の日付 時刻の設定および読み込みを行うプログラムです UART2( 非同期シリアル通信ポート 2) を使用して RTC の設定および読み込みを行います 無料の開発ツール Atollic TrueSTUDIO for

PCL6115-EV 取扱説明書

MS916 バッチ操作ガイド FW バージョン 0.52 向け バッチ操作の基本 MS916 のバッチ操作について バッチ操作では 読取ったバーコードデータはすべて 不揮発性のメモリ (1MB ROM JAN-13 約 50,000 件 ) に保存されます メモリに保存されたデータは任意のタイミング

サーバ/クライアント オプション

EV3 の初期設定

0_テキストマイニング環境構築_mac

利用ガイド

<4D F736F F F696E74202D20834A815B836C838B835C815B835882CC95E082AB95FB F4B2E B8CDD8AB B83685D>

MINI2440マニュアル

04-process_thread_2.ppt

株式会社日新テクニカ USB シリアル CAN 変換器 /8/22 ホームページ : メール

リファレンスアプリケーション RefApp7

1. A/D 入力について分解能 12bit の A/D コンバータ入力です A/D 入力電圧とディジタル値との対応は理論上 入力電圧 0V : 0 入力電圧 +3V : 4095 です 実際はオフセットと傾きがあり ぴったりこの数値にはなりません 2. A/D 入力に使用する信号 STM32L_A

memo

OS

ServerView RAID Manager VMware vSphere ESXi 6 インストールガイド

iExpressソフトフォン TE20-ST-EX

MAHO Dialer について MAHO Dialer は MAHO-PBX を経由し PC にて着信時に発信者情報をポップアップしたり 着信履歴などから発信操作を行うためのソフトウエアです このガイドでは MAHO Dialer のインストール アップデート 初期設定 使用方法 および アンイン

SystemDirector Developer's Studio(V3.2) 適用ガイド

Microsoft Word - index.html

Microsoft Word - RefApp7インストールガイド.doc

Microsoft PowerPoint _2.プログラミングの基礎_final.pptx

インテル(R) Visual Fortran コンパイラ 10.0

ch2_android_2pri.indd

MINI2440マニュアル

Microsoft PowerPoint _2.プログラミングの基礎_final

7th CodeGear Developer Camp

Microsoft Word - DTX7LM.doc

プログラマブル LED 制御モジュール アプリ操作説明書 プログラマブル LED 制御モジュール設定アプリ操作説明書 適用モジュール 改訂番号 エレラボドットコム 1

KEW Smart for KEW3441BT 取扱説明書

MINI2440マニュアル

Microsoft Word - VPN...[.U.K.C.hLinux doc

BizBrowser SmartDevice Android開発用スタートアップガイド

目 次 1. All-In-One プリンタユーティリティ概要 All-In-One プリンタユーティティについて 対応プリンタ機種 システム要件 セットアップ方法 All-In-One プリンタユーティリテ

Windows2000/XPインストール手順

AutoSway_Gaide_kari4

Microsoft Word - (171118_v4250)ACS_インストールマニュアル.doc

データベースアクセス

今月の呼びかけ 添付資料 ファイル名に細工を施されたウイルスに注意! ~ 見た目でパソコン利用者をだます手口 ~ 2011 年 9 月 IPA に RLTrap というウイルスの大量の検出報告 ( 約 5 万件 ) が寄せられました このウイルスには パソコン利用者がファイルの見た目 ( 主に拡張子

不可能への挑戦株式会社日昇テクノロジー低価格 高品質が不可能? 日昇テクノロジーなら可能にする Mini2440 クイックインスト ールマニュアル 株式会社日昇テクノロジー 更新日 2013/08/13 日昇テクノロジー c

intra-mart e-Builder ver 5

ファイル メニューのコマンド

1. UART について UART は Universal Asynchronous Receiver Transmitter の頭文字をとったもので 非同期シリアル通信と呼ばれます シリアル通信とは 一本の信号線でデータをやりとりするために 1bit ずつデータを送出することをいいます データを受

『テクノス』V2プログラムインストール説明書

CubePDF ユーザーズマニュアル

Windows Graphic Loader for Label Printers

XIMERA(Ver1

Microsoft PowerPoint - Kozos12step_

SAC (Jap).indd

MS5145、MS7120,USB通信の設定

第 7.0 版 利用履歴管理 ETCPRO5 セットアップマニュアル (Ver5.002) カードリーダモデル変更 ( 表示付き 表示なし ) に伴い 改訂 Windows10 対応に伴い 改訂 参考ホームページサイト :

フローチャート自動生成ツール yflowgen の使い方 目次 1 はじめに 本ツールの機能 yflowgen.exe の使い方 yflowgen.exe の実行方法 制限事項 生成したファイル (gml ファイル形式 ) の開

Studuinoプログラミング環境

RW-5100 導入説明書 Windows7 用 2017 年 7 月 シャープ株式会社

Microsoft PowerPoint _VL-CD2xx バージョンアップ手順(汎用版).pptx

スライド 1

TWE-Lite R 取扱説明書

Microsoft PowerPoint Java基本技術PrintOut.ppt [互換モード]

PICKIT3オフライン書き込みガイドブック

AP-RZA-1A シリアルFlashROMの書き込み方法

PIC

WebARENA SuiteX V2 EC-CUBE 2.13 インストールマニュアル ( 標準 MySQL+ 非 SSL ) 作成 :2014 年 2 月 Ver.1.1

Flex Signal for AirGRID

Section 16-7 Mac で Windows も使う (Boot Camp) 光学式ドライブ DVD が読み取れる光学式ドライブを使った方がスムーズにインストールできます 光学式ドライブの付 いていない Mac は Windows インストールディスクの ISO イメージデータを使ってもイン

平成 28 年度大学情報セキュリティ研究講習会 A-2 標的型攻撃を受けているらしいとの連絡があった時の調査と対応の演習 実習資料 A-2 標的型攻撃を受けているらしいとの連絡があった時の調査と対応の演習 実習環境について 攻撃側 PC(attacker-pc) と感染側 PC(sjk-pc) の

IntroductionForGR-PEACH.pptx

Microsoft Word - XPC4ソフトマニュアル.doc

モバイル統合アプリケーション 障害切り分け手順書

Diginnos PC 初期化方法 初期化操作を行うと ストレージ ( ハードディスク / SSD)( 以降ストレージと記載します ) 内のデータが全て初期化されます 必要なデータは他のメディア等にバックアップのうえ作業してください 初期化とは Windows 10 のプッシュボタンリセットの機能の

Microsoft Word - tutorial3-dbreverse.docx

目次 1. はじめに WEB インタフェース... 4 アクセス方法... 4 操作方法 FTP クライアント FFFTP(WINDOWS) インストール方法 アクセス方法 操作方法 CYBERD

PowerPoint プレゼンテーション

「MT-3_2-ja

FTP_RW_ProgramDescription_jp_V100

KEW Smart for KEW3552BT 取扱説明書

厚生労働省版ストレスチェック実施プログラム 設置 設定マニュアル Ver.3.0 目次 1. プログラム概要 設置手順 注意事項 動作環境 初期設定 ( 環境設定 ) 初期設定 ( パスワード変更 ) 初

作業環境カスタマイズ 機能ガイド(応用編)

ATDEインストールガイド

OpenAM 9.5 インストールガイド オープンソース ソリューション テクノロジ ( 株 ) 更新日 : 2013 年 7 月 19 日 リビジョン : 1.8

Microsoft Word - ModelAnalys操作マニュアル_

Transcription:

ET ロボコン向け TOPPERS 活用セミナー 動かしながら学ぶ EV3RT のアプリケーション開発 2018 年 6 月 16 日 ( 土 ) 松原豊 ( 名古屋大学 ) 1

EV3RT のインストール 開発環境をホスト PC にインストール http://dev.toppers.jp/trac_user/ev3pf/wiki/devenv の 開発環境 ( クロスコンパイラ, ツール ) のインストール を参考に 動作確認済のバージョンのコンパイラを使うことを推奨 パッケージをダウンロード http://dev.toppers.jp/trac_user/ev3pf/wiki/download から β7-1(ev3rt-beta7-1-release.zip) を取得 パッケージを解凍 $ unzip ev3rt-beta7-1-release.zip カーネルソースコードを解凍 $ cd ev3rt-beta7-1-release $ tar xvf hrp2.tar.xz 最近 一部の環境で β7-1 の倒立用サンプルでは開始直後に尻尾のモータが暴走する報告があった 似ている問題があったら β7 を試してください 2

EV3RT パッケージのフォルダ構成 ファイル / フォルダ名 内容 Changelog.txt リリースノート. 変更履歴. EV3RT_C_API_Reference/ EV3RT_CPP_API_Reference/ EV3RT の C API リファレンス index.html を開くと閲覧可能 EV3RT の C++ API リファレンス ngki_spec-171.pdf TOPPERS カーネルの仕様書 (Ver.1.7.1) sdcard/ SD カードに保存するファイルのサンプル EV3RT はカーネルやアプリケーションのイメージファイルを SD カードに保存し,EV3 本体に挿入することで使用 hrp2/ EV3RT のソースコード本体 ( 後ろで詳細に解説 ) HRP2 カーネル デバイスドライバやミドルウェア アプリケーションのワークスペース 3

SD カードに置くファイルのサンプル sdcard フォルダの中身 ファイル / フォルダ名 uimage ev3rt/ apps/ etc/rc.conf.ini res/ 内容 EV3RT のカーネル, 動的ローダのイメージファイル (EV3 に電源を入れるとこのファイルを使って起動 ) EV3RT が使用するディレクトリ アプリケーションのロードイメージを置くフォルダ 各種設定ファイル サンプルアプリケーション ( ファイル I/O) で使用しているフォルダ. プログラムでは /ev3rt/res というパスでアクセスできる. 4

設定ファイルでできること 動作ログの出力先の変更 無効化 [Debug] # DefaultPort = UART UART を使用する場合 DefaultPort = BT Bluetooth を使用する場合 # DefaultPort = LCD LCD を使用する場合 何も指定しない場合の出力先は LCD Bluetooth の接続情報の変更 [Bluetooth] LocalName=Mindstorms EV3 PinCode=0000 ペアリング時のピンコード rc.conf.ini rc.conf.ini ホスト PC から見える EV3 本体のデバイス名 5

設定ファイルでできること その他の設定項目 [Bluetooth] DisablePAN=0 IPAddress=10.0.10.1 [Sensors] DisablePort1=1 [USB] AutoTerminateApp=1 [Debug] LowBatteryWarning=0 rc.conf.ini Bluetooth PAN の無効化 EV3 の IP アドレス センサポート 1 の無効化 ( シリアルとして使用 ) USB 接続した時 アプリを終了 バッテリ低下のアラーム機能 6

EV3RT のカーネル (hrp2 フォルダ ) の内容 アプリケーション開発に関係しそうなもののみ フォルダ名 arch, include, extension, kernel, library, pdic, syssvc, target base-workspace sdk/workspace cfg configure 内容 HRP2 カーネルのソースコード. デバイスドライバなどは target/ev3_gcc/ の下 アプリケーションローダ アプリケーション開発用ワークスペースサンプルアプリケーション EV3RT でのアプリケーション開発に必要なツール ( 静的 API C コード生成 ) Windows 以外の環境では,cfg のバイナリを入れ替える必要がある.http://www.toppers.jp/cfgdownload.html から環境にあったバイナリをダウンロードし,cfg/cfg/ に置く. アプリケーションの Makefile をテンプレートから生成するユーティリティ 7

EV3RT の起動順序 1. EV3 の電源を入れる 2. EV3 のメモリに書き込まれているブートローダ (uboot) が起動する 3. SD カードにある uimage ファイルを,EV3 の SDRAM に展開して実行する 8

アプリケーションのビルド EV3RT の workspace フォルダに移動 $ cd ev3rt-beta7-1-release/hrp2/sdk/workspace/ アプリケーションをビルド a) スタンドアローン形式のモジュールをビルドする場合は make img=< フォルダ名 > $ make img=helloev3 uimage というファイルが生成される b) 動的ローディング形式のモジュールをビルドする場合は make app=< フォルダ名 > $ make app=helloev3 app というファイルが生成される 9

アプリケーションのビルド スタンドアローン形式が成功した場合 10

アプリケーションのビルド 動的ローディング形式が成功した場合 11

スタンドアローン形式 スタンドアローン形式とは? EV3RT の起動とともにアプリケーションの実行を開始する形式 EV3RT とアプリケーションを一つのモジュール (uimage ファイル ) にリンクする アプリケーションの更新方法 SD カードのトップフォルダにある uimage ファイルを更新する アプリケーションを変更する度に,uImage ファイルを作り直す必要がある 12

スタンドアローン形式 アプリケーションの実行方法 1. 実行モジュール (uimage) を make img で生成 2. uimage を SD カードのトップに置く 3. EV3 を起動 ( 中央ボタンを押す ) 4. Run App と画面下部に表示されているときに, 中央ボタンを押すとアプリケーションが起動 Run 13

動的ローディング形式 動的ローディング形式とは? EV3RT の起動後に, アプリケーションローダを使って, 実行するアプリケーションを選択 ( ロード ) して実行する形式 アプリケーションモジュール ( デフォルト名は app) と, ローダを含む EV3RT のモジュールを別々にビルドする アプリケーションローダは, スタンドアローン形式で提供されるアプリケーションの一種 (base-workspace) アプリケーションの更新方法 アプリケーションモジュールを,SD カードの /ev3rt/apps フォルダに置く EV3RT 起動中に,Bluetooth/USB/ シリアルケーブル経由でアプリケーションモジュールを転送可能 http://dev.toppers.jp/trac_user/ev3pf/wiki/sampleprog ram#pc から EV3 へのアプリケーションのロード方法の選択 14

動的ローディング形式 アプリケーションの実行方法 1. アプリケーションのモジュールを make app で生成 2. app を SD カードの /ev3rt/apps/ に置く ファイル名を app から変更しても構わない 3. EV3 を起動 ( 中央ボタンを押す ) 4. Load App と画面下部に表示されているときに中央ボタンを押すと, アプリケーションローダが起動するので SD card を選択し, アプリケーションを選択して起動 上下ボタンでカーソル移動, 中央ボタンで決定 アプリケーション実行時にバックボタンを長押しすると, コンソールに戻る コンソールで右ボタンを押して Shutdown と画面下部に表示されているときに中央ボタンを押すと電源を切る ( 左 + 右 + バックボタンを同時に長押しする方法もある ) 15

参考 : ビルドの仕組み (make での処理内容 ) 1. sdk/workspace/makefile を使って make img=test or app=test を実行 2. sdk/workspace/test/makefile.inc を include configure のパラメータを設定 3. sdk/obj を mkdir して OBJ/ に移動 4. OBJ/ で configure を実行して,Makefile を生成 sdk/workspace/test をパスに含めて,2 の設定を使用 Makefile のテンプレートは sdk/common/makefile.img, Makefile.app 5. OBJ/ で 4. で生成した Makefile を使って make 6. スタンドアローン版の場合は,objcopy で ELF 形式のモジュールからバイナリ形式の hrp2 を生成したあと,mkimage コマンドで hrp2 から uimage を生成 uboot がロードするためのファイル形式に変換 7. sdk/workspace/ に app or uimage をコピー app は動的ローディング形式のアプリケーションモジュール 16

新しくプロジェクトを作る 簡単な方法は既存のプロジェクトをコピーする 1. cp a ev3way-cpp new_proj C 言語の場合は,gyroboy をベースにすると良い 2. 不要なソースコードファイルを削除し, 必要なファイルを追加注意 :app.h, app.cpp[c], app.cfg は必要なファイルなので削除しないこと! ファイル名を変える場合は,workspace/Makefile の -A app の部分を変更するか, sdk/common/makefile.img[app] の APPLNAME を直書きすればよい 3. Makefile.inc でアプリケーションの設定 app.c 以外のソースコードを追加する場合は, 以下のようにビルド対象に追加する.app.cfg 以外の cfg を追加する場合は app.cfg から INCLUDE すればよい APPL_COBJS += xxx.o # gcc でビルドするファイル群 APPL_CXXOBJS += xxx.o # g++ でビルドするファイル群 SRCLANG := c c++ # C のみか C++ ありか 17

タスクを追加する (1/2) cfg ファイルにタスクを生成するための静的 API を追加 CRE_TSK( タスク ID, { タスク属性, タスクに渡す引数, タスクの関数名, 優先度, スタックサイズ, スタックの先頭番地 }) タスク ID はシステムサービスのパラメータとなるマクロ識別子 タスク属性は初期状態 (TA_ACT: 起動,TA_NULL: 休止 ) 優先度は 0 に近いほど高い優先度となる スタックの先頭番地は NULL を指定するとカーネルが自動的にスタック領域を確保する タスクを非特権モードで動かすための記述 DOMAIN(TDOM_APP) { CRE_TSK(TEST_TASK, { TA_ACT, 0, test_task, 8, 1024, NULL }); } タスクをカーネルに登録するための記述 app.cfg 18

タスク生成に関係するマクロ /* タスクの優先度 */ #define TPRI_INIT_TASK (TMIN_TPRI) #define TPRI_USBMSC (TMIN_TPRI + 1) #define TPRI_BLUETOOTH_QOS (TMIN_TPRI + 1) #define TPRI_BLUETOOTH_HIGH (TMIN_TPRI + 2) #define TPRI_APP_TERM_TASK (TMIN_TPRI + 3) #define TPRI_EV3_LCD_TASK (TMIN_TPRI + 3) #define TPRI_EV3_MONITOR (TMIN_TPRI + 4) #define TPRI_PLATFORM_BUSY (TMIN_TPRI + 5) #define TPRI_APP_INIT_TASK (TMIN_TPRI + 6) #define TPRI_EV3_CYC (TMIN_TPRI + 7) #define TMIN_APP_TPRI (TMIN_TPRI + 8) #define TPRI_BLUETOOTH_LOW (TMAX_TPRI) target/ev3_gcc/ev3.h EV3RT のアプリで指定できる最高優先度 /* タスクのスタックサイズ */ #define STACK_SIZE 4096 デフォルトのスタックサイズ 19

タスクを追加する (2/2) C ファイルにタスクとして動作する関数を追加 void test_task(intptr_t exinf) { }... ext_tsk(); cfg ファイルに記述したタスクの関数名と同じ名前 app.c cfg ファイルに記述したタスクに渡す引数が exinf に渡される タスクを終了するための API 呼出し そのままリターンしても ext_tsk にジャンプする仕組みになっているが, 明示的に ext_tsk を呼び出すほうが正式 #ifndef TOPPERS_MACRO_ONLY extern void test_task(intptr_t exinf); #endif /* TOPPERS_MACRO_ONLY */ app.h プロトタイプ宣言の追加 20

EV3RT の提供する EV3 用 API APIを提供するモジュール一覧 サーボモータ 各種センサ 超音波, ジャイロ, タッチ, カラー LCD ファイルシステム シリアル送受信機能を含む EV3 本体機能 バッテリ, ボタン,LED, スピーカ 拡張 RTOS 機能 ユーザ空間での周期ハンドラ 21

API リファレンス EV3 用 C 言語 API リファレンス パッケージの EV3RT_C_API_Reference フォルダ または http://www.toppers.jp/ev3pf/ev3rt_c_api_reference/ index.html こちらのリファレンスが C++API に対するベース EV3 用 C++ 言語 API リファレンス パッケージの EV3RT_CPP_API_Reference フォルダ または http://www.toppers.jp/ev3pf/ev3rt_cxx_api_referen ce/index.html モータやセンサをクラス化 22

モータ制御 API の例 (1/3) 関数の引数で使用する列挙型 sdk/common/ev3api/src/ev3api_motor.h typedef enum { EV3_PORT_A = 0, // ポートA EV3_PORT_B = 1, // ポートB EV3_PORT_C = 2, // ポートC EV3_PORT_D = 3, // ポートD TNUM_MOTOR_PORT = 4 // モータポートの数 } motor_port_t; // モータポートを表す番号 typedef enum { NONE_MOTOR = 0, // モータ未接続 MEDIUM_MOTOR, // サーボモータM LARGE_MOTOR, // サーボモータL UNREGULATED_MOTOR, // 未調整モータ TNUM_MOTOR_TYPE // モータタイプの数 } motor_type_t; // サポートするモータタイプ 23

モータ制御 API の例 (2/3) クラス Motor (namespace ev3api) Motor の公開関数 Motor ( コンストラクタ ) ~Motor ( デストラクタ ) reset getcount setcount setpwm setbrake stop API リファレンスを確認してみましょう! http://www.toppers.jp/ev3pf/ev3rt_cxx_api_reference/class ev3api_1_1_motor.html 24

モータ制御 API の例 (3/3) 使用例 sdk/workspace/ev3way-cpp/app.cpp /* モータオブジェクトの生成 */ tailmotor = new Motor(PORT_A); /* モータ停止, 回転角度を 0 初期化 */ tailmotor->reset(); /* モータの回転角度を取得 */ float pwm = (float)(angle - tailmotor->getcount()) * P_GAIN; /* モータ回転速度 (PWM) を設定 */ tailmotor->setpwm(pwm); コンストラクタの引数は, モータを繋いでいるポートに対応する motor_port_t, ブレーキモードの true/false( デフォルトは true), モータに対応する motor_type_t( デフォルトは LARGE_MOTOR) getcount は reset 直後は reset 時からの回転角度を返すが, setcount を呼び出すことで, 回転角度のオフセットを設定可能 25

センサ取得 API の例 (1/3) 関数の引数で使用する列挙型 typedef enum { EV3_PORT_1 = 0, sdk/common/ev3api/arc/ev3api_sensor.h // ポート1 EV3_PORT_2 = 1, // ポート2 EV3_PORT_3 = 2, // ポート3 EV3_PORT_4 = 3, // ポート4 TNUM_SENSOR_PORT = 4 // センサポートの数 } sensor_port_t; // センサポートを表す番号 typedef enum { NONE_SENSOR = 0, // センサ未接続 ULTRASONIC_SENSOR, // 超音波センサ GYRO_SENSOR, // ジャイロセンサ TOUCH_SENSOR, // タッチセンサ COLOR_SENSOR, // カラーセンサ TNUM_SENSOR_TYPE // センサタイプの数 } sensor_type_t; // サポートするセンサタイプ 26

センサ取得 API の例 (2/3) クラス GyroSensor (namespace ev3api) クラス Sensor の子クラス GyroSensor の公開関数 GyroSensor ( コンストラクタ ) setoffset reset getanglervelocity getangle 27

センサ取得 API の例 (3/3) 使用例 sdk/workspace/ev3way-cpp/app.cpp /* ジャイロセンサオブジェクトの生成 */ gyrosensor = new GyroSensor(PORT_4); /* ジャイロセンサ初期化 */ gyrosensor->reset(); /* ジャイロセンサのオフセット値を設定 */ gyrosensor->setoffset(offset); /* ジャイロセンサ値の取得 */ gyro = gyrosensor->getanglervelocity(); getanglervelocity は, ジャイロセンサの現在の値 ( 角速度 ) と, setoffset で指定したオフセット値との差分を返す 28

ファイルシステム API の例 (1/2) シリアル入出力用の列挙型 typedef enum { sdk/common/ev3api/src/ev3api_fs.h EV3_SERIAL_DEFAULT // EV3RTコンソール用ポート EV3_SERIAL_UART // UARTポート ( センサポート1) EV3_SERIAL_BT // Bluetooth 仮想シリアルポート } serial_port_t; // シリアルポートを表す番号 シリアル入出力用の関数 ev3_bluetooth_is_connected ev3_serial_open_file 入出力自体は newlib API を使用できる fprintf, fputc,... 他にファイルストリーム入力用の API もある 29

ファイルシステム API の例 (2/2) 使用例 /* Bluetooth(SPP) 経由でのシリアル I/O の open */ bt = ev3_serial_open_file(ev3_serial_bt) /* ホスト PC と Bluetooth 接続が確立されるまで待つ */ while (!ev3_bluetooth_is_connected()) tslp_tsk(100); /* Bluetooth 経由でのシリアル受信 (1 文字 ) */ uint8_t c = fgetc(bt); /* Bluetooth 経由でのシリアル出力 */ fprintf(bt, "main task started.\n"); app.c 30

拡張 RTOS 機能 API の例 (1/2) ユーザ空間の周期ハンドラ生成用静的 API EV3_CRE_CYC( 周期ハンドラ ID, { 属性, 引数, 周期ハンドラの関数名, 周期 [ms], 初期位相 [ms] }); 各パラメータの意味は CRE_CYC と同じ ユーザ空間の周期ハンドラ制御関数 ev3_sta_cyc 周期ハンドラの動作開始 ev3_stp_cyc 周期ハンドラの動作停止 API の仕様書 (ngki-spec-171.pdf) を確認してみましょう! p.242 周期ハンドラの仕様,p.249 sta_cyc の仕様実行コンテキストは, タスクコンテキストになることに注意 31

拡張 RTOS 機能 API の例 (2/2) 使用例 DOMAIN(TDOM_APP) { EV3_CRE_CYC(TEST_EV3_CYC, { TA_NULL, 0, test_ev3_cychdr, 250, 0 }); } void main_task(intptr_t exinf){ /* 周期ハンドラの開始 */ ev3_sta_cyc(test_ev3_cyc); } void test_ev3_cychdr(intptr_t exinf) {... } 250ms 周期で起動するようになる app.cfg app.c 32

FAQ Q: アプリケーションのソースコードを複数のサブディレクトリに分けて管理するにはどうすれば良いでしょうか? A:ev3rt/hrp2/sdk/common/Makefile.prj.common を以下のように修正します a) すべてのサブディレクトリを探索対象に入れる場合 APPL_DIR += $(foreach dir,$(shell find $(APPLDIR) -type d),$(dir)) b) 対象を個別に指定する場合 ( ここでは test を追加 ) APPL_DIR += $(foreach dir,$(shell find $(APPLDIR) -type d - name src),$(dir)) APPL_DIR += $(foreach dir,$(shell find $(APPLDIR) -type d - name test),$(dir)) これをディレクトリごとに追加 33

参考 : コマンドによる 1 発アプリ更新 Bluetooth PAN(Personal Area Network) による, 遠隔ソフトウェア更新 (uimage, アプリ ) EV3とPCをBluetoothで接続 アプリローダのメニューで Bluetooth PAN を選択 アプリの更新 $ make upload [ip=<ev3のipアドレス >] [from=< 手元のファイル名 >] [to=< アップロード後のファイル名 >] デフォルトの設定 BT PAN IP: 10.0.10.1 手元のファイル名 :app アップロード後のファイル名 :app イメージファイル (uimage) の更新 $ make uploadimg [ip=<ev3のipアドレス >] [from=< 手元のイメージファイル > Ex. hrp2/sdk/workspace で実行する場合 $ make uploadimg from=../../base-workspace/uimage 34

参考 : コマンドによる 1 発アプリ更新 Bluetooth で接続した後 PAN サービスの有効化が必要 例 :Windows 10 の場合 Control Panel -> Devices and Printers -> EV3 -> Connect using 35

参考 : コマンドによる 1 発アプリ更新 Upload が成功した場合 36

Tips:RTOS の活用, タスク分割のタイミング 1 ループがめちゃくちゃ長くなってきた 見やすく, 管理し易くしましょう 複数のタスク / 関数に分割しましょう 1 ループに色々詰め込んだら, 動作が遅い / 間に合わない処理が出てきた 重要さの違う処理が混在している場合は, タスクを分け, 重要さの低い処理を後回しにしましょう 重要度に応じたスケジューリングを OS に任せましょう 動作して欲しいタイミングが異なる処理 (100ms 秒周期, 1 秒周期など ) が混在している場合は, タスク or 周期ハンドラに分け, タイミング制御を OS に任せましょう 理論的に間に合わないという場合もあるので, うまくいかない場合はタスク設計を見直しましょう 37