TOPPERS TECS WG 2014
-
Upload
hiroshi-oyama -
Category
Software
-
view
4.125 -
download
4
description
Transcript of TOPPERS TECS WG 2014
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 をサポート
3 2014/06/24
TECS の特徴 1) C言語のためのコンポーネントシステム
マルチインスタンス化が容易(デフォルト) – 同種(同じセルタイプ)のコンポーネントを複数生成
– ポインタ渡し、ID(整数値) 渡しを選択可
ダイナミックバインディング(相当)を実現 – 関数テーブルを自動生成
関数テーブルの要否を、TECS ジェネレータが自動判定
(最適化でメモリおよび実行時オーバーヘッド低減)
カプセル化できる – 関数インタフェースのみで結合
関数インタフェース :TECS では signature と呼ぶ
インタフェースのより正確な定義 – C 言語のプロトタイプ宣言の曖昧さを TECS がカバー
静的な生成と結合 – 実行時オーバーヘッド、メモリオーバーヘッドの低減
4 2014/06/24
TECS の特徴 2) TOPPERS の RTOS に最適
タスクやセマフォーなどもコンポーネント化
– コンポーネントシステムの下に隠さない
粒度の小さなものも気にせずコンポーネントにできる
– インライン関数としてコンポーネントを実装
低オーバーヘッド
cfg, oil ファイルを自動生成 – factory (ルールが複雑な場合は celltype プラグイン)
により自動生成
関数名を分かりやすい名前に再定義
ex) act_tsk ⇒ activate (シグニチャ名が対象を表す)
ROM 化をサポート
TOPPERS/HRP2 の保護ドメインを視覚的に表現 – ドメインに合わせて、コードを分割生成
5 2014/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
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
TECS の特徴 3) 分散や高級言語 I/F をサポート
分散フレームワーク
– RPCPlugin, OpaqueRPCPlugin により、リモート呼出しに必要なマーシャラ、アンマーシャラを自動生成
– 通信チャンネルの交換で、種々の環境に対応
mruby から TECS を操作
– MrubyBridgePlugin により、mruby から TECS コンポーネントを操作するインタフェースコードを自動生成
インタフェースのより正確な定義により、自動生成が可能となっている
8 2014/06/24
C++よりはTECSをお勧めしたい理由
9
組込みシステムの大多数は C 言語で開発されている
C++ は非常に難しい言語
– C 言語に比べ複雑で、落とし穴も C 言語より多い
– 自由度が高いので、明確なルール化が重要
C++はインタフェースの客観性が高くない
– 引数の入出力方向、ポインタが配列か、非配列か
TECSでは RPC, TRACE 等各種ブリッジの自動生成が可能
C++は依存関係を明確にしない
– 呼び出しを受ける側は明瞭だが、呼ぶ側は不明瞭
– TECS は受け口と呼び口を持つ
TECSではコンポーネントに着眼しやすい
– オブジェクトよりも、適切な粒度で捉えやすい
2014/06/24
TECS と C++ の対比
10
2014/06/24
TECS C++
シグニチャ (引数のデータ構造明瞭)
インタフェースクラス (引数のデータ構造を明瞭化しない)
セルタイプ 実装クラス (ただし直接のメンバー関数を持たないで、インタフェースクラスの関数のみを実装)
セル インスタンス
(セルの)属性 (ROM 配置を想定)
const 付メンバー変数 (ROM 配置しない)
(セルの)内部変数 メンバー変数
受け口 (受け口名により、複数の受け口を区別)
インタフェースクラスの継承 (名前衝突の問題がある)
呼び口 参照するインタフェースクラスへのポインタ(これを介してのみ他のオブジェクトを呼び出す)
組上げ (結合を含むセルの定義)
一般的なルールはない(コンポーネントシステム等ではルール化されている)
セルタイプコード (C言語で振舞いを記述)
クラスの実装 (C / C++ で記述)
11
目次
TECS の特徴
TECS 開発の流れ
ロードマップ
公開パッケージの紹介
今後の開発
2014/06/24
TECS 開発の流れ これだけ知れば、始められる!
TECS CDL (コンポーネント記述言語)の記述
– コンポーネント間のインタフェースの記述
シグニチャ (signature)記述
– コンポーネントタイプの記述
セルタイプ (celltype) 記述
– コンポーネントの設置と結合
組上げ記述 (cell の記述)
≒ コンポーネント図のテキスト表現
C 言語の記述
– 振る舞いの記述
セルタイプコード = C 言語によるプログラム
12 2014/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 利用例
本格的に試したい
– 後述の各種パッケージをご利用ください
19 2014/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 2012 2004~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 周りがコンポーネント化されている
– 環境に合わせた交換の容易化
25 2014/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 プラグインがある)
26 2014/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 と協業を開始
28 2014/06/24
29
目次
TECS の特徴
TECS 開発の流れ
ロードマップ
公開パッケージの紹介
今後の開発
2014/06/24
今後の開発
Mindstorms EV3 用
TOPPERS/HRP2+TECS パッケージ
TOPPERS/SSP+TECS
– 小規模なシステムでも構造の見える化
GUI編集ツール
– TECS コンポーネント図⇔ TECS CDL (組上げ記述)
解析ツール
SW+HW 協調設計
30 2014/06/24
GUI編集ツール
31 2014/06/24
GUI編集ツール
Eclipse のプラグインとして実装
ET ロボコンのコンポーネント図が描ける程度
– 今後育成を強化する方針
32 2014/06/24
解析ツール
タスクごとの動作範囲の表示
共有リソースの抽出
– 排他制御コードの必要性
– デッドロックの可能性
不要関数の削除
コンポーネント外の結合の抽出
(シーケンス図、コラボレーション図の自動生成)
– (TECS GUI editor と協調して)
33 2014/06/24
TECS WG の活動
毎月一回WG ミーティングを開催
– TECS WG のML で案内を流しています
年に一回合宿を開催
(最近5年の開催場所)
– 2009年度 岐阜
– 2010年度 下呂
– 2011年度 韓国
– 2012年度 島根
– 2013年度 福岡
今年度は、2回の合宿を開催予定
– 2014年10月 開発者会議と同時開催予定
– 2015年 3月 (場所は未定)
34 2014/06/24
わからないときは
TOPPERS 会員の皆さま
– [email protected] … TECS WG の ML
– [email protected] … 開発者 ML
非会員の皆さま
– [email protected] … ユーザー ML
2014/06/24 35
ご清聴ありがとうございました
36 2014/06/24