source: TECS-SimpleSample/trunk/README.txt@ 38

Last change on this file since 38 was 38, checked in by okuma-top, 12 years ago

20120707 release

  • Property svn:executable set to *
File size: 10.0 KB
Line 
1TECS の Simple な Sample
2
3 2012年 7月6日
4 大山 博司
5
6【ライセンス】
7
8本ソフトウェアは、簡単なサンプルであり、個々のファイルにはライセンス条
9件を記載していませんが、TOPPERS ライセンスに準じます。License.txt を参
10照してください。
11
12【概要】
13
14TECS のもっとも簡単なアプリケーションサンプルです。 exerb 版の TECS ジェ
15ネレータとcygwin だけで動作させることができますので、手軽に TECS を学ぶ
16ことができます。cygwin 上では exerb 版で動作しますので、Ruby や racc の
17インストールする必要がありません。
18Linux などの POSIX 環境でも動作するはずです。この場合は、Ruby インタプ
19リタが必要となります。動作環境の項を参照してください。
20
21【サンプルプログラムの概要】
22
234 つのプログラムの例が同梱されています。
24
25これらには、共通した tSimple, tSample というセルタイプが用いられていま
26す。これらのセルタイプは、すべての例で同じです。
27この例では Makefile の簡単さ優先して、tSimple.c, tSample.c には 4 つの
28コピーがありますが、diff を取ってみれば、同じであることがわかります。こ
29れはソフトウェア部品にまったく手を加えることなく、種々のバリエーション
30が可能になることを示しています。
31
32・SimpleSample … 直接結合版
33
34 最もシンプルで、最も入門的な例です。
35 tSimple と tSample の 2 つのセルタイプを定義しています。
36 それぞれのセルタイプに属するセル Simple から Sample へ、シグニチャ
37 sSample として定義された関数群を介して呼び出すことができます。コン
38 ポーネント図やもう少し詳しい説明が SimpleSample.cdl に記述されてい
39 ますので参照してください。
40
41 なお、タスクセルタイプ tTask は、cygwin (POSIX) 環境用に予め用意さ
42 れたものを用いています(後述の「cygwin_kernel について」を参照してく
43 ださい)。
44
45・SimpleSampleTrace … 直接結合の TracePlugin あり版
46
47 上記 SimpleSample に TracePlugin を適用した例です。
48 実行に伴って、関数の呼び出しに関するトレースが出力されます。
49 Simple と Sample の間に TracePlugin によって自動生成されたセルが挿
50 入されます。このセルにより、トレースの出力がなされます。
51
52 このディレクトリ下の SimpleSample.cdl を参照すると、TracePlugin の
53 使い方がわかります。
54
55 挿入されたセルのセルタイプは tTracePlugin_sSample という名前になり
56 ます。gen ディレクトリの下の tTracePlugin_sSample.c というファイル
57 を見ると TracePlugin により生成された sSample の関数の呼び出しのト
58 レースを出力するコードがあります。
59
60 以下の 2 つの例は、SimpleSample と言っても、だいぶ複雑になります。
61 初めて TECS に触れてみる方は、【動作環境】まで読み飛ばしていただい
62 た方がよいでしょう。
63
64・SimpleSampleTransparentRPC … Transparent RPC 版
65
66 上記 SimpleSample に RPCPlugin を適用して、Transparent RPC を実現す
67 る例です。
68
69 RPC とは、遠隔手続き呼び出し (Remote Procedure Call) のことで、呼び
70 元のセルと呼び先のセルが、異なるタスク上で動作します。TECS には
71 Transparent RPC と Opaque RPC の2種類がありますが、Transparent RPC
72 は、同じ RTOS 上の別のタスクで、それぞれのセルを動作させるのに向い
73 ています。
74
75 この例では Simple と Sample は異なるタスクで動作します。Sample が動
76 作するタスクのセルは cdl 上に現れていません。RPCPlugin により自動で
77 生成されます。RPCPlugin は、その他にも tDataqueue を使用する通信チャ
78 ンネルや、マーシャラ、アンマーシャラも自動生成してくれます。
79
80 マーシャラ、アンマーシャラは、タスク間の通信用のパケットの生成と分
81 解を行うもので、RPCPlugin は、それらのセルタイプとセルの両方を生成
82 します。マーシャラ、アンマーシャラのセルタイプは、対象となるシグニ
83 チャごとに相違するため、いわばオーダーメードの通信プログラムになり
84 ます。RPCPlugin は C 言語のプログラムも含めて生成します。
85
86 Transparent RPC は、メモリ対称なマルチプロセッサ間での通信に応用で
87 きます (しかし、現時点で TOPPERS/FMP に適用するサンプルは、ありませ
88 ん。近い将来実現されるでしょう)。
89
90 なお Transparet (透明) と Opaque (不透明) の違いは、メモリ透過性が
91 あるかどうかです。Transparent RPC ではメモリ透過性があり、ポインタ
92 を渡せば、渡された側はポインタを通して本来の引数にアクセスすること
93 ができます。一方、Opaque RPC ではメモリ透過性がなく、ポインタを渡さ
94 れても、本来の引数にアクセスすることができません。Opaque RPC では、
95 ポインタの指している先の本来の引数を渡す必要があります。その分
96 Opaque RPC のマーシャラ、アンマーシャラは複雑になります。
97
98・SimpleSampleOpaqueRPC … Opaque RPC 版
99
100 上記 SimpleSample に OpaqueRPCPlugin を適用して、Opaque RPC を実現
101 します。
102
103 SimpleSampleOpaqueRPC の cdl を見ると、上記の 3 つの例に比べて、少
104 し雰囲気が異なっていることが分かります。
105
106 まず、コンポーネント図上で TaskMain が加えられているのが相違します。
107 これは、呼び元の側で通信チャンネルをオープンするために追加されてい
108 ます。
109
110 cdl の内容としては、Simple と Sample が異なるリージョン (region) に
111 属している点が、これまでと大きく異なります。region はセルの配置を制
112 御するのに用いられます。と同時に、セルの名前衝突の回避にも用いられ
113 ます。
114
115 region rSimple と rSample は、独立したリンク単位 (linkunit) である
116 と指定されています。実際にこのサンプルをビルドすると、2 つの exe が
117 生成されます。2 つのセル Simple と Sample は、それぞれの exe に分か
118 れて動作します。
119
120 この例では、tSocket を使って 2 つのセル間 (つまりは exe 間) をつな
121 ぎます。OpaqueRPCPlugin は、コンポーネント図上に現れていない要素を、
122 すべて生成します。基本的には Transparent RPC の場合と同じですが、ポ
123 インタをそのまま渡すことができないため、マーシャラやアンマーシャラ
124 も異なるものになります。
125
126 この事例では、TECS RPC のエラー回復モデルを組み込んでいません。エラー
127 回復モデルは、実行の途中で通信エラーが発生した場合などに、適切な振
128 る舞いをさせるためのものです。tecsgen の test/opaqueRPC のサンプル
129 コードは、エラー回復モデルを含んでいます。
130 Opaque RPC に用いられる通信チャンネルは ethernet など、CPU やメモリ
131 などの信頼性に比べ、信頼性が劣ります。このため、実用的なアプリケー
132 ションとしては、通信途中でエラーが発生した場合、どのように対処する
133 か作りこんでおく必要があります。
134
135 この Simple Sample で利用する tecs_package にも Opaque RPC に関する
136 情報があります。これは TINET を用い skyeye 上で動作するように組み込
137 まれています。
138
139【動作環境】
140
141cygwin 上でビルドし動作します。2012.6.2 に発行された tecs_package
142(TECS ジェネレータ V1.1.0.4 を同梱) を用いてください。exerb 版を用いる
143ようになっているため、Ruby インタープリターは不要です。
144
145 exerb 版とは Ruby インタプリタと TECS ジェネレータが一体の exe 化さ
146 れたもので、Ruby インタプリタのインストールを必要としません。ただし
147 exerb 版は Windows 上でしか動作しません。
148
149以下の環境で動作確認しています。
150 ・cygwin 1.7.15
151 ・gcc 4.5.3
152 ・Ruby 1.8.7p358
153
154Linux などの POSIX 環境でも動作させることができます。その場合 Makefile
155の TECSGEN_EXE を tecsgen.exe から tecsgen に変更してください。Ruby
1561.8 がインストールされている必要があります。Ruby 1.9 には対応しません。
157
158【準備】
159
1601) ファイルの展開
161
162 tecs_package ディレクトリの直下 asp+tecs, tecsgen の並びに
163 SimpleSample を置いてください。exerb 版を用いる都合上、tecsgen コマン
164 ド引数に与えるパスは、すべて相対パスで指定しています。
165
166 tecs_package-+- asp+tecs
167 |
168 +- tecsgen
169 |
170 +- SimpleSample -+- SimpleSample
171 (※) |
172 +- SimpleSampleTrace
173 |
174 +- SimpleSampleTransparentRPC
175 |
176 +- SimpleSampleOpaqueRPC
177
178※ svn の trunk のディレクトリの位置に対応します。名前は変更しても構いません。
179
1802) パスの設定
181
182 cygwin コンソールを開き、以下のような方法で set_env.sh 内の PATH 等を
183 取り込みます。
184
185 % cd tecs_package/tecsgen
186 % source set_env.sh
187
188 exerb 版を使用するため、TECS ジェネレータのビルドは不要です。
189
190【ビルドと実行】
191
1923) 直接結合版のビルドと実行
193
194・ビルド
195
196 % cd tecs_package/SimpleSample/SimpleSample
197 % make tecs
198 % make all
199
200・実行
201
202 % ./SimpleSample.exe
203
2044) 直接結合の TracePlugin あり版のビルドと実行
205
206 % cd tecs_package/SimpleSample/SimpleSampleTrace
207 % make tecs
208 % make all
209
210・実行
211
212 % ./SimpleSample.exe
213
2145) transparent RPC 版のビルドと実行
215
216・ビルド
217
218 % cd tecs_package/SimpleSample/SimpleSampleTransparentRPC
219 % make tecs
220 % make all
221
222・実行
223
224 % ./SimpleSample.exe
225
226 実行後、サーバー側のタスクが終了しないため、プロセスが終了しません。
227 ctrl-C で終了させてください。
228 わかりにくいですが、Simple と Sample は異なるタスクで実行されています。
229
2306) opaque RPC 版のビルドと実行
231
232・ビルド
233
234 % cd tecs_package/SimpleSample/SimpleSampleOpaqueRPC
235 % make tecs
236 % make all
237
238・実行
239
240 2つの cygwin コンソールを使います。
241 1 つ目のコンソールでサーバー側を起動します。
242
243 % ./rSample/SimpleSample-rSample.exe
244
245 次に 2 つ目のコンソールでクライアント側を起動します。
246
247 % cd tecs_package/SimpleSample/SimpleSampleOpaqueRPC
248 % ./rSimple/SimpleSample-rSimple.exe
249
250 終了後、サーバー側のプロセスは transparent RPC と同様終了しないため、
251 ctrl-C で終了させてください。
252 Sample(サーバー) のメッセージが Simple(クライアント) 側で出力されます
253 が、これは out 引数で返されたものを表示しているためです。
254
255【あさらい】
256
257ポイントは、各 CDL 内の tSimple, tSample の定義、セルタイプコード
258tSimple.c, tSample.c は、まったく無変更で 4 つのパターンに対応している
259ことです。再利用が図られることがわかります。
260
261【次のステップ】
262
263うまく動いたら、次のステップとしてやってみることを記します。
264
265 ・シグニチャ sSample に関数を追加する
266
267 まずは、この手順を理解しましょう。.c にも関数を加える必要があります。
268 以下のコマンドで追加された関数のテンプレートをマージすることができ
269 ます。
270
271 % tecsmerge gen/tSample_template.c src
272
273 tSimple.c には、追加された関数を呼び出すプログラムを追加する必要が
274 あります。以下を実行しても関数を呼び出すプログラムは追加されません
275 が、冒頭のコメント部に呼び口関数が追加されます。
276
277 % tecsmerge gen/tSimple_template.c src
278
279・シグニチャと、それを受け口に持つセルタイプを定義して Sample から結合
280 してみる
281 セルタイプコード (.c) も作成する必要があります。テンプレートコード
282 (gen の下の _templete.c) をベースにすることができます。
283
284【cygwin_kernel について】
285
286cygwin 上で pthread を用いた tTask 等のセルタイプを用意していますが、
287テストドライバーまたはスタブであり、ほとんど機能は備わっていません。
288
Note: See TracBrowser for help on using the repository browser.