0
|
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 */
|