comparison example/README @ 109:5c194c71eca8

Cerium cvs version
author gongo@gendarme.local
date Wed, 12 Nov 2008 17:39:33 +0900
parents
children 44e3bf914155
comparison
equal deleted inserted replaced
108:6f3b3dd3c095 109:5c194c71eca8
1 /**
2 * 現在開発中なので、仕様やここに書いてる事も
3 * すごい頻度で変わる可能性があります。
4 * なので、定期的に cvs update をしたり
5 * Game_project/Cerium/TaskManager/Changelog を見たり
6 * http://www.cr.ie.u-ryukyu.ac.jp/~game/pukiwiki/ を見てください。
7 */
8
9 Cerium の例題っぽいのを置いてあります。
10 ここにある書き方を参考に他にいろいろ作ってみてください。
11
12 例題の概要は、各ディレクトリの README に書いてあります。
13 使用方法や実行例も同じです。
14
15 -----------------
16 最近の更新
17 -----------------
18
19 2008/11/01
20
21 main 関数はライブラリに閉じました。
22 というわけで、ユーザ側の main() は
23
24 int cerium_main(int argc, char *argv[]);
25
26 となります。引数は通常の main と同じものが渡されます
27 cerium_main で ( < 0 ) を返す (例えば -1) と
28 プログラムが終了するようにしています。
29 cerium_main を正常に抜けると、ライブラリ側で
30 main loop が回り、全タスク終了と共にプログラムが終了します。
31
32 あと、Cerium の標準オプションとして
33
34 -chelp Print this message
35 -cpu Number of CPU (default 1)
36
37 を実装しました。近々増やしていく予定です。
38
39 TaskManager へのアクセスですが、今までは
40
41 TaskManager *manager = new TaskManager(CPU_NUM);
42
43 とかやってたはずですが、現在はライブラリ側で生成しているので、
44 TaskManager.h を include すると、中で
45
46 extern TaskManager *manager;
47
48 とかしてるので、そのまま manager->create_task とかして使えます。
49
50
51
52 -----------------
53 修正場所
54 -----------------
55
56 今のところ、configure とかそういうのは無いので、
57 ライブラリのパスは手動で書き直さないといけないです。
58 各例題の Makefile.def ってところに、
59
60 TARGET = 例題の実行ファイル名
61 CERIUM = Cerium のパス
62
63 を書くところがあるので、自分の環境にあう感じで書いてください。
64
65 -----------------
66 コンパイル方法
67 -----------------
68 MacOSX
69 % make macosx
70
71 Linux
72 % make linux
73
74 PS3 (spe/ 以下もコンパイルされます)
75 % make ps3
76
77
78 clean するときは普通に
79
80 % make clean でいいです。
81
82
83
84 --------------------
85 プログラムの書き方
86 --------------------
87
88 まだちゃんと仕様書みたいなものをは書いてないので、
89 ここで記述必須の所を書いておきます。
90
91 1. タスクの作り方
92 2. タスクの登録 (ID との対応付け)
93 3. 最後に
94
95 -------------------
96 1. タスクの作り方
97 -------------------
98
99 タスクは、一つのクラスとして扱います。
100 クラスの宣言 (.h) はこんな感じです。
101
102 ++++++++++++++++++++++++++++++++++
103 #ifndef INCLUDED_SCHED_TASK
104 # include "SchedTask.h"
105 #endif
106
107 class Hello : public SchedTask {
108 public:
109 SchedConstructor(Hello);
110
111 int run(void *r, void *w);
112 };
113 ++++++++++++++++++++++++++++++++++
114
115 以上の記述は必須です。
116 クラス名と、SchedConstructor() の中身は一緒にしてください。
117 run() がこのクラスの Task としての実装となります。
118 クラス変数、関数を加えるのはOKです。
119
120
121 次に実装 (.cc) です。
122
123 ++++++++++++++++++++++++++++++++++
124 #include "Hello.h"
125
126 /* これは必須 */
127 SchedDefineTask(Hello);
128
129 int
130 Hello::run(void *rbuf, void *wbuf)
131 {
132 printf("Hello, World!!\n");
133
134 return 0;
135 }
136 ++++++++++++++++++++++++++++++++++
137
138 SchedDefineTask にもクラス名を入れてください。
139 rbuf, wbuf とかの使い方は 各例題を見ればわかります(basic とか)。
140
141
142
143 -------------------
144 2 タスクの登録
145 -------------------
146
147 タスクは ID で管理するようにしています。
148 ppe で動くタスクは ppe/ 以下の task_init.cc で書きます。
149
150 ++++++++++++++++++++++++
151 #include "Func.h"
152 #include "Scheduler.h"
153
154 /* 必ずこの位置に書いて */
155 SchedExternTask(Hello);
156
157 void
158 task_init(void)
159 {
160 SchedRegisterTask(HELLO_TASK, Hello);
161 }
162 ++++++++++++++++++++++++
163
164 SchedExternTask と SchedRegisterTask は必須です。
165 RegisterTask では、クラス名の他に、対応する ID を入れてください。
166 ID は 整数で、現在は 0〜31 まで設定できます。
167 上の場合は、Func.h で HELLO_TASK を enum でやってます。
168
169 SPE で動かすタスクも、spe/spe-main.cc に書いてください。
170 書き方は ppe と同じです。
171
172
173 -------------------
174 3. 最後に
175 -------------------
176 「もう書く事ねーのかよ」って意見もあるかもしれない。すまん。
177 一番上にあるように、まだまだ開発の初期っつーかなんつーか、なので
178 これからどんどん追加していきますので。