Index: TECS-SimpleSample/trunk/License.txt
===================================================================
--- TECS-SimpleSample/trunk/License.txt	(revision 38)
+++ TECS-SimpleSample/trunk/License.txt	(revision 38)
@@ -0,0 +1,32 @@
+「TECS の Simple な Sample」使用条件 (TOPPERS ライセンス)
+  
+   Copyright (C) 2012 by TOPPERS Project
+
+   上記著作権者は，以下の(1)〜(4)の条件を満たす場合に限り，本ソフトウェ
+   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+       スコード中に含まれていること．
+   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+       の無保証規定を掲載すること．
+   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+       と．
+     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+         作権表示，この利用条件および下記の無保証規定を掲載すること．
+     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+         報告すること．
+   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+       免責すること．
+  
+   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+   の責任を負わない．
Index: TECS-SimpleSample/trunk/README.txt
===================================================================
--- TECS-SimpleSample/trunk/README.txt	(revision 37)
+++ TECS-SimpleSample/trunk/README.txt	(revision 38)
@@ -1,18 +1,139 @@
 TECS の Simple な Sample
 
-										2012年 6月17日
-
+                                                   2012年 7月6日
+                                                   大山 博司
 
 【ライセンス】
-本ソフトウェアについて、簡単なものであり、個々のファイルにはライセンス
-条件を記載していませんが、TOPPERS ライセンスに準じます。
+
+本ソフトウェアは、簡単なサンプルであり、個々のファイルにはライセンス条
+件を記載していませんが、TOPPERS ライセンスに準じます。License.txt を参
+照してください。
 
 【概要】
 
-TECS のもっとも単純なサンプルです。 exerb 版の TECS ジェネレータと 
-cygwin 版の gcc だけで動作します。Linux などの POSIX 環境でも動作しま
-す。
-exerb 版で動作しますので、Ruby や racc のインストールする必要がありま
-せん。
+TECS のもっとも簡単なアプリケーションサンプルです。 exerb 版の TECS ジェ
+ネレータとcygwin だけで動作させることができますので、手軽に TECS を学ぶ
+ことができます。cygwin 上では exerb 版で動作しますので、Ruby や racc の
+インストールする必要がありません。
+Linux などの POSIX 環境でも動作するはずです。この場合は、Ruby インタプ
+リタが必要となります。動作環境の項を参照してください。
+
+【サンプルプログラムの概要】
+
+4 つのプログラムの例が同梱されています。
+
+これらには、共通した tSimple, tSample というセルタイプが用いられていま
+す。これらのセルタイプは、すべての例で同じです。
+この例では Makefile の簡単さ優先して、tSimple.c, tSample.c には 4 つの
+コピーがありますが、diff を取ってみれば、同じであることがわかります。こ
+れはソフトウェア部品にまったく手を加えることなく、種々のバリエーション
+が可能になることを示しています。
+
+・SimpleSample … 直接結合版
+
+    最もシンプルで、最も入門的な例です。
+    tSimple と tSample の 2 つのセルタイプを定義しています。
+    それぞれのセルタイプに属するセル Simple から Sample へ、シグニチャ
+    sSample として定義された関数群を介して呼び出すことができます。コン
+    ポーネント図やもう少し詳しい説明が SimpleSample.cdl に記述されてい
+    ますので参照してください。
+
+    なお、タスクセルタイプ tTask は、cygwin (POSIX) 環境用に予め用意さ
+    れたものを用いています(後述の「cygwin_kernel について」を参照してく
+    ださい）。
+
+・SimpleSampleTrace … 直接結合の TracePlugin あり版
+
+    上記 SimpleSample に TracePlugin を適用した例です。
+	実行に伴って、関数の呼び出しに関するトレースが出力されます。
+    Simple と Sample の間に TracePlugin によって自動生成されたセルが挿
+    入されます。このセルにより、トレースの出力がなされます。
+
+    このディレクトリ下の SimpleSample.cdl を参照すると、TracePlugin の
+    使い方がわかります。
+
+    挿入されたセルのセルタイプは tTracePlugin_sSample という名前になり
+    ます。gen ディレクトリの下の tTracePlugin_sSample.c というファイル
+    を見ると TracePlugin により生成された sSample の関数の呼び出しのト
+    レースを出力するコードがあります。
+
+    以下の 2 つの例は、SimpleSample と言っても、だいぶ複雑になります。
+    初めて TECS に触れてみる方は、【動作環境】まで読み飛ばしていただい
+    た方がよいでしょう。
+
+・SimpleSampleTransparentRPC … Transparent RPC 版
+
+    上記 SimpleSample に RPCPlugin を適用して、Transparent RPC を実現す
+    る例です。
+
+    RPC とは、遠隔手続き呼び出し (Remote Procedure Call) のことで、呼び
+    元のセルと呼び先のセルが、異なるタスク上で動作します。TECS には
+    Transparent RPC と Opaque RPC の2種類がありますが、Transparent RPC
+    は、同じ RTOS 上の別のタスクで、それぞれのセルを動作させるのに向い
+    ています。
+
+    この例では Simple と Sample は異なるタスクで動作します。Sample が動
+    作するタスクのセルは cdl 上に現れていません。RPCPlugin により自動で
+    生成されます。RPCPlugin は、その他にも tDataqueue を使用する通信チャ
+    ンネルや、マーシャラ、アンマーシャラも自動生成してくれます。
+
+    マーシャラ、アンマーシャラは、タスク間の通信用のパケットの生成と分
+    解を行うもので、RPCPlugin は、それらのセルタイプとセルの両方を生成
+    します。マーシャラ、アンマーシャラのセルタイプは、対象となるシグニ
+    チャごとに相違するため、いわばオーダーメードの通信プログラムになり
+    ます。RPCPlugin は C 言語のプログラムも含めて生成します。
+
+    Transparent RPC は、メモリ対称なマルチプロセッサ間での通信に応用で
+    きます (しかし、現時点で TOPPERS/FMP に適用するサンプルは、ありませ
+    ん。近い将来実現されるでしょう)。
+
+    なお Transparet (透明) と Opaque (不透明) の違いは、メモリ透過性が
+    あるかどうかです。Transparent RPC ではメモリ透過性があり、ポインタ
+    を渡せば、渡された側はポインタを通して本来の引数にアクセスすること
+    ができます。一方、Opaque RPC ではメモリ透過性がなく、ポインタを渡さ
+    れても、本来の引数にアクセスすることができません。Opaque RPC では、
+    ポインタの指している先の本来の引数を渡す必要があります。その分
+    Opaque RPC のマーシャラ、アンマーシャラは複雑になります。
+
+・SimpleSampleOpaqueRPC … Opaque RPC 版
+
+    上記 SimpleSample に OpaqueRPCPlugin を適用して、Opaque RPC を実現
+    します。
+
+    SimpleSampleOpaqueRPC の cdl を見ると、上記の 3 つの例に比べて、少
+    し雰囲気が異なっていることが分かります。
+
+    まず、コンポーネント図上で TaskMain が加えられているのが相違します。
+    これは、呼び元の側で通信チャンネルをオープンするために追加されてい
+    ます。
+
+    cdl の内容としては、Simple と Sample が異なるリージョン (region) に
+    属している点が、これまでと大きく異なります。region はセルの配置を制
+    御するのに用いられます。と同時に、セルの名前衝突の回避にも用いられ
+    ます。
+
+    region rSimple と rSample は、独立したリンク単位 (linkunit) である
+    と指定されています。実際にこのサンプルをビルドすると、2 つの exe が
+    生成されます。2 つのセル Simple と Sample は、それぞれの exe に分か
+    れて動作します。
+
+    この例では、tSocket を使って 2 つのセル間 (つまりは exe 間) をつな
+    ぎます。OpaqueRPCPlugin は、コンポーネント図上に現れていない要素を、
+    すべて生成します。基本的には Transparent RPC の場合と同じですが、ポ
+    インタをそのまま渡すことができないため、マーシャラやアンマーシャラ
+    も異なるものになります。
+
+    この事例では、TECS RPC のエラー回復モデルを組み込んでいません。エラー
+    回復モデルは、実行の途中で通信エラーが発生した場合などに、適切な振
+    る舞いをさせるためのものです。tecsgen の test/opaqueRPC のサンプル
+    コードは、エラー回復モデルを含んでいます。
+    Opaque RPC に用いられる通信チャンネルは ethernet など、CPU やメモリ
+    などの信頼性に比べ、信頼性が劣ります。このため、実用的なアプリケー
+    ションとしては、通信途中でエラーが発生した場合、どのように対処する
+    か作りこんでおく必要があります。
+
+    この Simple Sample で利用する tecs_package にも Opaque RPC に関する
+    情報があります。これは TINET を用い skyeye 上で動作するように組み込
+    まれています。
 
 【動作環境】
@@ -22,6 +143,12 @@
 ようになっているため、Ruby インタープリターは不要です。
 
-   exerb 版とは ruby インタプリタと TECS ジェネレータが一体の exe 化さ
-   れたもので、ruby インタプリタのインストールを必要としません。
+   exerb 版とは Ruby インタプリタと TECS ジェネレータが一体の exe 化さ
+   れたもので、Ruby インタプリタのインストールを必要としません。ただし
+   exerb 版は Windows 上でしか動作しません。
+
+以下の環境で動作確認しています。
+  ・cygwin 1.7.15 
+  ・gcc  4.5.3
+  ・Ruby  1.8.7p358
 
 Linux などの POSIX 環境でも動作させることができます。その場合 Makefile 
@@ -45,7 +172,7 @@
                                 +- SimpleSampleTrace
                                 |
+                                +- SimpleSampleTransparentRPC
+                                |
                                 +- SimpleSampleOpaqueRPC
-                                |
-                                +- SimpleSampleTransparentRPC
 
 ※ svn の trunk のディレクトリの位置に対応します。名前は変更しても構いません。
@@ -126,5 +253,5 @@
  が、これは out 引数で返されたものを表示しているためです。
 
-【ポイント】
+【あさらい】
 
 ポイントは、各 CDL 内の tSimple, tSample の定義、セルタイプコード 
@@ -137,7 +264,21 @@
 
  ・シグニチャ sSample に関数を追加する
-   まずは、これの手順を理解しましょう。
-
- ・もう一組インスタンスを設ける
+
+    まずは、この手順を理解しましょう。.c にも関数を加える必要があります。
+    以下のコマンドで追加された関数のテンプレートをマージすることができ
+    ます。
+
+       % tecsmerge gen/tSample_template.c src
+
+    tSimple.c には、追加された関数を呼び出すプログラムを追加する必要が
+    あります。以下を実行しても関数を呼び出すプログラムは追加されません
+    が、冒頭のコメント部に呼び口関数が追加されます。
+
+       % tecsmerge gen/tSimple_template.c src
+
+・シグニチャと、それを受け口に持つセルタイプを定義して Sample から結合
+  してみる
+    セルタイプコード (.c) も作成する必要があります。テンプレートコード
+    (gen の下の  _templete.c) をベースにすることができます。
 
 【cygwin_kernel について】
