annotate TaskManager/kernel/ppe/HTask.cc @ 704:6d497c098455

Compatibility mode works.
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 14 Dec 2009 19:54:00 +0900
parents d3afc8777daa
children f725c6455d19
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
1 #include "HTask.h"
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
2 #include "ListData.h"
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
3 #include "TaskManagerImpl.h"
704
6d497c098455 Compatibility mode works.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 700
diff changeset
4 #include "strings.h"
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
5
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
6
293
9f4f99d459aa add wait_for document
e065746@localhost.localdomain
parents: 109
diff changeset
7 /*!
297
f8006660a45c start task config
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 293
diff changeset
8 manager->set_task_depend(task1, task2); // task2 は task1 の終了を待つ
293
9f4f99d459aa add wait_for document
e065746@localhost.localdomain
parents: 109
diff changeset
9
297
f8006660a45c start task config
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 293
diff changeset
10 ってやるより
293
9f4f99d459aa add wait_for document
e065746@localhost.localdomain
parents: 109
diff changeset
11
9f4f99d459aa add wait_for document
e065746@localhost.localdomain
parents: 109
diff changeset
12 task2->set_depend(task1);
9f4f99d459aa add wait_for document
e065746@localhost.localdomain
parents: 109
diff changeset
13
297
f8006660a45c start task config
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 293
diff changeset
14 ってやったほうがわかりやすいよねー的な話し合いで
f8006660a45c start task config
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 293
diff changeset
15 下のようなAPIを作りました
293
9f4f99d459aa add wait_for document
e065746@localhost.localdomain
parents: 109
diff changeset
16 */
9f4f99d459aa add wait_for document
e065746@localhost.localdomain
parents: 109
diff changeset
17
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
18 void
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
19 HTask::spawn(void)
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
20 {
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
21 mimpl->spawn_task(this);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
22 }
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
23
293
9f4f99d459aa add wait_for document
e065746@localhost.localdomain
parents: 109
diff changeset
24 /*!
297
f8006660a45c start task config
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 293
diff changeset
25 @brief この Task が待ち合わせする Task を指定する
f8006660a45c start task config
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 293
diff changeset
26 @param[in] master この Task が終了待ち合わせをする相手の Task
293
9f4f99d459aa add wait_for document
e065746@localhost.localdomain
parents: 109
diff changeset
27
297
f8006660a45c start task config
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 293
diff changeset
28 繰り返し使用する事で複数の Task を待ち合わせする事ができる。
293
9f4f99d459aa add wait_for document
e065746@localhost.localdomain
parents: 109
diff changeset
29
297
f8006660a45c start task config
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 293
diff changeset
30 wait_for している Task の入力バッファにこの Task から書き込みできる機能があると良い
293
9f4f99d459aa add wait_for document
e065746@localhost.localdomain
parents: 109
diff changeset
31 */
9f4f99d459aa add wait_for document
e065746@localhost.localdomain
parents: 109
diff changeset
32
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
33 void
293
9f4f99d459aa add wait_for document
e065746@localhost.localdomain
parents: 109
diff changeset
34 HTask::wait_for(HTaskPtr master)
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
35 {
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
36 mimpl->set_task_depend(master, this);
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
37 }
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
38
519
5c76db2a07fa continue..
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 518
diff changeset
39 void
5c76db2a07fa continue..
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 518
diff changeset
40 HTask::set_cpu(CPU_TYPE type)
5c76db2a07fa continue..
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 518
diff changeset
41 {
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
42 mimpl->set_task_cpu(this, type);
519
5c76db2a07fa continue..
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 518
diff changeset
43 }
5c76db2a07fa continue..
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 518
diff changeset
44
5c76db2a07fa continue..
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 518
diff changeset
45 void
514
2659376067e8 old ball_bound fix...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 507
diff changeset
46 HTask::set_post(PostFunction func,void *arg1, void *arg2)
519
5c76db2a07fa continue..
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 518
diff changeset
47 {
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents:
diff changeset
48 this->post_func = func;
514
2659376067e8 old ball_bound fix...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 507
diff changeset
49 this->post_arg1 = arg1;
2659376067e8 old ball_bound fix...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 507
diff changeset
50 this->post_arg2 = arg2;
519
5c76db2a07fa continue..
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 518
diff changeset
51 }
5c76db2a07fa continue..
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 518
diff changeset
52
682
80b23718df18 test code for TaskArray
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 567
diff changeset
53 #ifdef SIMPLE_TASK
80b23718df18 test code for TaskArray
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 567
diff changeset
54
80b23718df18 test code for TaskArray
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 567
diff changeset
55 Task *
700
d3afc8777daa fix fix ...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 697
diff changeset
56 HTask::create_task_array(int id, int num_task, int num_param, int num_inData, int num_outData)
682
80b23718df18 test code for TaskArray
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 567
diff changeset
57 {
700
d3afc8777daa fix fix ...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 697
diff changeset
58 r_size = Task::calc_size(num_param, num_inData, num_outData)*num_task;
d3afc8777daa fix fix ...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 697
diff changeset
59 rbuf = (memaddr) mimpl->allocate(r_size);
704
6d497c098455 Compatibility mode works.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 700
diff changeset
60 bzero(rbuf,r_size);
700
d3afc8777daa fix fix ...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 697
diff changeset
61 Task *task = (Task*)rbuf;
d3afc8777daa fix fix ...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 697
diff changeset
62 task->init(id, num_param,num_inData,num_outData);
d3afc8777daa fix fix ...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 697
diff changeset
63 // task->print();
d3afc8777daa fix fix ...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 697
diff changeset
64 return task; // first task
d3afc8777daa fix fix ...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 697
diff changeset
65 }
684
458a1ad91427 Task Array generation worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 683
diff changeset
66
700
d3afc8777daa fix fix ...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 697
diff changeset
67 Task *
d3afc8777daa fix fix ...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 697
diff changeset
68 HTask::next_task_array(int id, Task *t)
d3afc8777daa fix fix ...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 697
diff changeset
69 {
d3afc8777daa fix fix ...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 697
diff changeset
70 Task *first = (Task*)rbuf;
d3afc8777daa fix fix ...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 697
diff changeset
71 if (t==0) {
d3afc8777daa fix fix ...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 697
diff changeset
72 // first->print();
d3afc8777daa fix fix ...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 697
diff changeset
73 return first;
d3afc8777daa fix fix ...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 697
diff changeset
74 }
d3afc8777daa fix fix ...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 697
diff changeset
75
d3afc8777daa fix fix ...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 697
diff changeset
76 Task *next = t->next();
d3afc8777daa fix fix ...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 697
diff changeset
77 next->init(id, first->param_count, first->inData_count, first->outData_count);
d3afc8777daa fix fix ...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 697
diff changeset
78 if ((memaddr)next - (memaddr)rbuf > r_size)
d3afc8777daa fix fix ...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 697
diff changeset
79 printf("too many task array used.\n");
d3afc8777daa fix fix ...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 697
diff changeset
80 return next;
682
80b23718df18 test code for TaskArray
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 567
diff changeset
81 }
80b23718df18 test code for TaskArray
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 567
diff changeset
82
684
458a1ad91427 Task Array generation worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 683
diff changeset
83 void
700
d3afc8777daa fix fix ...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 697
diff changeset
84 HTask::spawn_task_array(Task * last)
684
458a1ad91427 Task Array generation worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 683
diff changeset
85 {
700
d3afc8777daa fix fix ...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 697
diff changeset
86 int size = (memaddr)last - rbuf;
d3afc8777daa fix fix ...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 697
diff changeset
87 if (size!= r_size) {
d3afc8777daa fix fix ...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 697
diff changeset
88 printf("spawn task array size differ size 0x%x r_size 0x%x\n",
d3afc8777daa fix fix ...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 697
diff changeset
89 size, r_size);
684
458a1ad91427 Task Array generation worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 683
diff changeset
90 }
458a1ad91427 Task Array generation worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 683
diff changeset
91 }
458a1ad91427 Task Array generation worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 683
diff changeset
92
458a1ad91427 Task Array generation worked.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 683
diff changeset
93
682
80b23718df18 test code for TaskArray
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 567
diff changeset
94 #endif
80b23718df18 test code for TaskArray
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 567
diff changeset
95
519
5c76db2a07fa continue..
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 518
diff changeset
96 /* end */