Mercurial > hg > Members > kono > Cerium
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;