# HG changeset patch # User Shinji KONO # Date 1254810735 -32400 # Node ID df499063ccda9cbc46eec6168f23bcb5ec9acedc # Parent bfbad00ed9bee6c0055af923b5e3c5c5437bde19 comment diff -r bfbad00ed9be -r df499063ccda TaskManager/ChangeLog --- a/TaskManager/ChangeLog Tue Oct 06 10:12:37 2009 +0900 +++ b/TaskManager/ChangeLog Tue Oct 06 15:32:15 2009 +0900 @@ -1,3 +1,15 @@ +2009-10-06 Shinji KONO + + Task 内の create_task は、SchedTask に対してで、 + PPE 上では、Manager に対してだよね。だから、出来る + ことがかなり異なる。これは、まずいだろ? + + 特に、PPE task に明示的に manager を渡すってのは、 + とっても変。 + + Renew Task の特別扱いが、いろいろ歪めているんだが、 + view.cc で使っているので落せない。 + 2009-10-05 Shinji KONO TaskQueue のfree list の管理はシステムで一つであるべき。 diff -r bfbad00ed9be -r df499063ccda example/renew_task/Func.h --- a/example/renew_task/Func.h Tue Oct 06 10:12:37 2009 +0900 +++ b/example/renew_task/Func.h Tue Oct 06 15:32:15 2009 +0900 @@ -1,5 +1,6 @@ enum { RENEW_START = 0, + RENEW_REPEAT, RENEW1, RENEW2, RENEW3, diff -r bfbad00ed9be -r df499063ccda example/renew_task/main.cc --- a/example/renew_task/main.cc Tue Oct 06 10:12:37 2009 +0900 +++ b/example/renew_task/main.cc Tue Oct 06 15:32:15 2009 +0900 @@ -8,24 +8,70 @@ const char *usr_help_str = "Usage: ./renew_task"; +SchedDefineTask(RenewRepeat); + +static int count = 1; +static int task_count = 1; + +static void +renewRepeat(void *arg) +{ + TaskManager *manager = (TaskManager *)arg; + + if (count-->0) { + HTask *repeat = manager->create_task(RENEW_REPEAT); + repeat->set_post(renewRepeat, (void*)manager); + repeat->spawn(); + + HTask *renew; + + printf("[PPE] Create Task : RenewStart\n\n"); + + for(int i=0;icreate_task(RENEW_START); + renew->set_cpu(SPE_ANY); + renew->add_param(i); + + // add Active Queue + renew->spawn(); + } + } +} + +static int +run(SchedTask *s, void *rbuf, void *wbuf) +{ + // RewnewRepeat Task + return 0; +} + static int init(int argc, char **argv) { + for (int i = 1; argv[i]; ++i) { + if (strcmp(argv[i], "-count") == 0) { + count = atoi(argv[++i]); + } else if (strcmp(argv[i], "-task") == 0) { + task_count = atoi(argv[++i]); + } + + + } return 0; } static void renew_init(TaskManager *manager) { - HTask *renew; + HTask *repeat; - printf("[PPE] Create Task : RenewStart\n\n"); + printf("[PPE] Create Task : RenewRepeat\n\n"); - renew = manager->create_task(RENEW_START); - renew->set_cpu(SPE_ANY); + repeat = manager->create_task(RENEW_REPEAT); + repeat->set_post(renewRepeat, (void*)manager); // add Active Queue - renew->spawn(); + repeat->spawn(); } int diff -r bfbad00ed9be -r df499063ccda example/renew_task/ppe/RenewStart.cc --- a/example/renew_task/ppe/RenewStart.cc Tue Oct 06 10:12:37 2009 +0900 +++ b/example/renew_task/ppe/RenewStart.cc Tue Oct 06 15:32:15 2009 +0900 @@ -5,10 +5,14 @@ /* これは必須 */ SchedDefineTask(RenewStart); + static int run(SchedTask *s, void *rbuf, void *wbuf) { - s->printf("[PPE] ** running RenewStart\n"); + int id; + id = s->get_param(0); + + s->printf("[PPE] ** running RenewStart %d\n", id); s->printf("[PPE] Create Task : Renew1\n"); TaskPtr nextTask = s->create_task(RENEW1); diff -r bfbad00ed9be -r df499063ccda example/renew_task/ppe/task_init.cc --- a/example/renew_task/ppe/task_init.cc Tue Oct 06 10:12:37 2009 +0900 +++ b/example/renew_task/ppe/task_init.cc Tue Oct 06 15:32:15 2009 +0900 @@ -2,6 +2,7 @@ #include "Scheduler.h" /* 必ずこの位置に書いて */ +SchedExternTask(RenewRepeat); SchedExternTask(RenewStart); SchedExternTask(Renew1); SchedExternTask(Renew2); @@ -18,6 +19,7 @@ task_init(void) { SchedRegisterTask(RENEW_START, RenewStart); + SchedRegisterTask(RENEW_REPEAT, RenewRepeat); SchedRegisterTask(RENEW1, Renew1); SchedRegisterTask(RENEW2, Renew2); SchedRegisterTask(RENEW3, Renew3);