view TaskManager/kernel/schedule/SchedTaskList.cc @ 145:a5138d6e8996 draft

fix
author gongo@gendarme.cr.ie.u-ryukyu.ac.jp
date Tue, 02 Dec 2008 12:46:54 +0900
parents 028ffc9c0375
children a19d3ed4ce5b
line wrap: on
line source

#include <stdlib.h>
#include <string.h>
#include "SchedTaskList.h"
#include "SchedTask.h"
#include "SchedNop2Ready.h"
#include "DmaManager.h"
#include "error.h"

SchedTaskList::SchedTaskList(unsigned int addr, Scheduler *sched)
{
    params_addr = addr;
    list = sched->get_curListBuf();
    scheduler = sched;

    flag_renewTaskList = 0;
}


void
SchedTaskList::read(void)
{
    __debug("[SchedTaskList:%s]\n", __FUNCTION__);

    if (flag_renewTaskList == 0) {
	scheduler->dma_load(list,params_addr,sizeof(TaskList),DMA_READ_TASKLIST);
	scheduler->dma_wait(DMA_READ_TASKLIST);
    } else {
	list = (TaskListPtr)params_addr;
    }

    scheduler->curIndex_taskList = 0;

    scheduler->mainMem_wait();
}

SchedTaskBase*
SchedTaskList::next(Scheduler *m, SchedTaskBase *p)
{
    __debug("[SchedTaskList:%s]\n", __FUNCTION__);

    delete p;

    if (list->length < 1) {
	return new SchedNop2Ready(scheduler);
    } else {
	SchedTask* task = CreateSchedTask(list, m);
	task->__flag_renewTask = this->flag_renewTaskList;
	task->__init__();
	return task;
    }
}