|
|
time_event.h説明を見る。00001 /* 00002 * TOPPERS/FDMP Kernel 00003 * Toyohashi Open Platform for Embedded Real-Time Systems/ 00004 * Function Distributed Multiprocessor Kernel 00005 * 00006 * Copyright (C) 2000-2004 by Embedded and Real-Time Systems Laboratory 00007 * Toyohashi Univ. of Technology, JAPAN 00008 * Copyright (C) 2005 by Embedded and Real-Time Systems Laboratory 00009 * Graduate School of Information Science, Nagoya Univ., JAPAN 00010 * 00011 * 上記著作権者は,以下の (1)〜(4) の条件か,Free Software Foundation 00012 * によって公表されている GNU General Public License の Version 2 に記 00013 * 述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア 00014 * を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下, 00015 * 利用と呼ぶ)することを無償で許諾する. 00016 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 00017 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー 00018 * スコード中に含まれていること. 00019 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使 00020 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用 00021 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記 00022 * の無保証規定を掲載すること. 00023 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使 00024 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ 00025 * と. 00026 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著 00027 * 作権表示,この利用条件および下記の無保証規定を掲載すること. 00028 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに 00029 * 報告すること. 00030 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 00031 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること. 00032 * 00033 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 00034 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も 00035 * 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直 00036 * 接的または間接的に生じたいかなる損害に関しても,その責任を負わない. 00037 * 00038 * @(#) $Id: time_event.h,v 1.1 2005/04/03 13:33:19 honda Exp $ 00039 */ 00040 00046 #ifndef _TIME_EVENT_H_ 00047 #define _TIME_EVENT_H_ 00048 00052 typedef struct time_event_node TMEVTN; 00053 typedef struct time_event_block TMEVTB; 00054 00055 #include "task.h" 00056 #include "class.h" 00057 00066 typedef UW EVTTIM; 00067 00071 #define TMAX_RELTIM ((((EVTTIM) 1) << (sizeof(EVTTIM) * CHAR_BIT - 1)) - 1) 00072 00076 typedef void (*CBACK)(VP); /* コールバック関数の型 */ 00077 00078 struct time_event_block { 00079 UINT index; /* タイムイベントヒープ中での位置 */ 00080 CBACK callback; /* コールバック関数 */ 00081 VP arg; /* コールバック関数へ渡す引数 */ 00082 }; 00083 00087 struct time_event_node { 00088 EVTTIM time; /* イベント発生時刻 */ 00089 TMEVTB *tmevtb; /* 対応するタイムイベントブロック */ 00090 }; 00091 00095 extern TMEVTN tmevt_heap[]; 00096 00100 extern SYSTIM systim_offset; 00101 00108 extern SYSTIM current_time; 00109 00113 extern SYSTIM next_time; 00114 00115 /* 00116 * システム時刻積算用変数(単位: 1/TIM_DENOミリ秒) 00117 * 00118 * 次のタイムティックのシステム時刻の下位桁を示す(上位桁は next_time). 00119 * TIC_DENO が 1 の時は,下位桁は常に 0 であるため,この変数は必要ない. 00120 */ 00121 #if TIC_DENO != 1 00122 extern UINT next_subtime; 00123 #endif /* TIC_DENO != 1 */ 00124 00125 /* 00126 * 相対時間のベース時刻(単位: 1ミリ秒) 00127 * 00128 * 次のタイムティックのシステム時刻を切り上げた時刻.TIC_DENO が 1 の 00129 * 時は,next_time を EVTTIM に変換したものに一致する. 00130 */ 00131 #if TIC_DENO == 1 00132 #define base_time ((EVTTIM) next_time) 00133 #else /* TIC_DENO == 1 */ 00134 #define base_time ((EVTTIM)(next_time + (next_subtime > 0 ? 1 : 0))) 00135 #endif /* TIC_DENO == 1 */ 00136 00142 extern UINT last_index; 00143 00147 extern void tmevt_initialize(void); 00148 00152 extern UINT tmevt_up(CCB *ccb, UINT index, EVTTIM time); 00153 extern UINT tmevt_down(CCB *ccb, UINT index, EVTTIM time); 00154 00158 extern void tmevtb_insert(CCB *ccb, TMEVTB *tmevtb, EVTTIM time); 00159 extern void tmevtb_delete(CCB *ccb, TMEVTB *tmevtb); 00160 00161 00168 Inline void 00169 tmevtb_enqueue(CCB *ccb, TMEVTB *tmevtb, RELTIM time, CBACK callback, VP arg) 00170 { 00171 assert(time <= TMAX_RELTIM); 00172 00173 tmevtb->callback = callback; 00174 tmevtb->arg = arg; 00175 tmevtb_insert(ccb, tmevtb, base_time + time); 00176 } 00177 00184 Inline void 00185 tmevtb_enqueue_evttim(CCB *ccb, TMEVTB *tmevtb, EVTTIM time, CBACK callback, VP arg) 00186 { 00187 tmevtb->callback = callback; 00188 tmevtb->arg = arg; 00189 tmevtb_insert(ccb, tmevtb, time); 00190 } 00191 00192 00196 Inline void 00197 tmevtb_dequeue(CCB *ccb, TMEVTB *tmevtb) 00198 { 00199 tmevtb_delete(ccb, tmevtb); 00200 } 00201 00202 #endif /* _TIME_EVENT_H_ */ Copyright © 2006 by TAKAGI Nobuhisa. このページは Mon Apr 3 23:49:13 2006 に Doxygen によって生成されました。 |