view TaskManager/kernel/ppe/HTask.h @ 700:d3afc8777daa

fix fix ...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 14 Dec 2009 12:16:52 +0900
parents 458a1ad91427
children 61b59376aec5
line wrap: on
line source

#ifndef INCLUDED_HTASK
#define INCLUDED_HTASK

#include "base.h"
#include "types.h"
#include "Task.h"
#include "TaskQueueInfo.h"

class TaskManagerImpl;
class SchedTask;

typedef void (*PostFunction)(SchedTask *s, void *read, void *write);

/*!
  @class
  
  @brief
  
  Cerium の Task で、spawn() でキューに格納されて順次実行される。
  cpu の指定があれば並列に実行される。
  特定の Task を待ち合わせる事が可能。
  Task の入出力は dma などで copy される。
 */
#ifdef SIMPLE_TASK

#include "SimpleTask.h"

class HTask : public SimpleTask {
#else
class HTask : public Task {
#endif
public:
    BASE_NEW_DELETE(HTask);

    TaskQueueInfo *wait_me;  // List of task waiting for me
    TaskQueueInfo *wait_i;   // List of task for which I am waiting
    PostFunction post_func;
    void *post_arg1;
    void *post_arg2;
    CPU_TYPE cpu_type;
    TaskManagerImpl *mimpl;

    HTask *waiter;
    HTask *next;
    HTask *prev;

    void spawn();
    void wait_for(HTask *);
    void set_cpu(CPU_TYPE type);    
    void set_post(PostFunction func, void *read, void *write);
#ifdef SIMPLE_TASK
    Task *create_task_array(int task_id, int num_task, int num_param, int num_inData, int num_outData);
    Task *next_task_array(int task_id, Task *t);
    void spawn_task_array(Task *t);
#endif
};

typedef HTask* HTaskPtr;

#endif