Mercurial > hg > Game > Cerium
view TaskManager/kernel/ppe/HTask.cc @ 700:ef08dd70eafb draft
fix fix ...
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 14 Dec 2009 12:16:52 +0900 |
parents | 4b6242d03512 |
children | ec6c897448ca |
line wrap: on
line source
#include "HTask.h" #include "ListData.h" #include "TaskManagerImpl.h" /*! manager->set_task_depend(task1, task2); // task2 は task1 の終了を待つ ってやるより task2->set_depend(task1); ってやったほうがわかりやすいよねー的な話し合いで 下のようなAPIを作りました */ void HTask::spawn(void) { mimpl->spawn_task(this); } /*! @brief この Task が待ち合わせする Task を指定する @param[in] master この Task が終了待ち合わせをする相手の Task 繰り返し使用する事で複数の Task を待ち合わせする事ができる。 wait_for している Task の入力バッファにこの Task から書き込みできる機能があると良い */ void HTask::wait_for(HTaskPtr master) { mimpl->set_task_depend(master, this); } void HTask::set_cpu(CPU_TYPE type) { mimpl->set_task_cpu(this, type); } void HTask::set_post(PostFunction func,void *arg1, void *arg2) { this->post_func = func; this->post_arg1 = arg1; this->post_arg2 = arg2; } #ifdef SIMPLE_TASK Task * HTask::create_task_array(int id, int num_task, int num_param, int num_inData, int num_outData) { r_size = Task::calc_size(num_param, num_inData, num_outData)*num_task; rbuf = (memaddr) mimpl->allocate(r_size); Task *task = (Task*)rbuf; task->init(id, num_param,num_inData,num_outData); // task->print(); return task; // first task } Task * HTask::next_task_array(int id, Task *t) { Task *first = (Task*)rbuf; if (t==0) { // first->print(); return first; } Task *next = t->next(); next->init(id, first->param_count, first->inData_count, first->outData_count); if ((memaddr)next - (memaddr)rbuf > r_size) printf("too many task array used.\n"); return next; } void HTask::spawn_task_array(Task * last) { int size = (memaddr)last - rbuf; if (size!= r_size) { printf("spawn task array size differ size 0x%x r_size 0x%x\n", size, r_size); } } #endif /* end */