# HG changeset patch # User Shinji KONO # Date 1260090826 -32400 # Node ID 80b23718df1889581f13a95ad3151e13580a9e16 # Parent b976bed4e46ab59ee4e55e54fc1e4e0a468058a4 test code for TaskArray diff -r b976bed4e46a -r 80b23718df18 TaskManager/kernel/ppe/HTask.cc --- a/TaskManager/kernel/ppe/HTask.cc Sun Dec 06 16:41:10 2009 +0900 +++ b/TaskManager/kernel/ppe/HTask.cc Sun Dec 06 18:13:46 2009 +0900 @@ -49,4 +49,16 @@ this->post_arg2 = arg2; } +#ifdef SIMPLE_TASK + +Task * +HTask::create_task(int task_id, int pos) +{ + Task *task = (Task*)((memaddr)rbuf + pos); + task->set_task_id(task_id); + return task; +} + +#endif + /* end */ diff -r b976bed4e46a -r 80b23718df18 TaskManager/kernel/ppe/HTask.h --- a/TaskManager/kernel/ppe/HTask.h Sun Dec 06 16:41:10 2009 +0900 +++ b/TaskManager/kernel/ppe/HTask.h Sun Dec 06 18:13:46 2009 +0900 @@ -46,7 +46,7 @@ void set_cpu(CPU_TYPE type); void set_post(PostFunction func, void *read, void *write); #ifdef SIPMLE_TASK - Task *create_task_array(int size); + Task *create_task(int task_id, int pos); #endif }; diff -r b976bed4e46a -r 80b23718df18 TaskManager/kernel/ppe/Task.cc --- a/TaskManager/kernel/ppe/Task.cc Sun Dec 06 16:41:10 2009 +0900 +++ b/TaskManager/kernel/ppe/Task.cc Sun Dec 06 18:13:46 2009 +0900 @@ -107,6 +107,18 @@ elm->size = size; } +void +Task::print(SchedTask *s) +{ + s->printf("task id %d param size %d " + "inData size %d " + "outData size %d\n", task_id, param_size, inData_size, outData_size; + ); + for(int i=0; i< param_size; i++) { + s->printf("param %d = 0x%ld\n", param(i)); + } + +} #endif diff -r b976bed4e46a -r 80b23718df18 TaskManager/kernel/ppe/Task.h --- a/TaskManager/kernel/ppe/Task.h Sun Dec 06 16:41:10 2009 +0900 +++ b/TaskManager/kernel/ppe/Task.h Sun Dec 06 18:13:46 2009 +0900 @@ -37,7 +37,7 @@ class Task { public: // variables - int size; + int task_id; int param_size; int inData_size; int outData_size; @@ -49,6 +49,9 @@ public: // functions // int add_inData_t(memaddr addr, int size); // int add_outData_t(memaddr addr, int size); + + void print(SchedTask *s); + memaddr param(int index) { memaddr p = (memaddr)data->data; return p + sizeof(memaddr)*index; @@ -68,6 +71,7 @@ void set_outData_length(int length) { outData_size = length; } void set_inData_t( int index, memaddr addr, int size); void set_outData_t(int index, memaddr addr, int size); + void set_task_id(int id) { task_id = id; } int set_param_t(int index, memaddr param) { memaddr *p = (memaddr*)param(index); *p = param; diff -r b976bed4e46a -r 80b23718df18 TaskManager/kernel/sys_task/TaskArray.cc --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TaskManager/kernel/sys_task/TaskArray.cc Sun Dec 06 18:13:46 2009 +0900 @@ -0,0 +1,29 @@ +#include "Finish.h" +#include "SysFunc.h" +#include "Scheduler.h" +#include "Task.h" + + +SchedDefineTask(TaskArray); + +static Task * +next(Task *t) +{ + char *p = (char*)t; + p += t->size(); + return (Task*)p; +} + +static int +run(SchedTask *s,void *rbuf, void *wbuf) +{ + Task *task = (Task *)rbuf; + Task *last = ((char*)rbuf)+ s->read_size(); + + while( task < last) { + task->print(s); + task = next(task); + } + + return 0; +} diff -r b976bed4e46a -r 80b23718df18 example/Bulk/main.cc --- a/example/Bulk/main.cc Sun Dec 06 16:41:10 2009 +0900 +++ b/example/Bulk/main.cc Sun Dec 06 18:13:46 2009 +0900 @@ -70,7 +70,10 @@ */ int size = count*(SizeOfParam(2) + SizeOfData(sizeof(int)*length) + SizeOfData(sizeof(int)*length)); - HTask *twice_main = manager->create_task_array(size); + + memaddr task_buf = (memaddr)manager->allocate(size); + HTask *twice_main = manager->create_task(TaskArray, task_buf, size, 0, 0); + int pos = 0; for(int i = 0;icreate_task(Twice,pos);