Mercurial > hg > Members > kono > Cerium
comparison TaskManager/Fifo/FifoTaskManagerImpl.cc @ 634:0558abba673c
SimpleTask start
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Wed, 18 Nov 2009 17:29:14 +0900 |
parents | 60aa3f241b10 |
children | 8cc609285bbe |
comparison
equal
deleted
inserted
replaced
633:328ab8ac468d | 634:0558abba673c |
---|---|
83 */ | 83 */ |
84 TaskListPtr | 84 TaskListPtr |
85 FifoTaskManagerImpl::get_runTaskList() | 85 FifoTaskManagerImpl::get_runTaskList() |
86 { | 86 { |
87 TaskListPtr list, list_top; | 87 TaskListPtr list, list_top; |
88 #ifdef SIMPLE_TASK | |
88 TaskPtr task; // Task (SPE に送る Task) | 89 TaskPtr task; // Task (SPE に送る Task) |
90 #else | |
91 SimpleTaskPtr task; // Task (SPE に送る Task) | |
92 #endif | |
89 | 93 |
90 if (activeTaskQueue->empty()) { | 94 if (activeTaskQueue->empty()) { |
91 return NULL; | 95 return NULL; |
92 } | 96 } |
93 | 97 |
99 list = list_top; | 103 list = list_top; |
100 | 104 |
101 // printf("active task queue length = %d\n",activeTaskQueue->length()); | 105 // printf("active task queue length = %d\n",activeTaskQueue->length()); |
102 while (HTaskPtr htask = activeTaskQueue->poll()) { | 106 while (HTaskPtr htask = activeTaskQueue->poll()) { |
103 task = &list->tasks[list->length++]; | 107 task = &list->tasks[list->length++]; |
104 // inData, outData を内蔵にしたので実は、結構でかくない? | 108 #ifdef SIMPLE_TASK |
105 // 268 byte 程度だが... 不要な分(設定してない inData, outData, param | 109 *task = *(SimpleTask*)htask; |
106 // とかもコピーしてるね。rbuf/wbuf の意味を変えてしまったわけか。 | 110 #else |
107 memcpy(task, (Task*)htask, sizeof(Task)); | 111 memcpy(task, (Task*)htask, sizeof(Task)); |
108 | 112 #endif |
109 | |
110 if (list->length >= TASK_MAX_SIZE) { | 113 if (list->length >= TASK_MAX_SIZE) { |
111 TaskListPtr newList = taskListImpl->create(); | 114 TaskListPtr newList = taskListImpl->create(); |
112 list_top = TaskListInfo::append(list_top, newList); | 115 list_top = TaskListInfo::append(list_top, newList); |
113 list = newList; | 116 list = newList; |
114 } | 117 } |
115 | |
116 // activeTaskQueue->free_(htask); ここで free しないで、 | 118 // activeTaskQueue->free_(htask); ここで free しないで、 |
117 // mail を待つ | 119 // mail を待つ |
118 } | 120 } |
119 | 121 |
120 mainTaskList = list_top; | 122 mainTaskList = list_top; |
199 memaddr data; | 201 memaddr data; |
200 | 202 |
201 while (q) { | 203 while (q) { |
202 data = q->data; | 204 data = q->data; |
203 | 205 |
204 /** | |
205 * MY_SPE_STATUS_READY: SPE が持ってた Task 全て終了 | |
206 * MY_SPE_NOP: 特に意味のないコマンド | |
207 * それ以外:終了したタスク(PPEにあるのでアドレス | |
208 * | |
209 * MY_SPE_NOP が 0 なので、 | |
210 * 下のように data > MY_SPE_NOP とかしています。 | |
211 * 一目でよくわからない書き方なんで、直したいところですが。。。 | |
212 */ | |
213 if (data == (memaddr)MY_SPE_STATUS_READY) { | 206 if (data == (memaddr)MY_SPE_STATUS_READY) { |
214 __debug_ppe("mail_check(): Task List finish\n"); | 207 __debug_ppe("mail_check(): Task List finish\n"); |
215 } else if (data != (memaddr)MY_SPE_NOP) { | 208 } else if (data != (memaddr)MY_SPE_NOP) { |
216 __debug_ppe("mail_check(): recv from 0x%x\n", data); | 209 __debug_ppe("mail_check(): recv from 0x%x\n", data); |
217 // post_func を先に実行しないと、systask_finish が active_queue | 210 // post_func を先に実行しないと、systask_finish が active_queue |