changeset 487:df499063ccda

comment
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Tue, 06 Oct 2009 15:32:15 +0900
parents bfbad00ed9be
children 892eff521871
files TaskManager/ChangeLog example/renew_task/Func.h example/renew_task/main.cc example/renew_task/ppe/RenewStart.cc example/renew_task/ppe/task_init.cc
diffstat 5 files changed, 71 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- 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 <kono@ie.u-ryukyu.ac.jp>
+
+    Task 内の create_task は、SchedTask に対してで、
+    PPE 上では、Manager に対してだよね。だから、出来る
+    ことがかなり異なる。これは、まずいだろ?
+
+    特に、PPE task に明示的に manager を渡すってのは、
+    とっても変。
+
+    Renew Task の特別扱いが、いろいろ歪めているんだが、
+    view.cc で使っているので落せない。
+
 2009-10-05 Shinji KONO <kono@ie.u-ryukyu.ac.jp>
 
     TaskQueue のfree list の管理はシステムで一つであるべき。
--- 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,
--- 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;i<task_count;i++) {
+	    renew = manager->create_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
--- 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);
--- 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);