Changeset 38


Ignore:
Timestamp:
Jul 7, 2012, 3:32:41 PM (10 years ago)
Author:
okuma-top
Message:

20120707 release

Location:
TECS-SimpleSample/trunk
Files:
1 added
1 edited

Legend:

Unmodified
Added
Removed
  • TECS-SimpleSample/trunk/README.txt

    r34 r38  
    11TECS の Simple な Sample
    22
    3                                                                                 2012年 6月17
    4 
     3                                                   2012年 7月6
     4                                                   大山 博司
    55
    66【ライセンス】
    7 本ソフトウェアについて、簡単なものであり、個々のファイルにはライセンス
    8 条件を記載していませんが、TOPPERS ライセンスに準じます。
     7
     8本ソフトウェアは、簡単なサンプルであり、個々のファイルにはライセンス条
     9件を記載していませんが、TOPPERS ライセンスに準じます。License.txt を参
     10照してください。
    911
    1012【概要】
    1113
    12 TECS のもっとも単純なサンプルです。 exerb 版の TECS ジェネレータと
    13 cygwin 版の gcc だけで動作します。Linux などの POSIX 環境でも動作しま
    14 す。
    15 exerb 版で動作しますので、Ruby や racc のインストールする必要がありま
    16 せん。
     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    まれています。
    17138
    18139【動作環境】
     
    22143ようになっているため、Ruby インタープリターは不要です。
    23144
    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
    26153
    27154Linux などの POSIX 環境でも動作させることができます。その場合 Makefile
     
    45172                                +- SimpleSampleTrace
    46173                                |
     174                                +- SimpleSampleTransparentRPC
     175                                |
    47176                                +- SimpleSampleOpaqueRPC
    48                                 |
    49                                 +- SimpleSampleTransparentRPC
    50177
    51178※ svn の trunk のディレクトリの位置に対応します。名前は変更しても構いません。
     
    126253 が、これは out 引数で返されたものを表示しているためです。
    127254
    128 ポイント
     255あさらい
    129256
    130257ポイントは、各 CDL 内の tSimple, tSample の定義、セルタイプコード
     
    137264
    138265 ・シグニチャ 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) をベースにすることができます。
    142283
    143284【cygwin_kernel について】
Note: See TracChangeset for help on using the changeset viewer.