diff TaskManager/kernel/schedule/SchedTask.cc @ 695:cbcf0182635e

TaskArray on going...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Sat, 12 Dec 2009 17:38:30 +0900
parents 9a6cb2439593
children dcaa40ec963d
line wrap: on
line diff
--- a/TaskManager/kernel/schedule/SchedTask.cc	Thu Dec 10 22:55:55 2009 +0900
+++ b/TaskManager/kernel/schedule/SchedTask.cc	Sat Dec 12 17:38:30 2009 +0900
@@ -1,7 +1,9 @@
 #include <stdlib.h>
 #include <string.h>
 #include "SchedTask.h"
+#include "SysFunc.h"
 #include "SchedTaskList.h"
+#include "SchedTaskArrayLoad.h"
 #include "SchedNop2Ready.h"
 #include "DmaManager.h"
 #include "error.h"
@@ -32,7 +34,7 @@
    最初の一回は SchedTaskList:: next から呼ばれる。
    この段階では、SchedTask object は、まだ作られてない。
  */
-static void
+extern void
 loadSchedTask(Scheduler *scheduler,TaskPtr task)
 {
 // fprintf(stderr,"loadSchedTask %d\n",task->command);
@@ -98,14 +100,12 @@
 	loadSchedTask(scheduler, &list->tasks[cur_index]);
     }
 #ifdef SIMPLE_TASK
-    writebuf = scheduler->allocate(task->w_size);
     // 読むデータが一つもなければ無視
     if (task->r_size == 0) return;
     // load Input Data
     readbuf = scheduler->allocate(task->r_size);
     scheduler->dma_load(readbuf, task->rbuf,task->r_size, DMA_READ);
 #else
-    writebuf = scheduler->allocate(outListData->size);
 
     // 読むデータが一つもなければ無視
     if (inListData->length == 0) return;
@@ -132,10 +132,12 @@
     // 書き込む領域がなければ無視
 #ifdef SIMPLE_TASK
     if (task->w_size > 0) {
+	writebuf = scheduler->allocate(task->w_size);
 	scheduler->dma_store(writebuf, task->wbuf,task->w_size, DMA_WRITE);
     }
 #else
     if (outListData->length > 0) {
+	writebuf = scheduler->allocate(outListData->size);
         scheduler->dma_storeList(outListData, writebuf, DMA_WRITE);
     }
 #endif
@@ -166,6 +168,11 @@
 	// この up cast は汚い...
 	((SchedTask*)nextSched)->init(list, nextTask, cur_index,
 					  scheduler);
+	if (nextTask->command==TaskArray) {
+	    // Start Task Array
+	    return (SchedTaskBase*)(new SchedTaskArrayLoad(nextSched));
+	}
+
 	return nextSched;
     } else {
         memaddr nextList = (memaddr)list->next;