Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.

TECSの基礎(ETロボコン向けTOPPERS活用セミナー2-1)

7 302 vues

Publié le

TECSの基礎(ETロボコン向けTOPPERS活用セミナー2-1)

Publié dans : Logiciels
  • Identifiez-vous pour voir les commentaires

  • Soyez le premier à aimer ceci

TECSの基礎(ETロボコン向けTOPPERS活用セミナー2-1)

  1. 1. TOPPERSプロジェクト認定 12012/06/02 2.1 TECSの基礎 安積卓也(⽴命館⼤学) 最終更新⽇ : 2012/ 5/18
  2. 2. TOPPERSプロジェクト認定 22012/06/02 TECSの概要 • 組込みソフトウェアの現状 • TECSとは • TECS開発の歴史 • TECSでできること • TECS仕様の設計⽅針 • TECS仕様の構成 • 参照実装 • TECSコンポーネントモデル – 基本モデル
  3. 3. TOPPERSプロジェクト認定 32012/06/02 組込みソフトウェアの現状 • 組込みソフトウェアの⼤規模化 – 組込みシステムの⾼機能化 効率的なソフトウェア開発⼿法が必要 • コンポーネントベースの開発 →システムのソフトウェアモジュールを、 部品として扱い、ソフトウェアの再利⽤性を⾼める – 汎⽤システム⽤のコンポーネントを直接使⽤できない • 動的結合は組込みシステムに適さない – 組込みシステム向けのコンポーネントシステム(静的結合) • TECS (TOPPERS Embedded Component System)
  4. 4. TOPPERSプロジェクト認定 42012/06/02 組込みソフトウェアの現状 • 組込みソフトウェアの⼤規模化 – 組込みシステムの⾼機能化 効率的なソフトウェア開発⼿法が必要 • コンポーネントベースの開発 →システムのソフトウェアモジュールを、 部品として扱い、ソフトウェアの再利⽤性を⾼める – 汎⽤システム⽤のコンポーネントを直接使⽤できない • 動的結合は組込みシステムに適さない – 組込みシステム向けのコンポーネントシステム(静的結合) • TECS (TOPPERS Embedded Component System)
  5. 5. TOPPERSプロジェクト認定 52012/06/02 組込みソフトウェアの現状 • 組込みソフトウェアの⼤規模化 – 組込みシステムの⾼機能化 効率的なソフトウェア開発⼿法が必要 • コンポーネントベースの開発 →システムのソフトウェアモジュールを、 部品として扱い、ソフトウェアの再利⽤性を⾼める – 汎⽤システム⽤のコンポーネントを直接使⽤できない • 動的結合は組込みシステムに適さない – 組込みシステム向けのコンポーネントシステム(静的結合) • TECS (TOPPERS Embedded Component System)
  6. 6. TOPPERSプロジェクト認定 62012/06/02 コンポーネントベース開発 要求の収集 分析 設計 実装 テスト コンポーネント 分析 アーキテクチャ 設計 コンポーネントの 製造 コンポーネントの 組立て • CBSD: Component-Based Software Development TECSの 対象範囲
  7. 7. TOPPERSプロジェクト認定 72012/06/02 組込みシステム向けコンポーネントシステム TECS:TOPPERS Embedded Component System • TECSの特徴 – 実装向けのコンポーネントシステム – C⾔語で実装 – コンポーネント間の結合を静的に⾏う • 結合の最適化が可能 – システム内のすべての要素をコンポーネントとして扱う 例 • メモリアロケータ • 通信チャネル • 排他制御機構 UMLより抽象度が低い 汎⽤のコンポーネントは動的結合 既存のコンポーネントでは、 コンポーネントシステムの中に隠される
  8. 8. TOPPERSプロジェクト認定 82012/06/02 • TECSの特徴 – 実装向けのコンポーネントシステム – C⾔語で実装 – コンポーネント間の結合を静的に⾏う • 結合の最適化が可能 – システム内のすべての要素をコンポーネントとして扱う 例 • メモリアロケータ • 通信チャネル • 排他制御機構 UMLより抽象度が低い 汎⽤のコンポーネントは動的結合 既存のコンポーネントでは、 コンポーネントシステムの中に隠される 組込みシステム向けコンポーネントシステム TECS:TOPPERS Embedded Component System おおよそ 7割がC⾔語 2010年版組込みソフトウェア 産業実態調査報告書より
  9. 9. TOPPERSプロジェクト認定 92012/06/02 • TECSの特徴 – 実装向けのコンポーネントシステム – C⾔語で実装 – コンポーネント間の結合を静的に⾏う • 結合の最適化が可能 – システム内のすべての要素をコンポーネントとして扱う 例 • メモリアロケータ • 通信チャネル • 排他制御機構 汎⽤のコンポーネントは動的結合 UMLより抽象度が低い 既存のコンポーネントでは、 コンポーネントシステムの中に隠される 組込みシステム向けコンポーネントシステム TECS:TOPPERS Embedded Component System おおよそ 7割がC⾔語 2010年版組込みソフトウェア 産業実態調査報告書より
  10. 10. TOPPERSプロジェクト認定 102012/06/02 • TECSの特徴 – 実装向けのコンポーネントシステム – C⾔語で実装 – コンポーネント間の結合を静的に⾏う • 結合の最適化が可能 – システム内のすべての要素をコンポーネントとして扱う 例 • メモリアロケータ • 通信チャネル • 排他制御機構 既存のコンポーネントでは、 コンポーネントシステムの中に隠される 汎⽤のコンポーネントは動的結合 UMLより抽象度が低い おおよそ 7割がC⾔語 組込みシステム向けコンポーネントシステム TECS:TOPPERS Embedded Component System 2010年版組込みソフトウェア 産業実態調査報告書より
  11. 11. TOPPERSプロジェクト認定 112012/06/02 TECS開発の歴史 2004年 1⽉ コンポーネント仕様 WG 開始 2006年 3⽉ TECSと命名(⽅向性がほぼ固まる) 2006年10⽉ セキュリティコンポーネントIPA未踏に採択 2007年12⽉ 組込みZINE連載開始(現CodeZine) 2008年 6⽉ 会員向けリリース開始 2008年11⽉ キャッツとヴィッツがサポートを表明 2009年 5⽉ ⼀般向けリリース開始(asp+tecs) 組込みプレスに記事を掲載 2010年 6⽉ RPC (Transparent)を会員向けリリース開始 2011年 5⽉ Interfaceに記事を掲載 2011年 6⽉ RPC (Opaque) atk1+tecsを会員向けリリース開始
  12. 12. TOPPERSプロジェクト認定 122012/06/02 TECSでできること • ソフトウェア構造の⾒える化 – ⼤規模化するソフトウェアの⾒通しをよくする – 開発の分担を容易化、保守性の向上etc • インタフェースの⾒える化 – 再利⽤の促進 • インタフェースの標準化をしやすくし部品流通を促進 – ⼈と⼈とのインタフェースミスを低減 • 分散フレームワーク – プロセッサ間の機能呼び出し(RPC)の実現 • その他 – セキュリティ機能 – 検証の⽀援などなど
  13. 13. TOPPERSプロジェクト認定 132012/06/02 TECS 仕様の設計⽅針(1) • 静的なコンポーネント⽣成と結合 – 柔軟な組上げと最適化によるオーバヘッドの最⼩化 • すべてのものをコンポーネントとして扱う – C⾔語のように、ビルトイン機能は極⼒なくし、コ ンポーネントとして実装 • アロケータ、RPCチャネルなどを隠さない • インタフェース定義の曖昧さをなくす – 型、⼊出⼒⽅向、配列要素数 • オブジェクト指向技術を直接的には取り⼊れない – C⾔語を基本とする(想定する利⽤者の知識)
  14. 14. TOPPERSプロジェクト認定 142012/06/02 TECS 仕様の設計⽅針(2) • プラグインによるフレームワーク・フレームワーク の実現 – 分散フレームワーク、セキュリティフレームワー クなどフレームワークを構築するフレームワーク に使える • ソースコードからビルド – 種々の最適化を可能にする – バイナリ供給は別途考慮 • ROM化コードの⽣成 • その他 – 動作コンテキストの指定
  15. 15. TOPPERSプロジェクト認定 152012/06/02 TECS仕様の構成 • TECS コンポーネントモデル – コンポーネントの概念を規定 • TECS コンポーネント図 – コンポーネントの図表現を規定 • TECS コンポーネント記述⾔語(CDL) – コンポーネントの具体的な記述表現を規定 • TECS 実装モデル – 主としてコンポーネントの振舞いの記述⽅法を規定
  16. 16. TOPPERSプロジェクト認定 162012/06/02 参照実装 • TECSジェネレータ¶ tecsgenの実装 • TECSジェネレータのプラグインの実装 – トレースプラグイン – RPC プラグイン(分散フレームワークの実現) – (セキュリティプラグイン)…IPA 未踏ソフトウェア開 発事業採択 ¶単にジェネレータと書いた場合、TECSジェネレータのことを指します
  17. 17. TOPPERSプロジェクト認定 172012/06/02 TECSコンポーネントモデル(基本モデル) コンポーネントの概念を規定 • 基本モデル – セル – シグニチャ – セルタイプ – 受け⼝ – 呼び⼝ – 結合 – 属性 – 内部変数 • 静的⽣成と結合 • 関数とデータ型 基本モデルのうち シングルトン、 アクティブは後述
  18. 18. TOPPERSプロジェクト認定 182012/06/02 基本モデル セルおよびコンポーネント図 セル(コンポーネント インスタンス)は – 呼び⼝、受け⼝を持つ – 属性、内部変数を持つ(図⽰しない) – セルタイプに属する(セルタイプコードとして振舞いを記述) – 名前が付けられる – (イベント、メッセージを扱うようなものはない.時間制約等も ない) cBody eTask セルタイプ: tTask セル名: MainTask 受け⼝ セル 呼び⼝ sTaskBody sTask 呼び⼝の シグニチャ 受け⼝の シグニチャ
  19. 19. TOPPERSプロジェクト認定 192012/06/02 TECS:インタフェース定義(シグニチャ) テンプレート コード 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); };
  20. 20. TOPPERSプロジェクト認定 202012/06/02 関数とデータ型(1) • 引数の⼊出⼒⽅向の指定 – in …関数への⼊⼒ – out … 関数からの出⼒ – inout … 関数の⼊⼒/出⼒ 例 ER changePriority([in] PRI priority); ER getPriority([out] PRI *p_priority); • 他の⼊出⼒⽅向の指定 – アロケータの使⽤を表す send, receiveがある • ポインタ引き数に関する指定 – size_is, count_is, string により配列であることを明⽰する
  21. 21. TOPPERSプロジェクト認定 212012/06/02 関数とデータ型(2) • TOPPERS/ASPの型との親和性を重視 • 推奨する基本型(サイズが明瞭) char_t, bool_t … この2つの型は RPC でのみサイズ明瞭(8bit) int8_t, int16_t, int32_t, int64_t, int128_t uint8_t,uint16_t,uint32_t, uint64_t, uint128_t float32_t, double64_t • 推奨しない型(サイズが不明瞭) char, int, long, short, int_t float, double, long double • Cヘッダで定義される型(typedef,struct)の取り込み import_C( “mytypes.h” ); • 引数以外にも属性、内部変数、定数の型も同様
  22. 22. TOPPERSプロジェクト認定 222012/06/02 正確なインタフェース記述 • C⾔語のインタフェース記述(プロトタイプ宣⾔)は曖昧 – ER function( char *buffer, int size, int *result ); • TECSによるインタフェース定義 (TECS⽤語ではシグニチャ) – ER function( [in,size_is(size)] const char_t *buffer, [in] int32_t size, [inout] int32_t *result ); (*result がinoutなのは、前回の結果が今回の実⾏に影響するため) • 引数が⼊⼒か出⼒かが明確(特にポインタ型) • データ構造が明確 – ポインタがのさしているものが配列か配列でないかが明確 – 配列であるならば、配列の⼤きさが明確
  23. 23. TOPPERSプロジェクト認定 232012/06/02 正確なインタフェース記述(2) • ポインタ引数が配列か否かの指定、および配列ならばサイズ を指定 – size_is 配列の⼤きさ – count_is 配列の有効な要素数 – string ⽂字列(NULL終端.最⼤⻑の指定はオプション) 例 write([in,size_is(len)]int8_t *buffer, [in]int32_t length); read([out,size_is(len)]int8_t *buffer, [in]int32_t length ); putMessage( [in,string]char_t *message ); getMessage( [out,string(256)]char_t *message );
  24. 24. TOPPERSプロジェクト認定 242012/06/02 正確なインタフェース記述の意義 • 簡潔に曖昧なく記述できる • 部品化するにあたってインタフェース記述が統⼀される • 結果としてインタフェースの誤解が少なくなる • データ構造も曖昧なく記述される – 配列か⾮配列かを明⽰ – 構造体メンバのポインタについても曖昧さがない(許 さない) • コードを⾃動⽣成できる – 分散処理⽤のマーシャラ(シリアライザ)コード – 排他制御コード – セキュリティコード
  25. 25. TOPPERSプロジェクト認定 252012/06/02 TECS:コンポーネントの定義(セルタイプ) テンプレート コード TECS CDL(コンポーネント記述言語) シグニチャ記述 (インタフェースの定義) セルタイプ記述 (コンポーネントの定義) 組上げ記述 (コンポーネントの 構成の定義) TECS ジェネレータ ヘッダ インタフェース コード Cコンパイラ セルタイプコード (コンポーネントの ソースコード) リンカ アプリケーション 開発者 コンポーネント 開発者 アプリケーションモジュ ール コンポーネント図 製品 エンドユーザー コンポーネント 仕様開発者 仕 様 の 規定 設計 設計 利用 プラグイン プラグイン 開発者 設計 RPC アクセス制御 トレース App File シグニチャ sFile 呼び⼝ cCallPort 受け⼝ eEntryPort celltype tApp{ call sFile cCallPort; }; celltype tFile{ entry sFile eEntryPort; };
  26. 26. TOPPERSプロジェクト認定 262012/06/02 セルタイプ セルの型式のコンポーネント記述 • セルタイプの CDL 表現 – セルの持つ受け⼝、呼び⼝、属性、内部変数を指定する – この他にリクワイア、ファクトリを指定できる • ファクトリ:静的APIの記述⼿段 • リクワイア:セルタイプに共通な結合の指定 – セルタイプの名前には接頭⽂字 t を付加する 例 [active] celltype tTask { [inline] entry sTask eTask; /* 受け⼝:タスク操作 */ call sTaskBody cBody; /* 呼び⼝:タスク本体 */ attr{ ID id = C_EXP("TSKID_$id$"); [omit] ATR taskAttribute = C_EXP("TA_NULL"); [omit] PRI priority; [omit] SIZE stackSize; … ⼀部省略 }; }; active … 後述 inline … インライン関数として実装することを指定 omit … CBに含めないことの指定 (factoryで利用)
  27. 27. TOPPERSプロジェクト認定 272012/06/02 TECS:コンポーネントの構成の定義(組み上げ) テンプレート コード TECS CDL(コンポーネント記述言語) シグニチャ記述 (インタフェースの定義) セルタイプ記述 (コンポーネントの定義) 組上げ記述 (コンポーネントの 構成の定義) TECS ジェネレータ ヘッダ インタフェース コード Cコンパイラ セルタイプコード (コンポーネントの ソースコード) リンカ アプリケーション 開発者 コンポーネント 開発者 アプリケーションモジュ ール コンポーネント図 製品 エンドユーザー コンポーネント 仕様開発者 仕 様 の 規定 設計 設計 利用 プラグイン プラグイン 開発者 設計 RPC アクセス制御 トレース App File シグニチャ sFile 呼び⼝ cCallPort 受け⼝ eEntryPort cell tFile File{ }; cell tApp App{ cCallPort = File.eEntryPort; };
  28. 28. TOPPERSプロジェクト認定 282012/06/02 組上げ記述 セルの定義と結合のコンポーネント記述 • セルの定義において他のセルとの結合を指定する • セルを結合してアプリケーションを完成させることを組上げと⾔う 例 // AlertCounter セル cell tAlertCounter AlertCounter { cAlert = Buzzer.eAlert; /* 呼び⼝の結合 */ initialCount = 0; /* 初期値 */ alertCount = 5; /*警告を発するカウント */ }; // CountInput, Buzzer のセル定義は省略 tCountInput CountInput tAlertCounter AlertCounter tBuzzer BuzzereCounter sUpDownCounter cAlert sAlert
  29. 29. TOPPERSプロジェクト認定 292012/06/02 TECSジェネレータ:テンプレートコード テンプレート コード TECS CDL(コンポーネント記述言語) シグニチャ記述 (インタフェースの定義) セルタイプ記述 (コンポーネントの定義) 組上げ記述 (コンポーネントの 構成の定義) TECS ジェネレータ ヘッダ インタフェース コード Cコンパイラ セルタイプコード (コンポーネントの ソースコード) リンカ アプリケーション 開発者 コンポーネント 開発者 アプリケーションモジュ ール コンポーネント図 製品 エンドユーザー コンポーネント 仕様開発者 仕 様 の 規定 設計 設計 利用 プラグイン プラグイン 開発者 設計 RPC アクセス制御 トレース App File シグニチャ sFile 呼び⼝ cCallPort 受け⼝ eEntryPort テンプレートコード[tFile.c] #include “tFile_tecsgen.h” ER eEntryPort_open( … ) { /* ここにコードを書く */ } ER eEntryPort_close( …) :
  30. 30. TOPPERSプロジェクト認定 302012/06/02 TECS:コンポーネントのソースコード (セルタイプコード)の実装 テンプレート コード TECS CDL(コンポーネント記述言語) シグニチャ記述 (インタフェースの定義) セルタイプ記述 (コンポーネントの定義) 組上げ記述 (コンポーネントの 構成の定義) TECS ジェネレータ ヘッダ インタフェース コード Cコンパイラ セルタイプコード (コンポーネントの ソースコード) リンカ アプリケーション 開発者 コンポーネント 開発者 アプリケーションモジュ ール コンポーネント図 製品 エンドユーザー コンポーネント 仕様開発者 仕 様 の 規定 設計 設計 利用 プラグイン プラグイン 開発者 設計 RPC アクセス制御 トレース App Fileシグニチャ sFile 呼び口 cCallPort 受け口 eEntryPort [tFile.c] #include “tFile_tecsgen.h” ER eEntryPort_open( … ) { コンポーネントの振舞いを記述 } ER eEntryPort_close() :
  31. 31. TOPPERSプロジェクト認定 312012/06/02 セルタイプコード セルタイプコード…セルの振舞い – セルタイプのすべての受け⼝関数の本体を記述する --- celltype.c --- ER func( CELLIDX idx, int32_t arg0) ER ercd = E_OK; CELLCB *p_cellcb; //p_clellcbの名前変更禁⽌ if (VALID_IDX(idx)) { p_cellcb = GET_CELLCB(idx); } else { return(E_ID); } /* ここに処理本体を記述します #_TEFB_# */ return(ercd); } •CELLCB … セルの情報を記憶する領域 •idx … セル のID or CELLCBへのポインタ •p_cellcb … CELLCBへのポインタ (singleton では、idx, p_cellcbは不要)
  32. 32. TOPPERSプロジェクト認定 322012/06/02 TECS CDL(コンポーネント記述言語) TECSジェネレータ:ヘッダ インタフェースコード テンプレート コード シグニチャ記述 (インタフェースの定義) セルタイプ記述 (コンポーネントの定義) 組上げ記述 (コンポーネントの 構成の定義) TECS ジェネレータ ヘッダ インタフェース コード Cコンパイラ セルタイプコード (コンポーネントの ソースコード) リンカ アプリケーション 開発者 コンポーネント 開発者 アプリケーションモジュ ール コンポーネント図 製品 エンドユーザー コンポーネント 仕様開発者 仕 様 の 規定 設計 設計 利用 プラグイン プラグイン 開発者 設計 RPC アクセス制御 トレース App Fileシグニチャ sFile 呼び口 cCallPort 受け口 eEntryPort
  33. 33. TECSの場合は 同じC⾔語のソースを利⽤できる (AppのC⾔語のソースには、 インタフェース名(呼び⼝名)を 利⽤) 再利⽤性向上の例 33 App SerialPortA SerialPortB App SerialPortA SerialPortB 呼び⼝ cCallPort 受け⼝ eEntryPort //TECSの場合 cCallPort_close( ); //ソフトウェアモジュールの場合 SerialPortB_close( ); //TECSの場合 cCallPort_close( ); //ソフトウェアモジュールの場合 SerialPortA_close( ); SerialPortAを利⽤する場合 SerialPortBを利⽤する場合 TOPPERSプロジェクト認定2012/06/02
  34. 34. 2012/06/0234 結合の実装構造の標準形 cCallPort_close( ) ER eEntryPort_close( tB_IDX idx) { ER ercd_ = E_OK; tB_CB *p_cellcb; if( tB_VALID_IDX( idx ) ){ p_cellcb = GET_CELLCB(idx); }else{ return E_ID; } /*処理*/ return ercd_; } 呼び側 受け⼝関数 /* 呼び⼝関数マクロ(短縮形) */ #define cCallPort_close( ) ¥ tA_cCallPort_close( p_cellcb ) #define tA_cCallPort_close( p_that ) ¥ (p_that)->cCallPort->VMT->¥ close( (p_that)->cCallPort ) typedef struct tag_tA_CB { /* call port */ struct tag_sSig1_VDES *cCallPort; struct tag_sSig2_VDES *cCall2; } tA_CB; 呼び側のセルCB cCallPort_write( ) tA A tB B 受け側 ER tB_eEntryPort_close_skel( struct tag_sSig1_VDES *epd) { struct tag_tB_eEntryPort_DES *lepd = (struct tag_tB_eEntryPort_DES *)epd; return tB_eEntryPort_close( lepd->idx ); } 受け⼝ ディスクリプタ 受け⼝ 関数テーブル 受け⼝スケルトン関数 受け⼝関数 tB_eEntryPort_read_skel tB_eEntryPort_write_skel tB_eEntryPort_close_skel &tB_eEntryPort_MT &tB_B_CB 受け⼝関数テーブルへの ポインタ 受け側のセルCB 呼び側のセルCB 受け側 tB_eEntryPort_open_skel TOPPERSプロジェクト認定
  35. 35. 2012/06/0235 結合の実装構造の標準形 cCallPort_close( ) ER tB_eEntryPort_close_skel( struct tag_sSig1_VDES *epd) { struct tag_tB_eEntryPort_DES *lepd = (struct tag_tB_eEntryPort_DES *)epd; return tB_eEntryPort_close( lepd->idx ); } ER eEntryPort_close( tB_IDX idx) { ER ercd_ = E_OK; tB_CB *p_cellcb; if( tB_VALID_IDX( idx ) ){ p_cellcb = GET_CELLCB(idx); }else{ return E_ID; } /*処理*/ return ercd_; } 受け⼝ ディスクリプタ 受け⼝ 関数テーブル 受け⼝スケルトン関数 受け⼝関数 tB_eEntryPort_read_skel tB_eEntryPort_write_skel tB_eEntryPort_close_skel &tB_eEntryPort_MT &tB_B_CB /* 呼び⼝関数マクロ(短縮形) */ #define cCallPort_close( ) ¥ tA_cCallPort_close( p_cellcb ) #define tA_cCallPort_close( p_that ) ¥ (p_that)->cCallPort->VMT->¥ close( (p_that)->cCallPort ) typedef struct tag_tA_CB { /* call port */ struct tag_sSig1_VDES *cCallPort; struct tag_sSig2_VDES *cCall2; } tA_CB; 受け⼝関数テーブルへの ポインタ 受け側のセルCB 呼び側のセルCB tA A tB B cCallPort_write( ) 呼び側 受け側 tB_eEntryPort_open_skel TOPPERSプロジェクト認定
  36. 36. TOPPERSプロジェクト認定 362012/06/02 コンパイル・リンク テンプレート コード TECS CDL(コンポーネント記述言語) シグニチャ記述 (インタフェースの定義) セルタイプ記述 (コンポーネントの定義) 組上げ記述 (コンポーネントの 構成の定義) TECS ジェネレータ ヘッダ インタフェース コード Cコンパイラ セルタイプコード (コンポーネントの ソースコード) リンカ アプリケーション 開発者 コンポーネント 開発者 アプリケーションモジュ ール コンポーネント図 製品 エンドユーザー コンポーネント 仕様開発者 仕 様 の 規定 設計 設計 利用 プラグイン プラグイン 開発者 設計 RPC アクセス制御 トレース App File シグニチャ sFile 呼び⼝ cCallPort 受け⼝ eEntryPort
  37. 37. TOPPERSプロジェクト認定 372012/06/02 TECSコンポーネントモデル(その他) • シングルトン • アクティブ • 複合セルタイプ • ⼀対多、多対⼀の結合 • コールバック
  38. 38. TOPPERSプロジェクト認定 382012/06/02 シングルトン • あるセルタイプのセルが⼀つだけ存在しうる場合、 シングルトンである – セルタイプの定義でsingleton指定する [singleton] celltype tKernel{ [inline] entry sKernel eKernel; [inline] entry siKernel eiKernel; };
  39. 39. TOPPERSプロジェクト認定 392012/06/02 アクティブ • タスク、ハンドラのように他から呼び出されなくて も動作するセルタイプをアクティブと呼ぶ – アクティブセルタイプのセルは⼆重線で囲む [active] celltype tTask { // 呼び⼝、受け⼝、属性、内部変数の記述 }; tTaskMain TaskMain tTask TaskCell sTaskBody cBody eBody
  40. 40. TOPPERSプロジェクト認定 402012/06/02 複合セルタイプ composite tCompositeCelltype { entry sExtSigName2 eExtEPName; call sExtSigName cExtCPName; cell tCellType2 Cell2 { cCall => compoiste.cExtCPName; }; cell tCellType1 Cell1 { cCPName = Cell2.eEPName; }; composite.eExtEPName => Cell1.eEPName; }; tCompositCellType CompositCell tCellType1 Cell1 cCPName eEPName tCellType2 Cell2 sSigName2 sExtSigName cExtCPName sExtSigName2 eExtEPName 属性attr をインタフェース 表明に加えることができる インタフェース表明
  41. 41. TOPPERSプロジェクト認定 412012/06/02 多対⼀の結合(合流) • 呼び⼝は合流して受け⼝に結合できる tCellType1 Cell1 cCPName eEPName tCellType2 Cell2 sSigName tCellType3 Cell3 cCP3Name
  42. 42. TOPPERSプロジェクト認定 422012/06/02 ⼀対多(呼び⼝配列)の結合 • 呼び⼝配列により分流できる – 添数により呼出し先を選択する celltype tCelltype1 { call sSigName cCPName[3]; }; cell tCelltype1 Cell1 { cCPName[0] = Cell21.eEPName; … }; tCellType1 Cell1 cCPName[0] eEPName tCellType2 Cell21sSigName tCellType2 Cell22 tCellType3 Cell3 cCPName[1] cCPName[2] eEPName eEPName3
  43. 43. TOPPERSプロジェクト認定 432012/06/02 多対⼀(受け⼝配列)の結合 • 受け⼝配列を利⽤すると、どのセルから呼び出しが あったかを識別できる tCellType6 Cell6 cCPName eEPName[0]tCellType4 Cell41 sSigName tCellType4 Cell42 tCellType5 Cell35 eEPName[1] eEPName[2] cCPName cCPName5 celltype tCelltype6 { entry eEPName eEPName[3]; }; … tCellType4, Cell6 など cell tCelltype4 Cell41 { cCPName =Cell6.eEPName[0]; };
  44. 44. • 呼び出された側が、関数を呼び出し直すことによっ て応答を返す場合を、コールバックと呼ぶ – 呼出しとは⾮同期に応答を返すことができる TOPPERSプロジェクト認定 442012/06/02 コールバック tCellType1 Cell1 cCPName eEPName tCellType2 Cell2 sSigName eCBEPName cCBCPName sCBSigName
  45. 45. TOPPERSプロジェクト認定 452012/06/02 コールバックと呼び⼝、受け⼝配列の組合わせ 複数のセルに対し機能を提供する場合、対応するセル を選択してコールバックする tCellType6 Cell6 CCPName eEPName[0] tCellType4 Cell41 sSigName tCellType4 Cell42 tCellType5 Cell35 eEPName[1] eEPName[2] cCPName cCPName5 eEPName cCBCPName[0] sCBSigName cCBCPName[1] cCBCPName[2]
  46. 46. TOPPERSプロジェクト認定 462012/06/02 著者リスト • TECS基礎 • ⼤⼭ 博司(オークマ株式会社,TOPPERSプロ ジェクトコンポーネント仕様WG主査) • 安積 卓也(⽴命館⼤学)

×