Mercurial > hg > Members > kono > Cerium
comparison TaskManager/kernel/schedule/SchedTaskList.cc @ 625:60aa3f241b10
64bit mode worked on Mac OS X.
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 16 Nov 2009 10:59:55 +0900 |
parents | 0decff4e867b |
children | 9a6cb2439593 |
comparison
equal
deleted
inserted
replaced
624:c7b5c99252ad | 625:60aa3f241b10 |
---|---|
17 */ | 17 */ |
18 SchedTaskList* | 18 SchedTaskList* |
19 createSchedTaskList(memaddr next_list, Scheduler* scheduler, int renew_flag) | 19 createSchedTaskList(memaddr next_list, Scheduler* scheduler, int renew_flag) |
20 { | 20 { |
21 SchedTaskList* sched = new SchedTaskList(next_list, scheduler); | 21 SchedTaskList* sched = new SchedTaskList(next_list, scheduler); |
22 sched->flag_renewTaskList = renew_flag; | |
23 return sched; | 22 return sched; |
24 } | 23 } |
25 | 24 |
26 SchedTaskList::SchedTaskList(unsigned int addr, Scheduler *sched) | 25 SchedTaskList::SchedTaskList(memaddr addr, Scheduler *sched) |
27 { | 26 { |
28 params_addr = addr; | 27 params_addr = addr; |
29 list = NULL; | 28 list = NULL; |
30 scheduler = sched; | 29 scheduler = sched; |
31 | 30 |
32 flag_renewTaskList = 0; | |
33 } | 31 } |
34 | 32 |
35 | 33 |
36 void | 34 void |
37 SchedTaskList::read() | 35 SchedTaskList::read() |
38 { | 36 { |
39 __debug("[SchedTaskList:%s]\n", __FUNCTION__); | 37 __debug("[SchedTaskList:%s]\n", __FUNCTION__); |
40 | 38 |
41 if (flag_renewTaskList == SCHED_TASKLIST_NORMAL) { | |
42 list = scheduler->get_curListBuf(); | 39 list = scheduler->get_curListBuf(); |
43 scheduler->dma_load(list, params_addr, | 40 scheduler->dma_load(list, params_addr, |
44 sizeof(TaskList), DMA_READ_TASKLIST); | 41 sizeof(TaskList), DMA_READ_TASKLIST); |
45 } else { | |
46 list = (TaskListPtr)params_addr; | |
47 } | |
48 } | 42 } |
49 | 43 |
50 SchedTaskBase* | 44 SchedTaskBase* |
51 SchedTaskList::next(Scheduler *scheduler, SchedTaskBase *p) | 45 SchedTaskList::next(Scheduler *scheduler, SchedTaskBase *p) |
52 { | 46 { |
55 __debug("[SchedTaskList:%s]\n", __FUNCTION__); | 49 __debug("[SchedTaskList:%s]\n", __FUNCTION__); |
56 | 50 |
57 scheduler->dma_wait(DMA_READ_TASKLIST); | 51 scheduler->dma_wait(DMA_READ_TASKLIST); |
58 if (list->length < 1) { | 52 if (list->length < 1) { |
59 nextSched = new SchedNop2Ready(scheduler); | 53 nextSched = new SchedNop2Ready(scheduler); |
60 | |
61 if (flag_renewTaskList == SCHED_TASKLIST_RENEW) { | |
62 free(list); | |
63 } | |
64 | |
65 } else { | 54 } else { |
66 TaskPtr nextTask = &list->tasks[0]; | 55 TaskPtr nextTask = &list->tasks[0]; |
67 nextSched = createSchedTask(scheduler, nextTask); | 56 nextSched = createSchedTask(scheduler, nextTask); |
68 ((SchedTask*)nextSched)->init(list, nextTask, 1, | 57 ((SchedTask*)nextSched)->init(list, nextTask, 1, |
69 scheduler); | 58 scheduler); |