Mercurial > hg > Game > Cerium
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