Changeset 38 for TECS-SimpleSample
- Timestamp:
- Jul 7, 2012, 3:32:41 PM (11 years ago)
- Location:
- TECS-SimpleSample/trunk
- Files:
-
- 1 added
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
TECS-SimpleSample/trunk/README.txt
r34 r38 1 1 TECS の Simple な Sample 2 2 3 2012年 6月17日4 3 2012年 7月6日 4 大山 博司 5 5 6 6 【ライセンス】 7 本ソフトウェアについて、簡単なものであり、個々のファイルにはライセンス 8 条件を記載していませんが、TOPPERS ライセンスに準じます。 7 8 本ソフトウェアは、簡単なサンプルであり、個々のファイルにはライセンス条 9 件を記載していませんが、TOPPERS ライセンスに準じます。License.txt を参 10 照してください。 9 11 10 12 【概要】 11 13 12 TECS のもっとも単純なサンプルです。 exerb 版の TECS ジェネレータと 13 cygwin 版の gcc だけで動作します。Linux などの POSIX 環境でも動作しま 14 す。 15 exerb 版で動作しますので、Ruby や racc のインストールする必要がありま 16 せん。 14 TECS のもっとも簡単なアプリケーションサンプルです。 exerb 版の TECS ジェ 15 ネレータとcygwin だけで動作させることができますので、手軽に TECS を学ぶ 16 ことができます。cygwin 上では exerb 版で動作しますので、Ruby や racc の 17 インストールする必要がありません。 18 Linux などの POSIX 環境でも動作するはずです。この場合は、Ruby インタプ 19 リタが必要となります。動作環境の項を参照してください。 20 21 【サンプルプログラムの概要】 22 23 4 つのプログラムの例が同梱されています。 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 まれています。 17 138 18 139 【動作環境】 … … 22 143 ようになっているため、Ruby インタープリターは不要です。 23 144 24 exerb 版とは ruby インタプリタと TECS ジェネレータが一体の exe 化さ 25 れたもので、ruby インタプリタのインストールを必要としません。 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 26 153 27 154 Linux などの POSIX 環境でも動作させることができます。その場合 Makefile … … 45 172 +- SimpleSampleTrace 46 173 | 174 +- SimpleSampleTransparentRPC 175 | 47 176 +- SimpleSampleOpaqueRPC 48 |49 +- SimpleSampleTransparentRPC50 177 51 178 ※ svn の trunk のディレクトリの位置に対応します。名前は変更しても構いません。 … … 126 253 が、これは out 引数で返されたものを表示しているためです。 127 254 128 【 ポイント】255 【あさらい】 129 256 130 257 ポイントは、各 CDL 内の tSimple, tSample の定義、セルタイプコード … … 137 264 138 265 ・シグニチャ sSample に関数を追加する 139 まずは、これの手順を理解しましょう。 140 141 ・もう一組インスタンスを設ける 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) をベースにすることができます。 142 283 143 284 【cygwin_kernel について】
Note:
See TracChangeset
for help on using the changeset viewer.