Transcript
Page 1: TOPPERS TECS WG 2014

1

組込みコンポーネントシステムTECSの概要と TECS WG の活動について

大山博司

TOPPERS プロジェクト TECS WG 主査 名古屋大学大学院 情報科学研究科 客員教授

2014/06/24

Page 2: TOPPERS TECS WG 2014

2

目次

TECS の特徴

TECS 開発の流れ

ロードマップ

公開パッケージの紹介

今後の開発

2014/06/24

Page 3: TOPPERS TECS WG 2014

組込みコンポーネントシステム TECS

TECS

– TOPPERS Embedded Component System

組込みコンポーネントシステムとは

– 組込みソフトウェアをコンポーネントやサブシステムに分割して開発する方法を支援する仕組み

– ソフトウェアを部品化して再利用性を高める、あるいは部品流通を促進する仕組み

TECS の特徴

1) C言語のためのコンポーネントシステム

2) TOPPERS 系 OS に最適

3) 分散や高級言語 I/F をサポート

3 2014/06/24

Page 4: TOPPERS TECS WG 2014

TECS の特徴 1) C言語のためのコンポーネントシステム

マルチインスタンス化が容易(デフォルト) – 同種(同じセルタイプ)のコンポーネントを複数生成

– ポインタ渡し、ID(整数値) 渡しを選択可

ダイナミックバインディング(相当)を実現 – 関数テーブルを自動生成

関数テーブルの要否を、TECS ジェネレータが自動判定

(最適化でメモリおよび実行時オーバーヘッド低減)

カプセル化できる – 関数インタフェースのみで結合

関数インタフェース :TECS では signature と呼ぶ

インタフェースのより正確な定義 – C 言語のプロトタイプ宣言の曖昧さを TECS がカバー

静的な生成と結合 – 実行時オーバーヘッド、メモリオーバーヘッドの低減

4 2014/06/24

Page 5: TOPPERS TECS WG 2014

TECS の特徴 2) TOPPERS の RTOS に最適

タスクやセマフォーなどもコンポーネント化

– コンポーネントシステムの下に隠さない

粒度の小さなものも気にせずコンポーネントにできる

– インライン関数としてコンポーネントを実装

低オーバーヘッド

cfg, oil ファイルを自動生成 – factory (ルールが複雑な場合は celltype プラグイン)

により自動生成

関数名を分かりやすい名前に再定義

ex) act_tsk ⇒ activate (シグニチャ名が対象を表す)

ROM 化をサポート

TOPPERS/HRP2 の保護ドメインを視覚的に表現 – ドメインに合わせて、コードを分割生成

5 2014/06/24

Page 6: TOPPERS TECS WG 2014

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

Page 7: TOPPERS TECS WG 2014

KernelDomain UserDomain2 UserDomain1

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

Page 8: TOPPERS TECS WG 2014

TECS の特徴 3) 分散や高級言語 I/F をサポート

分散フレームワーク

– RPCPlugin, OpaqueRPCPlugin により、リモート呼出しに必要なマーシャラ、アンマーシャラを自動生成

– 通信チャンネルの交換で、種々の環境に対応

mruby から TECS を操作

– MrubyBridgePlugin により、mruby から TECS コンポーネントを操作するインタフェースコードを自動生成

インタフェースのより正確な定義により、自動生成が可能となっている

8 2014/06/24

Page 9: TOPPERS TECS WG 2014

C++よりはTECSをお勧めしたい理由

9

組込みシステムの大多数は C 言語で開発されている

C++ は非常に難しい言語

– C 言語に比べ複雑で、落とし穴も C 言語より多い

– 自由度が高いので、明確なルール化が重要

C++はインタフェースの客観性が高くない

– 引数の入出力方向、ポインタが配列か、非配列か

TECSでは RPC, TRACE 等各種ブリッジの自動生成が可能

C++は依存関係を明確にしない

– 呼び出しを受ける側は明瞭だが、呼ぶ側は不明瞭

– TECS は受け口と呼び口を持つ

TECSではコンポーネントに着眼しやすい

– オブジェクトよりも、適切な粒度で捉えやすい

2014/06/24

Page 10: TOPPERS TECS WG 2014

TECS と C++ の対比

10

2014/06/24

TECS C++

シグニチャ (引数のデータ構造明瞭)

インタフェースクラス (引数のデータ構造を明瞭化しない)

セルタイプ 実装クラス (ただし直接のメンバー関数を持たないで、インタフェースクラスの関数のみを実装)

セル インスタンス

(セルの)属性 (ROM 配置を想定)

const 付メンバー変数 (ROM 配置しない)

(セルの)内部変数 メンバー変数

受け口 (受け口名により、複数の受け口を区別)

インタフェースクラスの継承 (名前衝突の問題がある)

呼び口 参照するインタフェースクラスへのポインタ(これを介してのみ他のオブジェクトを呼び出す)

組上げ (結合を含むセルの定義)

一般的なルールはない(コンポーネントシステム等ではルール化されている)

セルタイプコード (C言語で振舞いを記述)

クラスの実装 (C / C++ で記述)

Page 11: TOPPERS TECS WG 2014

11

目次

TECS の特徴

TECS 開発の流れ

ロードマップ

公開パッケージの紹介

今後の開発

2014/06/24

Page 12: TOPPERS TECS WG 2014

TECS 開発の流れ これだけ知れば、始められる!

TECS CDL (コンポーネント記述言語)の記述

– コンポーネント間のインタフェースの記述

シグニチャ (signature)記述

– コンポーネントタイプの記述

セルタイプ (celltype) 記述

– コンポーネントの設置と結合

組上げ記述 (cell の記述)

≒ コンポーネント図のテキスト表現

C 言語の記述

– 振る舞いの記述

セルタイプコード = C 言語によるプログラム

12 2014/06/24

Page 13: TOPPERS TECS WG 2014

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 はポインタの指定子で、配列長さ、有効要素数、文字列を指定

Page 14: TOPPERS TECS WG 2014

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; // ファイル記述子

};

};

・属性は、デフォルトの値を指定できる(未指定の場合、セル定義時に値指定が必須)

・(内部)変数は、属性を参照して初期化できる

Page 15: TOPPERS TECS WG 2014

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 化を意識した仕様)

Page 16: TOPPERS TECS WG 2014

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() :

Page 17: TOPPERS TECS WG 2014

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() :

Page 18: TOPPERS TECS WG 2014

18

TECS CDL(コンポーネント記述言語)

TECSジェネレータ:インタフェースコード生成

テンプレート コード

シグニチャ記述 (インタフェースの定義) セルタイプ記述

(コンポーネントの定義) 組上げ記述 (コンポーネントの 構成の定義)

TECS ジェネレータ

ヘッダ インタフェース

コード

Cコンパイラ セルタイプコード (コンポーネントの ソースコード)

リンカ

アプリケーション 開発者

コンポーネント 開発者

アプリケーションモジュール

コンポーネント図

製品 エンドユーザー

コンポーネント 仕様開発者

仕 様 の規定

設計

設計

利用

プラグイン

プラグイン 開発者

設計

RPC

アクセス制御

トレース

App File シグニチャ

sFile

呼び口 cCallPort

受け口 eEntryPort

• コンポーネント間をつなぐインタフェースコードを TECSジェネレータが自動生成

• 結合状況に応じて関数テーブルを生成したり、属性や変数等に応じてROM 部(定数)、RAM 部(RAM を初期化するコード)を生成

2014/06/24

Page 19: TOPPERS TECS WG 2014

試してみたい方に

簡単に試してみたい

– 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 利用例

本格的に試したい

– 後述の各種パッケージをご利用ください

19 2014/06/24

Page 20: TOPPERS TECS WG 2014

20

目次

TECS の特徴

TECS 開発の流れ

ロードマップ

公開パッケージの紹介

今後の開発

2014/06/24

Page 21: TOPPERS TECS WG 2014

TECSロードマップ

21

ASP+TECS ATK1+TECS

Opaque RPC

ETロボコン プラットフォーム

RTC連携

puppy 教材(NEP)

stm32 教材

HW対応

2007 2008 2009 2010 2011 2012 2004~2006 2013

through プラグイン

セルタイプ プラグイン

ログトレース

SSP+TECS

HRP2+TECS

TECS仕様 (基本)

図形エディタ

Transparent RPC

シグニチャ プラグイン

TECS+mruby

解析ツール

次期ETロボコン プラットフォーム

2014 2015

2014/06/24

Page 22: TOPPERS TECS WG 2014

これまでの公開パッケージ

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

Page 23: TOPPERS TECS WG 2014

今後の取り組み

23

TOPPERS/HRP2+TECS

MINDSTORMS EV3用TOPPERS/HRP2+TECSプラットフォームと走行体サンプルプログラム

TOPPERS/SSP+TECS (早期リリース済)

GUI 編集ツール開発

分析ツールの開発

SW+HW 協調設計

リファレンスマニュアル等の作成

各種コンポーネントの作成

– TINET, FatFs, USB

2014/06/24

Page 24: TOPPERS TECS WG 2014

24

目次

TECS の特徴

TECS 開発の流れ

ロードマップ

公開パッケージの紹介

今後の開発

2014/06/24

Page 25: TOPPERS TECS WG 2014

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 周りがコンポーネント化されている

– 環境に合わせた交換の容易化

25 2014/06/24

Page 26: TOPPERS TECS WG 2014

RPC パッケージ

RPC ・・・ Remote Procedure Call

– 遠隔呼出し

分散をサポートする際に、最も利用される手段

TECS RPC のバリエーション

– Transparent RPC … アドレス空間共有

TOPPERS/FMP に向いた RPC

– Opaque RPC … アドレス空間非共有 複数のコンピュータに分割したり、保護された領域への分割に向いた

RPC

– それぞれに通信チャンネルを共有する方式もある

TECS ジェネレータのプラグインにより実現

– コンポーネントを自動生成する機構

RPC は through または signature プラグインにより生成可 (TECS には through, signature, celltype, cell プラグインがある)

26 2014/06/24

Page 27: TOPPERS TECS WG 2014

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

Page 28: TOPPERS TECS WG 2014

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 と協業を開始

28 2014/06/24

Page 29: TOPPERS TECS WG 2014

29

目次

TECS の特徴

TECS 開発の流れ

ロードマップ

公開パッケージの紹介

今後の開発

2014/06/24

Page 30: TOPPERS TECS WG 2014

今後の開発

Mindstorms EV3 用

TOPPERS/HRP2+TECS パッケージ

TOPPERS/SSP+TECS

– 小規模なシステムでも構造の見える化

GUI編集ツール

– TECS コンポーネント図⇔ TECS CDL (組上げ記述)

解析ツール

SW+HW 協調設計

30 2014/06/24

Page 31: TOPPERS TECS WG 2014

GUI編集ツール

31 2014/06/24

Page 32: TOPPERS TECS WG 2014

GUI編集ツール

Eclipse のプラグインとして実装

ET ロボコンのコンポーネント図が描ける程度

– 今後育成を強化する方針

32 2014/06/24

Page 33: TOPPERS TECS WG 2014

解析ツール

タスクごとの動作範囲の表示

共有リソースの抽出

– 排他制御コードの必要性

– デッドロックの可能性

不要関数の削除

コンポーネント外の結合の抽出

(シーケンス図、コラボレーション図の自動生成)

– (TECS GUI editor と協調して)

33 2014/06/24

Page 34: TOPPERS TECS WG 2014

TECS WG の活動

毎月一回WG ミーティングを開催

– TECS WG のML で案内を流しています

年に一回合宿を開催

(最近5年の開催場所)

– 2009年度 岐阜

– 2010年度 下呂

– 2011年度 韓国

– 2012年度 島根

– 2013年度 福岡

今年度は、2回の合宿を開催予定

– 2014年10月 開発者会議と同時開催予定

– 2015年 3月 (場所は未定)

34 2014/06/24

Page 35: TOPPERS TECS WG 2014

わからないときは

TOPPERS 会員の皆さま

[email protected] … TECS WG の ML

[email protected] … 開発者 ML

非会員の皆さま

[email protected] … ユーザー ML

2014/06/24 35

Page 36: TOPPERS TECS WG 2014

ご清聴ありがとうございました

36 2014/06/24


Top Related