Mercurial > hg > Members > e085722 > Cerium
comparison TaskManager/kernel/ppe/TaskManager.cc @ 0:04e28d8d3c6f
first commit
author | Daiki KINJYO <e085722@ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 08 Nov 2010 01:23:25 +0900 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:04e28d8d3c6f |
---|---|
1 #include "TaskManager.h" | |
2 #include "Scheduler.h" | |
3 #include "HTask.h" | |
4 #include "Task.h" | |
5 #include "SysFunc.h" | |
6 | |
7 TaskManager::TaskManager(int num) : machineNum(num) | |
8 { | |
9 } | |
10 | |
11 TaskManager::~TaskManager() | |
12 { | |
13 delete m_impl; | |
14 } | |
15 | |
16 /** | |
17 * create_impl(int); | |
18 * | |
19 * [cell版] ../../Cell/CellTaskManagerImpl.cpp | |
20 * [fifo版] ../../Fifo/FifoTaskManagerImpl.cpp | |
21 * で定義されています。コンパイル時に | |
22 * | |
23 * % make cell ってすると cell 版が、 | |
24 * % make fifo ってすると fifo 版 がリンクされるようにしているので | |
25 * それに応じて create_impl が返す値を変えています。 | |
26 * cell だったら CellManagerImpl, fifo だったら FifoManagerImpl です。 | |
27 * | |
28 * 今までは ifdef CELL とか書いてましたわ。どっちがいいかね | |
29 * | |
30 * てか、普通に TaskManagerImpl に関数持たせた方が早いか・・・? | |
31 */ | |
32 extern TaskManagerImpl* create_impl(int); | |
33 | |
34 void | |
35 TaskManager::init() | |
36 { | |
37 m_impl = create_impl(machineNum); | |
38 m_impl->init(); | |
39 m_impl->systask_init(); | |
40 } | |
41 | |
42 void | |
43 TaskManager::finish() | |
44 { | |
45 delete m_impl; | |
46 } | |
47 | |
48 /** | |
49 * @param [command] Task executes method number | |
50 * | |
51 * @return this task | |
52 */ | |
53 HTaskPtr | |
54 TaskManager::create_task(int cmd) | |
55 { | |
56 return m_impl->create_task(cmd,__builtin_return_address(0)); | |
57 } | |
58 | |
59 HTaskPtr | |
60 TaskManager::create_task(int cmd, memaddr r, long rs, memaddr w, long ws) | |
61 { | |
62 return m_impl->create_task(cmd,r,rs,w,ws,__builtin_return_address(0)); | |
63 } | |
64 | |
65 HTaskPtr | |
66 TaskManager::create_task_array(int id, int num_task, int num_param, int num_inData, int num_outData) { | |
67 return m_impl->create_task_array(id, num_task, num_param, num_inData, num_outData,__builtin_return_address(0)) ; | |
68 } | |
69 | |
70 /** | |
71 * TaskManaer 終了時に実行される関数の設定 | |
72 */ | |
73 void | |
74 TaskManager::set_TMend(void (*endf)(TaskManager *manager)) | |
75 { | |
76 tm_end = endf; | |
77 } | |
78 | |
79 void | |
80 TaskManager::run() | |
81 { | |
82 m_impl->run(); | |
83 } | |
84 | |
85 void* | |
86 TaskManager::allocate(int size) { | |
87 return m_impl->allocate(size); | |
88 } | |
89 | |
90 int | |
91 TaskManager::get_cpuNum() | |
92 { | |
93 return machineNum; | |
94 } | |
95 | |
96 int | |
97 TaskManager::get_random() | |
98 { | |
99 return random(); | |
100 } | |
101 | |
102 MemList* | |
103 TaskManager::createMemList(int size, int count) | |
104 { | |
105 return get_scheduler()->createMemList(size, count); | |
106 } | |
107 | |
108 Scheduler* | |
109 TaskManager::get_scheduler() { | |
110 return m_impl->get_scheduler(); | |
111 } | |
112 | |
113 /* end */ |