diff example/README @ 109:028ffc9c0375 draft

Cerium cvs version
author gongo@gendarme.local
date Wed, 12 Nov 2008 17:39:33 +0900
parents
children d9ea79aac04f
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/example/README	Wed Nov 12 17:39:33 2008 +0900
@@ -0,0 +1,178 @@
+/**
+ * 現在開発中なので、仕様やここに書いてる事も
+ * すごい頻度で変わる可能性があります。
+ * なので、定期的に cvs update をしたり
+ * Game_project/Cerium/TaskManager/Changelog を見たり
+ * http://www.cr.ie.u-ryukyu.ac.jp/~game/pukiwiki/ を見てください。
+ */
+
+Cerium の例題っぽいのを置いてあります。
+ここにある書き方を参考に他にいろいろ作ってみてください。
+
+例題の概要は、各ディレクトリの README に書いてあります。
+使用方法や実行例も同じです。
+
+-----------------
+   最近の更新
+-----------------
+
+2008/11/01
+
+main 関数はライブラリに閉じました。
+というわけで、ユーザ側の main() は
+
+int cerium_main(int argc, char *argv[]);
+
+となります。引数は通常の main と同じものが渡されます
+cerium_main で ( < 0 ) を返す (例えば -1) と
+プログラムが終了するようにしています。
+cerium_main を正常に抜けると、ライブラリ側で
+main loop が回り、全タスク終了と共にプログラムが終了します。
+
+あと、Cerium の標準オプションとして
+
+  -chelp Print this message
+  -cpu   Number of CPU (default 1) 
+
+を実装しました。近々増やしていく予定です。
+
+TaskManager へのアクセスですが、今までは
+
+ TaskManager *manager = new TaskManager(CPU_NUM);
+
+とかやってたはずですが、現在はライブラリ側で生成しているので、
+TaskManager.h を include すると、中で
+
+ extern TaskManager *manager;
+
+とかしてるので、そのまま manager->create_task とかして使えます。
+
+
+
+-----------------
+    修正場所
+-----------------
+
+今のところ、configure とかそういうのは無いので、
+ライブラリのパスは手動で書き直さないといけないです。
+各例題の Makefile.def ってところに、
+
+TARGET = 例題の実行ファイル名
+CERIUM = Cerium のパス
+
+を書くところがあるので、自分の環境にあう感じで書いてください。
+
+-----------------
+ コンパイル方法
+-----------------
+MacOSX
+  % make macosx
+
+Linux
+  % make linux
+
+PS3 (spe/ 以下もコンパイルされます)
+  % make ps3
+
+
+clean するときは普通に
+
+  % make clean でいいです。
+
+
+
+--------------------
+ プログラムの書き方
+--------------------
+
+まだちゃんと仕様書みたいなものをは書いてないので、
+ここで記述必須の所を書いておきます。
+
+1. タスクの作り方
+2. タスクの登録 (ID との対応付け)
+3. 最後に
+
+-------------------
+1. タスクの作り方
+-------------------
+
+タスクは、一つのクラスとして扱います。
+クラスの宣言 (.h) はこんな感じです。
+
+++++++++++++++++++++++++++++++++++
+#ifndef INCLUDED_SCHED_TASK
+#  include "SchedTask.h"
+#endif
+
+class Hello : public SchedTask {
+public:
+    SchedConstructor(Hello);
+
+    int run(void *r, void *w);
+};
+++++++++++++++++++++++++++++++++++
+
+以上の記述は必須です。
+クラス名と、SchedConstructor() の中身は一緒にしてください。
+run() がこのクラスの Task としての実装となります。
+クラス変数、関数を加えるのはOKです。
+
+
+次に実装 (.cc) です。
+
+++++++++++++++++++++++++++++++++++
+#include "Hello.h"
+
+/* これは必須 */
+SchedDefineTask(Hello);
+
+int
+Hello::run(void *rbuf, void *wbuf)
+{
+    printf("Hello, World!!\n");
+
+    return 0;
+}
+++++++++++++++++++++++++++++++++++
+
+SchedDefineTask にもクラス名を入れてください。
+rbuf, wbuf とかの使い方は 各例題を見ればわかります(basic とか)。
+
+
+
+-------------------
+2 タスクの登録
+-------------------
+
+タスクは ID で管理するようにしています。
+ppe で動くタスクは ppe/ 以下の task_init.cc で書きます。
+
+++++++++++++++++++++++++
+#include "Func.h"
+#include "Scheduler.h"
+
+/* 必ずこの位置に書いて */
+SchedExternTask(Hello);
+
+void
+task_init(void)
+{
+  SchedRegisterTask(HELLO_TASK, Hello);
+}
+++++++++++++++++++++++++
+
+SchedExternTask と SchedRegisterTask は必須です。
+RegisterTask では、クラス名の他に、対応する ID を入れてください。
+ID は 整数で、現在は 0〜31 まで設定できます。
+上の場合は、Func.h で HELLO_TASK を enum でやってます。
+
+SPE で動かすタスクも、spe/spe-main.cc に書いてください。
+書き方は ppe と同じです。
+
+
+-------------------
+3. 最後に
+-------------------
+「もう書く事ねーのかよ」って意見もあるかもしれない。すまん。
+一番上にあるように、まだまだ開発の初期っつーかなんつーか、なので
+これからどんどん追加していきますので。
\ No newline at end of file