|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
time_event.hタイムイベント管理モジュール [詳細]
このグラフは、どのファイルから直接、間接的にインクルードされているかを示しています。 ![]()
説明タイムイベント管理モジュール
time_event.h で定義されています。 マクロ定義
型定義
time_event.h の 64 行で定義されています。
time_event.h の 54 行で定義されています。
関数
time_event.c の 165 行で定義されています。 参照先 EVTTIM_LE・EVTTIM_LT・last_index・LCHILD・TMEVT_NODE. 参照元 tmevtb_delete()・tmevtb_delete_top(). 00166 { 00167 UINT child; 00168 00169 while ((child = LCHILD(index)) <= last_index) { 00170 /* 00171 * 左右の子ノードのイベント発生時刻を比較し,早い方の 00172 * 子ノードの位置を child に設定する.以下の子ノード 00173 * は,ここで選ばれた方の子ノードのこと. 00174 */ 00175 if (child + 1 <= last_index 00176 && EVTTIM_LT(TMEVT_NODE(child + 1).time, 00177 TMEVT_NODE(child).time)) { 00178 child = child + 1; 00179 } 00180 00181 /* 00182 * 子ノードのイベント発生時刻の方が遅い(または同じ) 00183 * ならば,index が挿入位置なのでループを抜ける. 00184 */ 00185 if (EVTTIM_LE(time, TMEVT_NODE(child).time)) { 00186 break; 00187 } 00188 00189 /* 00190 * 子ノードを index の位置に移動させる. 00191 */ 00192 TMEVT_NODE(index) = TMEVT_NODE(child); 00193 TMEVT_NODE(index).tmevtb->index = index; 00194 00195 /* 00196 * index を子ノードの位置に更新. 00197 */ 00198 index = child; 00199 } 00200 return(index); 00201 }
time_event.c の 99 行で定義されています。 参照先 current_time・last_index・next_subtime・next_time・systim_offset・TIC_DENO・TIC_NUME. 参照元 kernel_start(). 00100 { 00101 systim_offset = 0; 00102 current_time = 0; 00103 #if TIC_DENO == 1 00104 next_time = current_time + TIC_NUME; 00105 #else /* TIC_DENO == 1 */ 00106 next_subtime += TIC_NUME; 00107 next_time = current_time + next_subtime / TIC_DENO; 00108 next_subtime %= TIC_DENO; 00109 #endif /* TIC_DENO == 1 */ 00110 last_index = 0; 00111 }
time_event.c の 125 行で定義されています。 参照先 EVTTIM_LE・PARENT・TMEVT_NODE. 参照元 tmevtb_delete()・tmevtb_insert(). 00126 { 00127 UINT parent; 00128 00129 while (index > 1) { 00130 /* 00131 * 親ノードのイベント発生時刻の方が早い(または同じ) 00132 * ならば,index が挿入位置なのでループを抜ける. 00133 */ 00134 parent = PARENT(index); 00135 if (EVTTIM_LE(TMEVT_NODE(parent).time, time)) { 00136 break; 00137 } 00138 00139 /* 00140 * 親ノードを index の位置に移動させる. 00141 */ 00142 TMEVT_NODE(index) = TMEVT_NODE(parent); 00143 TMEVT_NODE(index).tmevtb->index = index; 00144 00145 /* 00146 * index を親ノードの位置に更新. 00147 */ 00148 index = parent; 00149 } 00150 return(index); 00151 }
time_event.c の 239 行で定義されています。 参照先 EVTTIM_LT・time_event_block::index・last_index・PARENT・tmevt_down()・TMEVT_NODE・tmevt_up(). 参照元 tmevtb_dequeue(). 00240 { 00241 UINT index = tmevtb->index; 00242 UINT parent; 00243 EVTTIM event_time = TMEVT_NODE(last_index).time; 00244 00245 /* 00246 * 削除によりタイムイベントヒープが空になる場合は何もしない. 00247 */ 00248 if (--last_index == 0) { 00249 return; 00250 } 00251 00252 /* 00253 * 削除したノードの位置に最後のノード(last_index + 1 の位置 00254 * のノード)を挿入し,それを適切な位置へ移動させる.実際には, 00255 * 最後のノードを実際に挿入するのではなく,削除したノードの位 00256 * 置が空ノードになるので,最後のノードを挿入すべき位置へ向け 00257 * て空ノードを移動させる. 00258 * 最後のノードのイベント発生時刻が,削除したノードの親ノード 00259 * のイベント発生時刻より前の場合には,上に向かって挿入位置を 00260 * 探す.そうでない場合には,下に向かって探す. 00261 */ 00262 if (index > 1 && EVTTIM_LT(event_time, 00263 TMEVT_NODE(parent = PARENT(index)).time)) { 00264 /* 00265 * 親ノードを index の位置に移動させる. 00266 */ 00267 TMEVT_NODE(index) = TMEVT_NODE(parent); 00268 TMEVT_NODE(index).tmevtb->index = index; 00269 00270 /* 00271 * 削除したノードの親ノードから上に向かって挿入位置を 00272 * 探す. 00273 */ 00274 index = tmevt_up(parent, event_time); 00275 } 00276 else { 00277 /* 00278 * 削除したノードから下に向かって挿入位置を探す. 00279 */ 00280 index = tmevt_down(index, event_time); 00281 } 00282 00283 /* 00284 * 最後のノードを index の位置に挿入する. 00285 */ 00286 TMEVT_NODE(index) = TMEVT_NODE(last_index + 1); 00287 TMEVT_NODE(index).tmevtb->index = index; 00288 }
関数の呼び出しグラフ: ![]()
time_event.h の 183 行で定義されています。 参照先 tmevtb_delete(). 参照元 sta_cyc()・stp_cyc()・wait_cancel()・wait_complete(). 00184 { 00185 tmevtb_delete(tmevtb); 00186 }
関数の呼び出しグラフ: ![]()
time_event.h の 156 行で定義されています。 参照先 time_event_block::arg・assert・base_time・time_event_block::callback・TMAX_RELTIM・tmevtb_insert(). 参照元 dly_tsk()・make_wait_tmout(). 00157 { 00158 assert(time <= TMAX_RELTIM); 00159 00160 tmevtb->callback = callback; 00161 tmevtb->arg = arg; 00162 tmevtb_insert(tmevtb, base_time + time); 00163 }
関数の呼び出しグラフ: ![]()
time_event.h の 172 行で定義されています。 参照先 time_event_block::arg・time_event_block::callback・tmevtb_insert(). 参照元 tmevtb_enqueue_cyc(). 00173 { 00174 tmevtb->callback = callback; 00175 tmevtb->arg = arg; 00176 tmevtb_insert(tmevtb, time); 00177 }
関数の呼び出しグラフ: ![]()
time_event.c の 214 行で定義されています。 参照先 time_event_block::index・last_index・TMEVT_NODE・tmevt_up(). 参照元 tmevtb_enqueue()・tmevtb_enqueue_evttim(). 00215 { 00216 UINT index; 00217 00218 /* 00219 * last_index をインクリメントし,そこから上に挿入位置を探す. 00220 */ 00221 index = tmevt_up(++last_index, time); 00222 00223 /* 00224 * タイムイベントを index の位置に挿入する. 00225 */ 00226 TMEVT_NODE(index).time = time; 00227 TMEVT_NODE(index).tmevtb = tmevtb; 00228 tmevtb->index = index; 00229 }
関数の呼び出しグラフ: ![]()
変数
time_event.c の 93 行で定義されています。 参照元 isig_tim()・tmevt_down()・tmevt_initialize()・tmevtb_delete()・tmevtb_delete_top()・tmevtb_insert().
Copyright © 2006 by TAKAGI Nobuhisa. Copyright © 2006 by Kijineko Inc.. このページは Mon Dec 18 17:21:01 2006 に Doxygen によって生成されました。 データ入力からプログラム開発まで!様々なスキルを持ったメンバーが登録しています【@SOHO】 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||