📄 time_event.h
字号:
/* * TOPPERS/JSP Kernel * Toyohashi Open Platform for Embedded Real-Time Systems/ * Just Standard Profile Kernel * * Copyright (C) 2000,2001 by Embedded and Real-Time Systems Laboratory * Toyohashi Univ. of Technology, JAPAN * * 惧淡螟侯涪荚は·Free Software Foundation によって给山されている * GNU General Public License の Version 2 に淡揭されている掘凤か·笆 * 布の(1)×(4)の掘凤を塔たす眷圭に嘎り·塑ソフトウェア∈塑ソフトウェ * アを猖恃したものを崔むˉ笆布票じ∷を蝗脱ˇ剩澜ˇ猖恃ˇ浩芹邵∈笆布· * 网脱と钙ぶ∷することを痰浸で钓满するˉ * (1) 塑ソフトウェアをソ〖スコ〖ドの妨で网脱する眷圭には·惧淡の螟侯 * 涪山绩·この网脱掘凤および布淡の痰瘦沮惮年が·そのままの妨でソ〖 * スコ〖ド面に崔まれていることˉ * (2) 塑ソフトウェアを浩网脱材墙なバイナリコ〖ド∈リロケ〖タブルオブ * ジェクトファイルやライブラリなど∷の妨で网脱する眷圭には·网脱 * に燃うドキュメント∈网脱荚マニュアルなど∷に·惧淡の螟侯涪山绩· * この网脱掘凤および布淡の痰瘦沮惮年を非很することˉ * (3) 塑ソフトウェアを浩网脱稍材墙なバイナリコ〖ドの妨または怠达に寥 * み哈んだ妨で网脱する眷圭には·肌のいずれかの掘凤を塔たすことˉ * (a) 网脱に燃うドキュメント∈网脱荚マニュアルなど∷に·惧淡の螟侯 * 涪山绩·この网脱掘凤および布淡の痰瘦沮惮年を非很することˉ * (b) 网脱の妨轮を·侍に年める数恕によって·惧淡螟侯涪荚に鼠桂する * ことˉ * (4) 塑ソフトウェアの网脱により木儡弄または粗儡弄に栏じるいかなる禄 * 巢からも·惧淡螟侯涪荚を倘勒することˉ * * 塑ソフトウェアは·痰瘦沮で捏丁されているものであるˉ惧淡螟侯涪荚は· * 塑ソフトウェアに簇して·その努脱材墙拉も崔めて·いかなる瘦沮も乖わ * ないˉまた·塑ソフトウェアの网脱により木儡弄または粗儡弄に栏じたい * かなる禄巢に簇しても·その勒扦を砷わないˉ * * @(#) $Id: time_event.h,v 1.3 2002/03/26 08:19:38 hiro Exp $ *//* * タイムイベント瓷妄モジュ〖ル */#ifndef _TIME_EVENT_H_#define _TIME_EVENT_H_/* * イベント券栏箕癸のデ〖タ房の年盗 * * EVTTIM は·RELTIM として回年できる认跋よりも弓い认跋を山附できる涩 * 妥があるˉスタンダ〖ドプロファイルでは·RELTIM が 16bit 笆惧でなけ * ればならないため·EVTTIM は 17bit 笆惧であることが涩妥であるˉその * ため·16bit の眷圭がある UINT ではなく·UW に年盗しているˉ */typedef UW EVTTIM;/* * 陵滦箕粗∈RELTIM∷に回年できる呵络猛 */#define TMAX_RELTIM ((1u << (sizeof(EVTTIM) * 8 - 1)) - 1)/* * タイムイベントブロックのデ〖タ房の年盗 */typedef void (*CBACK)(VP); /* コ〖ルバック簇眶の房 */typedef struct time_event_block { UINT index; /* タイムイベントヒ〖プ面での疤弥 */ CBACK callback; /* コ〖ルバック簇眶 */ VP arg; /* コ〖ルバック簇眶へ畔す苞眶 */} TMEVTB;/* * タイムイベントヒ〖プ面のノ〖ドのデ〖タ房の年盗 */typedef struct time_event_node { EVTTIM time; /* イベント券栏箕癸 */ TMEVTB *tmevtb; /* 滦炳するタイムイベントブロック */} TMEVTN;/* * タイムイベントヒ〖プ∈kernel_cfg.c∷ */extern TMEVTN tmevt_heap[];/* * システム箕癸のオフセット */extern SYSTIM systim_offset;/* * 附哼のシステム箕癸∈帽疤: ミリ擅∷ * * システム弹瓢箕に 0 に介袋步され·笆惯·isig_tim が钙ばれる刨に帽拇 * に笼裁するˉset_tim によって恃构されないˉ */extern SYSTIM current_time;/* * 肌のタイムティックのシステム箕癸∈帽疤: 1ミリ擅∷ */extern SYSTIM next_time;/* * システム箕癸姥换脱恃眶∈帽疤: 1/TIM_DENOミリ擅∷ * * 肌のタイムティックのシステム箕癸の布疤峰を绩す∈惧疤峰は next_time∷ˉ * TIC_DENO が 1 の箕は·布疤峰は撅に 0 であるため·この恃眶は涩妥ないˉ */#if TIC_DENO != 1extern UINT next_subtime;#endif /* TIC_DENO != 1 *//* * 陵滦箕粗のベ〖ス箕癸∈帽疤: 1ミリ擅∷ * * 肌のタイムティックのシステム箕癸を磊り惧げた箕癸ˉTIC_DENO が 1 の * 箕は·next_time を EVTTIM に恃垂したものに办米するˉ */#if TIC_DENO == 1#define base_time ((EVTTIM) next_time)#else /* TIC_DENO == 1 */extern EVTTIM base_time;#endif /* TIC_DENO == 1 *//* * タイムイベント瓷妄モジュ〖ルの介袋步 */extern void tmevt_initialize(void);/* * タイムイベントヒ〖プへの判峡と猴近 */extern void tmevtb_insert(TMEVTB *tmevtb, EVTTIM time);extern void tmevtb_delete(TMEVTB *tmevtb);/* * タイムイベントブロックの判峡∈陵滦箕粗回年∷ * * time で回年した陵滦箕粗が沸册稿に·arg を苞眶として callback が钙 * び叫されるように·タイムイベントブロック tmevtb を判峡するˉ */Inline voidtmevtb_enqueue(TMEVTB *tmevtb, RELTIM time, CBACK callback, VP arg){ assert(time <= TMAX_RELTIM); tmevtb->callback = callback; tmevtb->arg = arg; tmevtb_insert(tmevtb, base_time + time);}/* * タイムイベントブロックの判峡∈イベント券栏箕癸回年∷ * * time で回年したイベント券栏箕癸に·arg を苞眶として callback が钙 * び叫されるように·タイムイベントブロック tmevtb を判峡するˉ */Inline voidtmevtb_enqueue_evttim(TMEVTB *tmevtb, EVTTIM time, CBACK callback, VP arg){ tmevtb->callback = callback; tmevtb->arg = arg; tmevtb_insert(tmevtb, time);}/* * タイムイベントブロックの判峡豺近 */Inline voidtmevtb_dequeue(TMEVTB *tmevtb){ tmevtb_delete(tmevtb);}#endif /* _TIME_EVENT_H_ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -