TOPPERS TECS WG 2014
Upcoming SlideShare
Loading in...5
×
 

TOPPERS TECS WG 2014

on

  • 747 views

TECS: TOPPERS Embedded Component System

TECS: TOPPERS Embedded Component System
In this document we provide you the outline of

Statistics

Views

Total Views
747
Views on SlideShare
309
Embed Views
438

Actions

Likes
1
Downloads
2
Comments
0

2 Embeds 438

https://mj89sp3sau2k7lj1eg3k40hkeppguj6j-a-sites-opensocial.googleusercontent.com 433
http://s.deeeki.com 5

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

TOPPERS TECS WG 2014 TOPPERS TECS WG 2014 Presentation Transcript

  • 1 組込みコンポーネントシステムTECSの概要と TECS WG の活動について 大山博司 TOPPERS プロジェクト TECS WG 主査 名古屋大学大学院 情報科学研究科 客員教授 2014/06/24
  • 2 目次  TECS の特徴  TECS 開発の流れ  ロードマップ  公開パッケージの紹介  今後の開発 2014/06/24
  • 組込みコンポーネントシステム TECS  TECS – TOPPERS Embedded Component System  組込みコンポーネントシステムとは – 組込みソフトウェアをコンポーネントやサブシス テムに分割して開発する方法を支援する仕組み – ソフトウェアを部品化して再利用性を高める、あ るいは部品流通を促進する仕組み  TECS の特徴 1) C言語のためのコンポーネントシステム 2) TOPPERS 系 OS に最適 3) 分散や高級言語 I/F をサポート 32014/06/24 View slide
  • TECS の特徴 1) C言語のためのコンポーネントシステム  マルチインスタンス化が容易(デフォルト) – 同種(同じセルタイプ)のコンポーネントを複数生成 – ポインタ渡し、ID(整数値) 渡しを選択可  ダイナミックバインディング(相当)を実現 – 関数テーブルを自動生成  関数テーブルの要否を、TECS ジェネレータが自動判定 (最適化でメモリおよび実行時オーバーヘッド低減)  カプセル化できる – 関数インタフェースのみで結合  関数インタフェース :TECS では signature と呼ぶ  インタフェースのより正確な定義 – C 言語のプロトタイプ宣言の曖昧さを TECS がカバー  静的な生成と結合 – 実行時オーバーヘッド、メモリオーバーヘッドの低減 42014/06/24 View slide
  • TECS の特徴 2) TOPPERS の RTOS に最適  タスクやセマフォーなどもコンポーネント化 – コンポーネントシステムの下に隠さない  粒度の小さなものも気にせずコンポーネントにできる – インライン関数としてコンポーネントを実装  低オーバーヘッド  cfg, oil ファイルを自動生成 – factory (ルールが複雑な場合は celltype プラグイン) により自動生成  関数名を分かりやすい名前に再定義 ex) act_tsk ⇒ activate (シグニチャ名が対象を表す)  ROM 化をサポート  TOPPERS/HRP2 の保護ドメインを視覚的に表現 – ドメインに合わせて、コードを分割生成 52014/06/24
  • 6 カーネルオブジェクトがコン ポーネント化されている tTask … タスク tCycHdr … 周期ハンドラ tTask MainTask cMain eMain tSampleMain SampleMain cTask[0] cTask[1] cTask[2] cCyc eT tTask Task0 cMain eT tTask Task1 cMain eT tTask Task2 cMain eC tCycHdr CycHdr cHdlr eMain tSubMain SubMain cSysMain eMain tCycMain CycMain ciSys sTask sCyc sMain sMain sMain eSystem eiSystem tKernel ToppersAsp sSystem siSystem sample1.c のコンポーネント 化 TECS 版sample1 (実装例) 2014/06/24
  • KernelDomainUserDomain2UserDomain1 KernelDoamin 7 tTask MainTask cMain eMain tSampleMain SampleMain cTask[0] cTask[1] cTask[2] cCyc eT tTask Task0 cMain eT tTask Task1 cMain eT tTask Task2 cMain eC tCyclicHandler CyclicHandler cHdlr eMain tSubMain SubMain cSysMain eMain tCyclicMain CyclicMain ciSys sTask sCyc sMain sMain sMain eSystem eiSystem tKernel ToppersAsp sSystem siSystem TOPPERS/HRP2 +TECS 版sample1 (実装例) eMain tSubMain SubMain cSysMain 保護ドメインの境界を 視覚的に表現できる TECS では domain 属性を 持つリージョンで区切る 2014/06/24
  • TECS の特徴 3) 分散や高級言語 I/F をサポート  分散フレームワーク – RPCPlugin, OpaqueRPCPlugin により、リモート呼出しに 必要なマーシャラ、アンマーシャラを自動生成 – 通信チャンネルの交換で、種々の環境に対応  mruby から TECS を操作 – MrubyBridgePlugin により、mruby から TECS コンポー ネントを操作するインタフェースコードを自動生成 インタフェースのより正確な定義により、自動生成が可能とな っている 82014/06/24
  • C++よりはTECSをお勧めしたい理由 9  組込みシステムの大多数は C 言語で開発されている  C++ は非常に難しい言語 – C 言語に比べ複雑で、落とし穴も C 言語より多い – 自由度が高いので、明確なルール化が重要  C++はインタフェースの客観性が高くない – 引数の入出力方向、ポインタが配列か、非配列か  TECSでは RPC, TRACE 等各種ブリッジの自動生成が可能  C++は依存関係を明確にしない – 呼び出しを受ける側は明瞭だが、呼ぶ側は不明瞭 – TECS は受け口と呼び口を持つ  TECSではコンポーネントに着眼しやすい – オブジェクトよりも、適切な粒度で捉えやすい 2014/06/24
  • TECS と C++ の対比 102014/06/24 TECS C++ シグニチャ (引数のデータ構造明瞭) インタフェースクラス (引数のデータ構造を明瞭化しない) セルタイプ 実装クラス (ただし直接のメンバー関数を持たないで、イ ンタフェースクラスの関数のみを実装) セル インスタンス (セルの)属性 (ROM 配置を想定) const 付メンバー変数 (ROM 配置しない) (セルの)内部変数 メンバー変数 受け口 (受け口名により、 複数の受け口を区別) インタフェースクラスの継承 (名前衝突の問題がある) 呼び口 参照するインタフェースクラスへのポインタ (これを介してのみ他のオブジェクトを呼び出す) 組上げ (結合を含むセルの定義) 一般的なルールはない(コンポーネントシステ ム等ではルール化されている) セルタイプコード (C言語で振舞いを記述) クラスの実装 (C / C++ で記述)
  • 11 目次  TECS の特徴  TECS 開発の流れ  ロードマップ  公開パッケージの紹介  今後の開発 2014/06/24
  • TECS 開発の流れ これだけ知れば、始められる!  TECS CDL (コンポーネント記述言語)の記述 – コンポーネント間のインタフェースの記述 シグニチャ (signature)記述 – コンポーネントタイプの記述 セルタイプ (celltype) 記述 – コンポーネントの設置と結合 組上げ記述 (cell の記述) ≒ コンポーネント図のテキスト表現  C 言語の記述 – 振る舞いの記述 セルタイプコード = C 言語によるプログラム 122014/06/24
  • 13 TECS CDL:インタフェースの記述 テンプレート コード TECS CDL(コンポーネント記述言語) シグニチャ記述 (インタフェースの定義) セルタイプ記述 (コンポーネントの定義) 組上げ記述 (コンポーネントの 構成の定義) TECS ジェネレータ ヘッダ インタフェース コード Cコンパイラ セルタイプコード (コンポーネントの ソースコード) リンカ アプリケーション 開発者 コンポーネント 開発者 アプリケーションモジュ ール コンポーネント図 製品 エンドユーザー コンポーネント 仕様開発者 仕 様 の 規定 設計 設計 利用 プラグイン プラグイン 開発者 設計 RPC アクセス制御 トレース App File シグニチャ sFile signature sFile { ER open( [in,string]char_t * fileName, [in]int16_t mode); ER close(void); ER read( [out,size_is(length),count_is(*count)]int8_t * buffer, [in]int32_t length, [out]int32_t *count); ER write( [in,size_is(length)]int8_t *buffer, [in]int32_t length, [out]int32_t *wroteLength); ER seek( [in]int32_t offset); }; シグニチャ記述 2014/06/24 ・[ ] 部分を取り除くと、C のプロトタイプ宣言になる ・in, out は入出力方向の指定、size_is, count_is, string は ポインタの指定子で、配列長さ、有効要素数、文字列を指定
  • 14 TECS CDL:コンポーネントタイプの記述 テンプレート コード TECS CDL(コンポーネント記述言語) シグニチャ記述 (インタフェースの定義) セルタイプ記述 (コンポーネントの定義) 組上げ記述 (コンポーネントの 構成の定義) TECS ジェネレータ ヘッダ インタフェース コード Cコンパイラ セルタイプコード (コンポーネントの ソースコード) リンカ アプリケーション 開発者 コンポーネント 開発者 アプリケーションモジュ ール コンポーネント図 製品 エンドユーザー コンポーネント 仕様開発者 仕 様 の 規定 設計 設計 利用 プラグイン プラグイン 開発者 設計 RPC アクセス制御 トレース App File シグニチャ sFile 呼び口 cCallPort 受け口 eEntryPort celltype tApp{ // 呼び口(call) の設置 call sFile cCallPort; }; セルタイプ記述 2014/06/24 celltype tFile{ // 受け口(entry) の設置 entry sFile eEntryPort; attr { // 属性:セルごとの定数 int 16_t buffer_len = 512; }; var { // (内部)変数:セルごとの変数 [size_is(buffer_len)] int8_t *buffer; int fd; // ファイル記述子 }; }; ・属性は、デフォルトの 値を指定できる(未指定 の場合、セル定義時に値 指定が必須) ・(内部)変数は、属性を 参照して初期化できる
  • 15 TECS CDL:コンポーネントの設置と結合 テンプレート コード TECS CDL(コンポーネント記述言語) シグニチャ記述 (インタフェースの定義) セルタイプ記述 (コンポーネントの定義) 組上げ記述 (コンポーネントの 構成の定義) TECS ジェネレータ ヘッダ インタフェース コード Cコンパイラ セルタイプコード (コンポーネントの ソースコード) リンカ アプリケーション 開発者 コンポーネント 開発者 アプリケーションモジュ ール コンポーネント図 製品 エンドユーザー コンポーネント 仕様開発者 仕 様 の 規定 設計 設計 利用 プラグイン プラグイン 開発者 設計 RPC アクセス制御 トレース App File シグニチャ sFile 呼び口 cCallPort 受け口 eEntryPort // セルの静的な生成 cell tFile File{ buffer_len = 64; // 属性 }; cell tApp App{ //呼び口を受け口に結合 cCallPort = File.eEntryPort; }; 組上げ記述 2014/06/24 (内部)変数は、セルで初期値を 指定できない. 属性を介して間 接的に指定できる (ROM 化を意 識した仕様)
  • 16 C :振る舞いの記述 テンプレート コード TECS CDL(コンポーネント記述言語) シグニチャ記述 (インタフェースの定義) セルタイプ記述 (コンポーネントの定義) 組上げ記述 (コンポーネントの 構成の定義) TECS ジェネレータ ヘッダ インタフェース コード Cコンパイラ セルタイプコード (コンポーネントの ソースコード) リンカ アプリケーション 開発者 コンポーネント 開発者 アプリケーションモジュ ール コンポーネント図 製品 エンドユーザー コンポーネント 仕様開発者 仕 様 の 規定 設計 設計 利用 プラグイン プラグイン 開発者 設計 RPC アクセス制御 トレース 2014/06/24 App File シグニチャ sFile 受け口 eEntryPort テンプレート ・TECS ジェネレータがテンプ レートを生成するので、それを埋 める形でセルタイプコードを作成 できる 呼び口 cCallPort [tFile.c] #include “tFile_tecsgen.h” // 受け口関数 (受け口名)_(関数名) ER eEntryPort_open( … ) { コンポーネントの振舞いを記述 } ER eEntryPort_close() :
  • 17 C :振る舞いの記述 テンプレート コード TECS CDL(コンポーネント記述言語) シグニチャ記述 (インタフェースの定義) セルタイプ記述 (コンポーネントの定義) 組上げ記述 (コンポーネントの 構成の定義) TECS ジェネレータ ヘッダ インタフェース コード Cコンパイラ セルタイプコード (コンポーネントの ソースコード) リンカ アプリケーション 開発者 コンポーネント 開発者 アプリケーションモジュ ール コンポーネント図 製品 エンドユーザー コンポーネント 仕様開発者 仕 様 の 規定 設計 設計 利用 プラグイン プラグイン 開発者 設計 RPC アクセス制御 トレース App File シグニチャ sFile 呼び口 cCallPort 受け口 eEntryPort テンプレート ・tecsmerge により、受け口や signature の変更に追従できる 2014/06/24 [tFile.c] #include “tFile_tecsgen.h” // 受け口関数 (受け口名)_(関数名) ER eEntryPort_open( … ) { コンポーネントの振舞いを記述 } ER eEntryPort_close() :
  • 18 TECS CDL(コンポーネント記述言語) TECSジェネレータ:インタフェースコード生成 テンプレート コード シグニチャ記述 (インタフェースの定義) セルタイプ記述 (コンポーネントの定義) 組上げ記述 (コンポーネントの 構成の定義) TECS ジェネレータ ヘッダ インタフェース コード Cコンパイラ セルタイプコード (コンポーネントの ソースコード) リンカ アプリケーション 開発者 コンポーネント 開発者 アプリケーションモジュ ール コンポーネント図 製品 エンドユーザー コンポーネント 仕様開発者 仕 様 の 規定 設計 設計 利用 プラグイン プラグイン 開発者 設計 RPC アクセス制御 トレース App File シグニチャ sFile 呼び口 cCallPort 受け口 eEntryPort • コンポーネント間をつなぐイ ンタフェースコードを TECS ジェネレータが自動生成 • 結合状況に応じて関数テーブ ルを生成したり、属性や変数 等に応じてROM 部(定数)、 RAM 部(RAM を初期化する コード)を生成 2014/06/24
  • 試してみたい方に  簡単に試してみたい – SimpleSmaple *svn co http://dev.toppers.jp/svn_user/contrib/TECS- SimpleSample/tags/SimpleSample-20120707 (http://dev.toppers.jp/trac_user/contrib/browser/TECS- SimpleSample/tags/SimpleSample-20120707) – cygwin は必要 (gcc を忘れずにインストール) – tecs_package も別途必要(README.txt 参照) – 以下の事例も含まれている  SimpleSampleTrace … TracePlugin 利用例  SimpleSampleTransparentRPC … RPCPlugin 利用例  SimpleSampleOpaqueRPC … OpaqueRPCPlugin 利用例  本格的に試したい – 後述の各種パッケージをご利用ください 192014/06/24
  • 20 目次  TECS の特徴  TECS 開発の流れ  ロードマップ  公開パッケージの紹介  今後の開発 2014/06/24
  • TECSロードマップ 21 ASP+TECS ATK1+TECS Opaque RPC ETロボコン プラットフォーム RTC連携 puppy 教材(NEP) stm32 教材 HW対応 2007 2008 2009 2010 2011 20122004~2006 2013 through プラグイン セルタイプ プラグイン ログトレース SSP+TECS HRP2+TECS TECS仕様 (基本) 図形エディタ Transparent RPC シグニチャ プラグイン TECS+mruby 解析ツール 次期ETロボコン プラットフォーム 2014 2015 2014/06/24
  • これまでの公開パッケージ 22  TOPPERS/ASP+TECS パッケージ  ET ロボコン用パッケージ – MINDSTORMS NXT用TOPPERS/ASP+TECSプラット フォームと走行体サンプルプログラム  STM32 Primer2 教材  TOPPERS/ATK1+TECSパッケージ  TECS RPC パッケージ  TOPPERS/ASP+TECS+mruby パッケージ  これらは以下からダウンロードできます URL http://www.toppers.jp/tecs.html 2014/06/24
  • 今後の取り組み 23  TOPPERS/HRP2+TECS  MINDSTORMS EV3用TOPPERS/HRP2+TECSプ ラットフォームと走行体サンプルプログラム  TOPPERS/SSP+TECS (早期リリース済)  GUI 編集ツール開発  分析ツールの開発  SW+HW 協調設計  リファレンスマニュアル等の作成  各種コンポーネントの作成 – TINET, FatFs, USB 2014/06/24
  • 24 目次  TECS の特徴  TECS 開発の流れ  ロードマップ  公開パッケージの紹介  今後の開発 2014/06/24
  • TOPPERS/ASP+TECS パッケージ  カーネルオブジェクトをコンポーネント(セル) とし て扱える – セルの設置 ⇒ カーネルオブジェクトの定義  静的APIの呼び出し(.cfg) もCDLから自動生成  分かりやすいインタフェースを再定義 signature tTask { ER activate(void); ER_UINT cancelActivate(void); ER terminate(void); ER changePriority([in] PRI priority); ER getPriority([out] PRI *p_priority); … };  inline 実装によりオーバーヘッドは小さい  syslog 周りがコンポーネント化されている – 環境に合わせた交換の容易化 252014/06/24
  • RPC パッケージ  RPC ・・・ Remote Procedure Call – 遠隔呼出し  分散をサポートする際に、最も利用される手段  TECS RPC のバリエーション – Transparent RPC … アドレス空間共有  TOPPERS/FMP に向いた RPC – Opaque RPC … アドレス空間非共有  複数のコンピュータに分割したり、保護された領域への分割に向いた RPC – それぞれに通信チャンネルを共有する方式もある  TECS ジェネレータのプラグインにより実現 – コンポーネントを自動生成する機構  RPC は through または signature プラグインにより生成可 (TECS には through, signature, celltype, cell プラグインがある) 262014/06/24
  • 27 MINDSTORMS NXT用 TOPPERS/ASP+TECS プラットフォームと教育コンテンツパッケージ  ETロボコン認定済みプラットフォーム プラットフォームと走行体サンプルプログラム  教育コンテンツ コンポーネントで組み上げるMINDSTORMS NXT用プラットホーム  2013年版の改良点 – bluetoothドライバの改良 – NXT 同士で通信するサンプル – MacOS と Opaque RPC 通信するサンプル  Inteface 2011年7月号に紹介記事 http://www.toppers.jp/etrobo-asp.html 2014/06/24
  • TECS+mruby関連のパッケージ  mruby VM の TECS コンポーネント化 – .rb ⇒ .mrb に自動変換した上で、バイトコードをmruby VMセルに埋め込む – POSIX 用の試験環境も準備  mruby ⇒ TECS インタフェースコード自動生成 – signature プラグインにより自動生成 – mruby ⇒ C にインタフェースする Mruby2CBridgePlugin もサポート  TECS の知識がなくても利用可能 TECS 開発ブログ 参照 http://tecs22022.blog85.fc2.com/blog-entry-45.html TECS WG は、2013年3月23日より、軽量Ruby フォーラムライブラリ WG と協業を開始 282014/06/24
  • 29 目次  TECS の特徴  TECS 開発の流れ  ロードマップ  公開パッケージの紹介  今後の開発 2014/06/24
  • 今後の開発  Mindstorms EV3 用 TOPPERS/HRP2+TECS パッケージ  TOPPERS/SSP+TECS – 小規模なシステムでも構造の見える化  GUI編集ツール – TECS コンポーネント図⇔ TECS CDL (組上げ記述)  解析ツール  SW+HW 協調設計 302014/06/24
  • GUI編集ツール 312014/06/24
  • GUI編集ツール  Eclipse のプラグインとして実装  ET ロボコンのコンポーネント図が描ける程度 – 今後育成を強化する方針 322014/06/24
  • 解析ツール  タスクごとの動作範囲の表示  共有リソースの抽出 – 排他制御コードの必要性 – デッドロックの可能性  不要関数の削除  コンポーネント外の結合の抽出  (シーケンス図、コラボレーション図の自動生成) – (TECS GUI editor と協調して) 332014/06/24
  • TECS WG の活動  毎月一回WG ミーティングを開催 – TECS WG のML で案内を流しています  年に一回合宿を開催 (最近5年の開催場所) – 2009年度 岐阜 – 2010年度 下呂 – 2011年度 韓国 – 2012年度 島根 – 2013年度 福岡  今年度は、2回の合宿を開催予定 – 2014年10月 開発者会議と同時開催予定 – 2015年 3月 (場所は未定) 342014/06/24
  • わからないときは  TOPPERS 会員の皆さま – com-wg@toppers.jp … TECS WG の ML – dev@toppers.jp … 開発者 ML  非会員の皆さま – users@toppers.jp … ユーザー ML 2014/06/24 35
  • ご清聴ありがとうございました 362014/06/24