annotate include/TaskManager/Scheduler.h @ 143:9588726193e1 draft

add xml
author gongo@charles.cr.ie.u-ryukyu.ac.jp
date Sat, 29 Nov 2008 03:36:11 +0900
parents 028ffc9c0375
children a19d3ed4ce5b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
42
aa11038dbdc1 *** empty log message ***
gongo
parents:
diff changeset
1 #ifndef INCLUDED_SCHEDULER
aa11038dbdc1 *** empty log message ***
gongo
parents:
diff changeset
2 #define INCLUDED_SCHEDULER
aa11038dbdc1 *** empty log message ***
gongo
parents:
diff changeset
3
109
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
4 #ifndef INCLUDED_BASE_H_
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
5 # include "base.h"
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
6 #endif
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
7
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
8 #ifndef INCLUDED_TASKLIST
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
9 # include "TaskList.h"
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
10 #endif
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
11
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
12 #ifndef INCLUDED_LIST_DATA
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
13 # include "ListData.h"
42
aa11038dbdc1 *** empty log message ***
gongo
parents:
diff changeset
14 #endif
aa11038dbdc1 *** empty log message ***
gongo
parents:
diff changeset
15
aa11038dbdc1 *** empty log message ***
gongo
parents:
diff changeset
16 #ifndef INCLUDED_DMA_MANAGER
aa11038dbdc1 *** empty log message ***
gongo
parents:
diff changeset
17 # include "DmaManager.h"
aa11038dbdc1 *** empty log message ***
gongo
parents:
diff changeset
18 #endif
aa11038dbdc1 *** empty log message ***
gongo
parents:
diff changeset
19
aa11038dbdc1 *** empty log message ***
gongo
parents:
diff changeset
20 #ifndef INCLUDED_SCHED_TASK_BASE
aa11038dbdc1 *** empty log message ***
gongo
parents:
diff changeset
21 # include "SchedTaskBase.h"
aa11038dbdc1 *** empty log message ***
gongo
parents:
diff changeset
22 #endif
aa11038dbdc1 *** empty log message ***
gongo
parents:
diff changeset
23
109
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
24 #ifndef INCLUDED_SCHED_TASK
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
25 # include "SchedTask.h"
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
26 #endif
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
27
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
28 #ifndef INCLUDED_TASK_GROUP
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
29 # include "TaskGroup.h"
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
30 #endif
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
31
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
32 #define MAX_USER_TASK 32
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
33 #define MAX_SYSTEM_TASK 2
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
34 #define MAX_TASK_OBJECT MAX_USER_TASK + MAX_SYSTEM_TASK
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
35 #define MAX_GLOBAL_AREA 32
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
36 #define MAX_MAINMEM_AREA 32
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
37
42
aa11038dbdc1 *** empty log message ***
gongo
parents:
diff changeset
38 class SchedTaskBase;
109
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
39 class SchedTask;
42
aa11038dbdc1 *** empty log message ***
gongo
parents:
diff changeset
40
aa11038dbdc1 *** empty log message ***
gongo
parents:
diff changeset
41 class Scheduler {
aa11038dbdc1 *** empty log message ***
gongo
parents:
diff changeset
42 public:
109
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
43 virtual ~Scheduler(void);
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
44
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
45 BASE_NEW_DELETE(Scheduler);
42
aa11038dbdc1 *** empty log message ***
gongo
parents:
diff changeset
46
aa11038dbdc1 *** empty log message ***
gongo
parents:
diff changeset
47 /* variables */
109
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
48
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
49 // double buffering
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
50 TaskListPtr buff_taskList[2];
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
51 ListDataPtr buff_inListData[2];
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
52 ListDataPtr buff_outListData[2];
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
53
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
54 int buffFlag_taskList;
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
55 int buffFlag_inListData;
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
56 int buffFlag_outListData;
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
57
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
58 /* TaskList 関連 */
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
59
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
60 /**
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
61 * 実行中 TaskList の現在の位置 (list->tasks[index])
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
62 */
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
63 int curIndex_taskList;
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
64
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
65 /**
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
66 * タスク内で生成されたタスクを入れる
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
67 * Linked List で管理
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
68 */
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
69 TaskListPtr renewCur_taskList;
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
70 TaskListPtr renewTop_taskList;
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
71
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
72 /**
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
73 * 実行中 TaskList が Renew されたものかどうかのフラグ
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
74 * Renew の場合、ListData は DMA する必要ないとか
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
75 * いろいろな判定に使えるかもしれん
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
76 * if (flag == 1) taskList is Renew
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
77 */
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
78 int flag_renewTaskList;
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
79
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
80 /**
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
81 * タスク内 (T1) でタスク (Tc = T2, T3, ..) が複数生成された場合、
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
82 * Tc が全て終わってから、T1 の終了コマンドを PPE に送る。
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
83 * なので、Tc を process group として記憶しておく。
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
84 *
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
85 * Tc が taskGroup のアドレスを持つので
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
86 * Scheduler が持つ taskGroup 変数は一つだけで(多分)おk
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
87 */
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
88 TaskGroupPtr taskGroup;
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
89
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
90 /* GlobalMemoryList */
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
91 void* globalList[MAX_GLOBAL_AREA];
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
92
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
93 /* MainMemory Allocate Command List */
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
94 void* mainMemList[MAX_MAINMEM_AREA];
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
95
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
96 // Task Object Table
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
97 typedef SchedTask* (*TaskObject)(TaskListPtr, TaskPtr, ListDataPtr,
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
98 ListDataPtr, Scheduler*);
42
aa11038dbdc1 *** empty log message ***
gongo
parents:
diff changeset
99
aa11038dbdc1 *** empty log message ***
gongo
parents:
diff changeset
100 DmaManager* connector;
109
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
101
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
102 // Pipeline Stage
42
aa11038dbdc1 *** empty log message ***
gongo
parents:
diff changeset
103 SchedTaskBase* task1;
aa11038dbdc1 *** empty log message ***
gongo
parents:
diff changeset
104 SchedTaskBase* task2;
aa11038dbdc1 *** empty log message ***
gongo
parents:
diff changeset
105 SchedTaskBase* task3;
aa11038dbdc1 *** empty log message ***
gongo
parents:
diff changeset
106
aa11038dbdc1 *** empty log message ***
gongo
parents:
diff changeset
107 /* functions */
aa11038dbdc1 *** empty log message ***
gongo
parents:
diff changeset
108 void init(void);
aa11038dbdc1 *** empty log message ***
gongo
parents:
diff changeset
109 void run(void);
109
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
110 virtual void init_impl(void) {};
50
7927e00fb8e2 *** empty log message ***
gongo
parents: 42
diff changeset
111 void finish(void);
42
aa11038dbdc1 *** empty log message ***
gongo
parents:
diff changeset
112
aa11038dbdc1 *** empty log message ***
gongo
parents:
diff changeset
113 TaskListPtr get_curListBuf(void);
109
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
114 ListDataPtr get_curReadBuf(void);
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
115 ListDataPtr get_curWriteBuf(void);
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
116 TaskListPtr get_renewListBuf(void);
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
117
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
118 // なんか名前が変だが。。。
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
119 /* TaskGroup */
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
120 TaskGroupPtr set_groupTask(uint32 command);
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
121 void add_groupTask(TaskGroupPtr group, TaskPtr task);
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
122 void remove_groupTask(TaskGroupPtr group, TaskPtr task);
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
123 void reload_groupTask(void);
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
124 uint32 status_groupTask(TaskGroupPtr group);
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
125
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
126 /* GlobalMemory */
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
127 void* global_alloc(int id, int size);
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
128 void* global_get(int id);
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
129 void global_free(int id);
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
130
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
131 virtual void *allocate(int size) { return NULL; };
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
132
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
133 virtual void mainMem_alloc(int id, int size) {};
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
134 virtual void mainMem_wait(void) {};
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
135 void *mainMem_get(int id);
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
136
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
137 /* DMA Transfer */
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
138 void dma_load(void *buf, uint32 addr, uint32 size, uint32 mask);
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
139 void dma_store(void *buf,uint32 addr, uint32 size, uint32 mask);
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
140 void dma_wait(uint32 mask);
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
141 void mail_write(uint32 data);
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
142 uint32 mail_read(void);
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
143 void dma_loadList(ListDataPtr list, void *, uint32 mask);
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
144 void dma_storeList(ListDataPtr list, void *, uint32 mask);
42
aa11038dbdc1 *** empty log message ***
gongo
parents:
diff changeset
145 };
aa11038dbdc1 *** empty log message ***
gongo
parents:
diff changeset
146
aa11038dbdc1 *** empty log message ***
gongo
parents:
diff changeset
147 #endif
109
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
148
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
149 extern void register_task(int cmd, Scheduler::TaskObject task);
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
150
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
151 #define SchedConstructor(str) \
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
152 str(TaskListPtr _tlist, TaskPtr _task, \
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
153 ListDataPtr _rbuf, ListDataPtr _wbuf, Scheduler* _con) \
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
154 :SchedTask(_tlist, _task, _rbuf, _wbuf, _con) {} \
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
155 \
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
156 BASE_NEW_DELETE(str) \
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
157
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
158 #define SchedDefineTask(str) \
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
159 SchedTask* createTask_##str(TaskListPtr list, TaskPtr task, \
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
160 ListDataPtr rbuf, ListDataPtr wbuf, \
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
161 Scheduler *sched) \
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
162 { \
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
163 return new str(list, task, rbuf, wbuf, sched); \
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
164 }
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
165
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
166 #define SchedExternTask(str) \
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
167 extern \
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
168 SchedTask* createTask_##str(TaskListPtr list, TaskPtr task, \
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
169 ListDataPtr, ListDataPtr, Scheduler*);
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
170
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
171 #define SchedRegisterTask(cmd, str) \
028ffc9c0375 Cerium cvs version
gongo@gendarme.local
parents: 70
diff changeset
172 register_task(cmd, createTask_##str);