Mercurial > hg > Members > kono > Cerium
diff TaskManager/kernel/schedule/SchedTask.cc @ 634:0558abba673c
SimpleTask start
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Wed, 18 Nov 2009 17:29:14 +0900 |
parents | 8843edf37c0e |
children | 8cc609285bbe |
line wrap: on
line diff
--- a/TaskManager/kernel/schedule/SchedTask.cc Wed Nov 18 14:47:23 2009 +0900 +++ b/TaskManager/kernel/schedule/SchedTask.cc Wed Nov 18 17:29:14 2009 +0900 @@ -27,7 +27,7 @@ 最初の一回は SchedTaskList:: next から呼ばれる。 この段階では、SchedTask object は、まだ作られてない。 */ -void +static void loadSchedTask(Scheduler *scheduler,TaskPtr task) { // fprintf(stderr,"loadSchedTask %d\n",task->command); @@ -39,8 +39,10 @@ { list = NULL; task = NULL; +#ifndef SIMPLE_TASK inListData = NULL; outListData = NULL; +#endif readbuf = NULL; writebuf = NULL; scheduler = NULL; @@ -67,8 +69,10 @@ { list = _list; task = _task; +#ifndef SIMPLE_TASK inListData = &_task->inData; outListData = &_task->outData; +#endif scheduler = sc; cur_index = index; @@ -88,7 +92,14 @@ // load next task 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); // 読むデータが一つもなければ無視 @@ -97,6 +108,7 @@ // load Input Data readbuf = scheduler->allocate(inListData->size); scheduler->dma_loadList(inListData, readbuf, DMA_READ); +#endif } @@ -113,9 +125,15 @@ free(readbuf); // 書き込む領域がなければ無視 +#ifdef SIMPLE_TASK if (outListData->length > 0) { scheduler->dma_storeList(outListData, writebuf, DMA_WRITE); } +#else + if (task->w_size > 0) { + scheduler->dma_store(writebuf, task->wbuf,task->w_size, DMA_READ); + } +#endif } void @@ -151,8 +169,7 @@ return new SchedNop2Ready(scheduler); } else { // 新しいリストに取り掛かる - return createSchedTaskList(nextList, scheduler, - 0); + return createSchedTaskList(nextList, scheduler, 0); } } } @@ -238,7 +255,11 @@ memaddr SchedTask::get_param(int index) { +#ifdef SIMPLE_TASK + return param[index]; +#else return task->param[index]; +#endif } @@ -316,11 +337,19 @@ } -HTaskPtr SchedTask::create_task(int cmd) +HTaskPtr +SchedTask::create_task(int cmd) { return scheduler->create_task(cmd); } +HTaskPtr +SchedTask::create_task(int cmd, memaddr r, long rs, memaddr w, long ws) +{ + return scheduler->create_task(cmd,r,rs,w,ws); +} + + void SchedTask::set_task_depend(HTaskPtr master, HTaskPtr slave) { scheduler->set_task_depend(master, slave);