Mercurial > hg > Members > kono > Cerium
annotate include/TaskManager/Scheduler.h @ 347:ee3db22c03b9
error in SceneGraph.[cpp,h]
author | e065746@localhost.localdomain |
---|---|
date | Wed, 08 Jul 2009 15:04:03 +0900 |
parents | 20f2459041cb |
children | b89ba1d96fff |
rev | line source |
---|---|
42 | 1 #ifndef INCLUDED_SCHEDULER |
2 #define INCLUDED_SCHEDULER | |
3 | |
301
bcb81858aa62
remove deprecated source. not work.
tkaito@localhost.localdomain
parents:
298
diff
changeset
|
4 #include "base.h" |
bcb81858aa62
remove deprecated source. not work.
tkaito@localhost.localdomain
parents:
298
diff
changeset
|
5 #include "TaskList.h" |
bcb81858aa62
remove deprecated source. not work.
tkaito@localhost.localdomain
parents:
298
diff
changeset
|
6 #include "ListData.h" |
bcb81858aa62
remove deprecated source. not work.
tkaito@localhost.localdomain
parents:
298
diff
changeset
|
7 #include "DmaManager.h" |
bcb81858aa62
remove deprecated source. not work.
tkaito@localhost.localdomain
parents:
298
diff
changeset
|
8 #include "SchedTaskBase.h" |
bcb81858aa62
remove deprecated source. not work.
tkaito@localhost.localdomain
parents:
298
diff
changeset
|
9 #include "SchedTaskList.h" |
bcb81858aa62
remove deprecated source. not work.
tkaito@localhost.localdomain
parents:
298
diff
changeset
|
10 #include "TaskGroup.h" |
42 | 11 |
109 | 12 |
13 #define MAX_USER_TASK 32 | |
14 #define MAX_SYSTEM_TASK 2 | |
15 #define MAX_TASK_OBJECT MAX_USER_TASK + MAX_SYSTEM_TASK | |
16 #define MAX_GLOBAL_AREA 32 | |
17 #define MAX_MAINMEM_AREA 32 | |
18 | |
42 | 19 class SchedTaskBase; |
109 | 20 class SchedTask; |
184 | 21 class SchedTaskList; |
42 | 22 |
23 class Scheduler { | |
24 public: | |
109 | 25 virtual ~Scheduler(void); |
26 | |
27 BASE_NEW_DELETE(Scheduler); | |
42 | 28 |
29 /* variables */ | |
194 | 30 int id; |
109 | 31 |
32 // double buffering | |
33 TaskListPtr buff_taskList[2]; | |
34 ListDataPtr buff_inListData[2]; | |
35 ListDataPtr buff_outListData[2]; | |
36 | |
37 int buffFlag_taskList; | |
38 int buffFlag_inListData; | |
39 int buffFlag_outListData; | |
40 | |
298 | 41 /* TaskList 関連 */ |
109 | 42 |
43 /** | |
298 | 44 * 実行中 TaskList の現在の位置 (list->tasks[index]) |
184 | 45 * |
298 | 46 * bakIndex_taskList がある理由 |
47 * taskList の途中で renew task が作られたとき、 | |
48 * 即座に実行するため、TaskList -> RenewTaskList と移って処理する。 | |
49 * RenewTaskList が終了したとき、再び TaskList に戻ってくるが | |
50 * Renew Task を生成した所から再スタートするため、 | |
51 * taskList の index を覚えておく (backup) | |
52 * 同様に TaskList も覚えておく | |
109 | 53 */ |
184 | 54 int bakIndex_taskList; |
55 TaskListPtr bak_curTaskList; | |
56 | |
109 | 57 |
58 /** | |
298 | 59 * タスク内で生成されたタスクを入れる |
60 * Linked List で管理 | |
109 | 61 */ |
62 TaskListPtr renewCur_taskList; | |
63 TaskListPtr renewTop_taskList; | |
64 | |
65 /** | |
298 | 66 * 実行中 TaskList が Renew されたものかどうかのフラグ |
67 * Renew の場合、ListData は DMA する必要ないとか | |
68 * いろいろな判定に使えるかもしれん | |
109 | 69 * if (flag == 1) taskList is Renew |
70 */ | |
71 int flag_renewTaskList; | |
72 | |
73 /** | |
298 | 74 * タスク内 (T1) でタスク (Tc = T2, T3, ..) が複数生成された場合、 |
75 * Tc が全て終わってから、T1 の終了コマンドを PPE に送る。 | |
76 * なので、Tc を process group として記憶しておく。 | |
109 | 77 * |
298 | 78 * Tc が taskGroup のアドレスを持つので |
79 * Scheduler が持つ taskGroup 変数は一つだけで(多分)おk | |
109 | 80 */ |
81 TaskGroupPtr taskGroup; | |
82 | |
83 /* GlobalMemoryList */ | |
84 void* globalList[MAX_GLOBAL_AREA]; | |
85 | |
86 /* MainMemory Allocate Command List */ | |
87 void* mainMemList[MAX_MAINMEM_AREA]; | |
88 | |
89 // Task Object Table | |
291 | 90 // this is named TaskObject but it is not an object. |
91 // It is a pointer to an object creation function | |
184 | 92 typedef SchedTask* (*TaskObject)(void); |
42 | 93 |
94 DmaManager* connector; | |
109 | 95 |
96 // Pipeline Stage | |
42 | 97 SchedTaskBase* task1; |
98 SchedTaskBase* task2; | |
99 SchedTaskBase* task3; | |
100 | |
101 /* functions */ | |
102 void init(void); | |
103 void run(void); | |
109 | 104 virtual void init_impl(void) {}; |
50 | 105 void finish(void); |
42 | 106 |
107 TaskListPtr get_curListBuf(void); | |
109 | 108 ListDataPtr get_curReadBuf(void); |
109 ListDataPtr get_curWriteBuf(void); | |
110 TaskListPtr get_renewListBuf(void); | |
111 | |
187 | 112 void set_backupTaskList(TaskListPtr cur_taskList); |
113 void set_backupTaskListIndex(int cur_index); | |
114 SchedTaskList* get_nextRenewTaskList(void); | |
184 | 115 TaskListPtr get_backupTaskList(void); |
187 | 116 int get_backupTaskListIndex(void); |
184 | 117 |
298 | 118 // なんか名前が変だが。。。 |
109 | 119 /* TaskGroup */ |
120 TaskGroupPtr set_groupTask(uint32 command); | |
121 void add_groupTask(TaskGroupPtr group, TaskPtr task); | |
122 void remove_groupTask(TaskGroupPtr group, TaskPtr task); | |
123 void reload_groupTask(void); | |
124 uint32 status_groupTask(TaskGroupPtr group); | |
125 | |
126 /* GlobalMemory */ | |
127 void* global_alloc(int id, int size); | |
128 void* global_get(int id); | |
129 void global_free(int id); | |
130 | |
131 virtual void *allocate(int size) { return NULL; }; | |
132 | |
133 virtual void mainMem_alloc(int id, int size) {}; | |
134 virtual void mainMem_wait(void) {}; | |
135 void *mainMem_get(int id); | |
136 | |
137 /* DMA Transfer */ | |
138 void dma_load(void *buf, uint32 addr, uint32 size, uint32 mask); | |
139 void dma_store(void *buf,uint32 addr, uint32 size, uint32 mask); | |
140 void dma_wait(uint32 mask); | |
255 | 141 void show_dma_wait() { connector->show_dma_wait(id); }; |
334
20f2459041cb
[in test_render] push L key , call show_dma_wait, but incomplete.
e065746@localhost.localdomain
parents:
302
diff
changeset
|
142 void show_dma_wait(int id) { connector->show_dma_wait(id); }; |
109 | 143 void mail_write(uint32 data); |
144 uint32 mail_read(void); | |
145 void dma_loadList(ListDataPtr list, void *, uint32 mask); | |
146 void dma_storeList(ListDataPtr list, void *, uint32 mask); | |
42 | 147 }; |
148 | |
302 | 149 extern void register_task(int cmd, Scheduler::TaskObject task); |
42 | 150 #endif |
109 | 151 |
152 | |
153 #define SchedConstructor(str) \ | |
184 | 154 str(void) {} \ |
109 | 155 BASE_NEW_DELETE(str) \ |
156 | |
157 #define SchedDefineTask(str) \ | |
184 | 158 SchedTask* createTask_##str(void) \ |
109 | 159 { \ |
184 | 160 return new str(); \ |
109 | 161 } |
162 | |
163 #define SchedExternTask(str) \ | |
164 extern \ | |
184 | 165 SchedTask* createTask_##str(void); |
109 | 166 |
167 #define SchedRegisterTask(cmd, str) \ | |
168 register_task(cmd, createTask_##str); |