view TaskManager/kernel/ppe/HTask.cc @ 697:257ad1a518e3

TaskArray on going...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Sun, 13 Dec 2009 18:45:09 +0900
parents 458a1ad91427
children d3afc8777daa
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 task_id, int pos)
{
    Task *task = (Task*)((memaddr)rbuf + pos);
    task->set_task_id(task_id);
    task-> param_count = 0;
    task-> inData_count = 0;
    task-> outData_count = 0;
    task-> inData_offset = 0;
    task-> outData_offset = 0;

    return task;
}

void
HTask::spawn_task_array(int pos)
{
    if (pos!= r_size) {
	printf("spawn task array size differ pos 0x%x r_size 0x%x\n",
	    pos, r_size);
    }
}


#endif

/* end */