source: TECS-SimpleSample/tags/SimpleSample-20120707/README.txt@ 164

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

add tecs_package URL to README.txt

  • Property svn:executable set to *
File size: 10.1 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 インタープリターは不要です。
144tecs_package は、こちらからダウンロードできます。
145 http://www.toppers.jp/download.cgi/tecs_package-20120608.tar.gz
146
147 exerb 版とは Ruby インタプリタと TECS ジェネレータが一体の exe 化さ
148 れたもので、Ruby インタプリタのインストールを必要としません。ただし
149 exerb 版は Windows 上でしか動作しません。
150
151以下の環境で動作確認しています。
152 ・cygwin 1.7.15
153 ・gcc 4.5.3
154 ・Ruby 1.8.7p358
155
156Linux などの POSIX 環境でも動作させることができます。その場合 Makefile
157の TECSGEN_EXE を tecsgen.exe から tecsgen に変更してください。Ruby
1581.8 がインストールされている必要があります。Ruby 1.9 には対応しません。
159
160【準備】
161
1621) ファイルの展開
163
164 tecs_package ディレクトリの直下 asp+tecs, tecsgen の並びに
165 SimpleSample を置いてください。exerb 版を用いる都合上、tecsgen コマン
166 ド引数に与えるパスは、すべて相対パスで指定しています。
167
168 tecs_package-+- asp+tecs
169 |
170 +- tecsgen
171 |
172 +- SimpleSample -+- SimpleSample
173 (※) |
174 +- SimpleSampleTrace
175 |
176 +- SimpleSampleTransparentRPC
177 |
178 +- SimpleSampleOpaqueRPC
179
180※ svn の trunk のディレクトリの位置に対応します。名前は変更しても構いません。
181
1822) パスの設定
183
184 cygwin コンソールを開き、以下のような方法で set_env.sh 内の PATH 等を
185 取り込みます。
186
187 % cd tecs_package/tecsgen
188 % source set_env.sh
189
190 exerb 版を使用するため、TECS ジェネレータのビルドは不要です。
191
192【ビルドと実行】
193
1943) 直接結合版のビルドと実行
195
196・ビルド
197
198 % cd tecs_package/SimpleSample/SimpleSample
199 % make tecs
200 % make all
201
202・実行
203
204 % ./SimpleSample.exe
205
2064) 直接結合の TracePlugin あり版のビルドと実行
207
208 % cd tecs_package/SimpleSample/SimpleSampleTrace
209 % make tecs
210 % make all
211
212・実行
213
214 % ./SimpleSample.exe
215
2165) transparent RPC 版のビルドと実行
217
218・ビルド
219
220 % cd tecs_package/SimpleSample/SimpleSampleTransparentRPC
221 % make tecs
222 % make all
223
224・実行
225
226 % ./SimpleSample.exe
227
228 実行後、サーバー側のタスクが終了しないため、プロセスが終了しません。
229 ctrl-C で終了させてください。
230 わかりにくいですが、Simple と Sample は異なるタスクで実行されています。
231
2326) opaque RPC 版のビルドと実行
233
234・ビルド
235
236 % cd tecs_package/SimpleSample/SimpleSampleOpaqueRPC
237 % make tecs
238 % make all
239
240・実行
241
242 2つの cygwin コンソールを使います。
243 1 つ目のコンソールでサーバー側を起動します。
244
245 % ./rSample/SimpleSample-rSample.exe
246
247 次に 2 つ目のコンソールでクライアント側を起動します。
248
249 % cd tecs_package/SimpleSample/SimpleSampleOpaqueRPC
250 % ./rSimple/SimpleSample-rSimple.exe
251
252 終了後、サーバー側のプロセスは transparent RPC と同様終了しないため、
253 ctrl-C で終了させてください。
254 Sample(サーバー) のメッセージが Simple(クライアント) 側で出力されます
255 が、これは out 引数で返されたものを表示しているためです。
256
257【あさらい】
258
259ポイントは、各 CDL 内の tSimple, tSample の定義、セルタイプコード
260tSimple.c, tSample.c は、まったく無変更で 4 つのパターンに対応している
261ことです。再利用が図られることがわかります。
262
263【次のステップ】
264
265うまく動いたら、次のステップとしてやってみることを記します。
266
267 ・シグニチャ sSample に関数を追加する
268
269 まずは、この手順を理解しましょう。.c にも関数を加える必要があります。
270 以下のコマンドで追加された関数のテンプレートをマージすることができ
271 ます。
272
273 % tecsmerge gen/tSample_template.c src
274
275 tSimple.c には、追加された関数を呼び出すプログラムを追加する必要が
276 あります。以下を実行しても関数を呼び出すプログラムは追加されません
277 が、冒頭のコメント部に呼び口関数が追加されます。
278
279 % tecsmerge gen/tSimple_template.c src
280
281・シグニチャと、それを受け口に持つセルタイプを定義して Sample から結合
282 してみる
283 セルタイプコード (.c) も作成する必要があります。テンプレートコード
284 (gen の下の _templete.c) をベースにすることができます。
285
286【cygwin_kernel について】
287
288cygwin 上で pthread を用いた tTask 等のセルタイプを用意していますが、
289テストドライバーまたはスタブであり、ほとんど機能は備わっていません。
290
Note: See TracBrowser for help on using the repository browser.