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