source: UsbWattMeter/trunk/asp_dcre/kernel/time_event.h@ 164

Last change on this file since 164 was 164, checked in by coas-nagasima, 8 years ago

TOPPERS/ECNLサンプルアプリ「USB充電器電力計」を追加

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
  • Property svn:mime-type set to text/x-chdr
File size: 5.7 KB
Line 
1/*
2 * TOPPERS/ASP Kernel
3 * Toyohashi Open Platform for Embedded Real-Time Systems/
4 * Advanced Standard Profile Kernel
5 *
6 * Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
7 * Toyohashi Univ. of Technology, JAPAN
8 * Copyright (C) 2005-2010 by Embedded and Real-Time Systems Laboratory
9 * Graduate School of Information Science, Nagoya Univ., JAPAN
10 *
11 * ã‹L’˜ìŒ ŽÒ‚́CˆÈ‰º‚Ì(1)`(4)‚ÌðŒ‚ð–ž‚½‚·ê‡‚ÉŒÀ‚èC–{ƒ\ƒtƒgƒEƒF
12 * ƒAi–{ƒ\ƒtƒgƒEƒFƒA‚ð‰ü•Ï‚µ‚½‚à‚Ì‚ðŠÜ‚ށDˆÈ‰º“¯‚¶j‚ðŽg—pE•¡»E‰ü
13 * •ÏEÄ”z•ziˆÈ‰ºC—˜—p‚ƌĂԁj‚·‚邱‚Ƃ𖳏ž‚Å‹–‘ø‚·‚éD
14 * (1) –{ƒ\ƒtƒgƒEƒFƒA‚ðƒ\[ƒXƒR[ƒh‚ÌŒ`‚Å—˜—p‚·‚éê‡‚ɂ́Cã‹L‚Ì’˜ì
15 * Œ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’肪C‚»‚Ì‚Ü‚Ü‚ÌŒ`‚Ń\[
16 * ƒXƒR[ƒh’†‚ÉŠÜ‚Ü‚ê‚Ä‚¢‚邱‚ƁD
17 * (2) –{ƒ\ƒtƒgƒEƒFƒA‚ðCƒ‰ƒCƒuƒ‰ƒŠŒ`Ž®‚ȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg
18 * —p‚Å‚«‚éŒ`‚ōĔz•z‚·‚éê‡‚ɂ́CÄ”z•z‚É”º‚¤ƒhƒLƒ…
19ƒƒ“ƒgi—˜—p
20 * ŽÒƒ}ƒjƒ…
21ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜ìŒ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L
22 * ‚Ì–³•ÛØ‹K’è‚ðŒfÚ‚·‚邱‚ƁD
23 * (3) –{ƒ\ƒtƒgƒEƒFƒA‚ðC‹@Ší‚É‘g‚ݍž‚ނȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg
24 * —p‚Å‚«‚È‚¢Œ`‚ōĔz•z‚·‚éê‡‚ɂ́CŽŸ‚Ì‚¢‚¸‚ê‚©‚ÌðŒ‚ð–ž‚½‚·‚±
25 * ‚ƁD
26 * (a) Ä”z•z‚É”º‚¤ƒhƒLƒ…
27ƒƒ“ƒgi—˜—pŽÒƒ}ƒjƒ…
28ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜
29 * ìŒ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’è‚ðŒfÚ‚·‚邱‚ƁD
30 * (b) Ä”z•z‚ÌŒ`‘Ô‚ðC•Ê‚É’è‚ß‚é•û–@‚É‚æ‚Á‚āCTOPPERSƒvƒƒWƒFƒNƒg‚É
31 * •ñ‚·‚邱‚ƁD
32 * (4) –{ƒ\ƒtƒgƒEƒFƒA‚Ì—˜—p‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚é‚¢‚©‚Ȃ鑹
33 * ŠQ‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð–Ɛӂ·‚邱‚ƁD
34 * ‚Ü‚½C–{ƒ\ƒtƒgƒEƒFƒA‚̃†[ƒU‚Ü‚½‚̓Gƒ“ƒhƒ†[ƒU‚©‚ç‚Ì‚¢‚©‚Ȃ闝
35 * —R‚ÉŠî‚­¿‹‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð
36 * –Ɛӂ·‚邱‚ƁD
37 *
38 * –{ƒ\ƒtƒgƒEƒFƒA‚́C–³•ÛØ‚Å’ñ‹Ÿ‚³‚ê‚Ä‚¢‚é‚à‚Ì‚Å‚ ‚éDã‹L’˜ìŒ ŽÒ‚¨
39 * ‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚́C–{ƒ\ƒtƒgƒEƒFƒA‚ÉŠÖ‚µ‚āC“Á’è‚ÌŽg—p–Ú“I
40 * ‚ɑ΂·‚é“K‡«‚àŠÜ‚߂āC‚¢‚©‚È‚é•ÛØ‚às‚í‚È‚¢D‚Ü‚½C–{ƒ\ƒtƒgƒEƒF
41 * ƒA‚Ì—˜—p‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚½‚¢‚©‚Ȃ鑹ŠQ‚ÉŠÖ‚µ‚Ä‚àC‚»
42 * ‚̐ӔC‚𕉂í‚È‚¢D
43 *
44 * $Id: time_event.h 164 2016-03-07 11:33:50Z coas-nagasima $
45 */
46
47/*
48 * ƒ^ƒCƒ€ƒCƒxƒ“ƒgŠÇ—ƒ‚ƒWƒ…
49[ƒ‹
50 */
51
52#ifndef TOPPERS_TIME_EVENT_H
53#define TOPPERS_TIME_EVENT_H
54
55/*
56 * ƒCƒxƒ“ƒg”­¶Žž‚̃f[ƒ^Œ^‚Ì’è‹`
57 *
58 * EVTTIM‚́CRELTIM‚Æ‚µ‚ÄŽw’è‚Å‚«‚é”͈͂æ‚è‚àL‚¢”͈͂ð•\Œ»‚Å‚«‚é•K—v
59 * ‚ª‚ ‚éDƒÊITRON4.0Žd—l‚̃Xƒ^ƒ“ƒ_[ƒhƒvƒƒtƒ@ƒCƒ‹‚ł́CRELTIM‚ª16ƒrƒb
60 * ƒgˆÈã‚Å‚È‚¯‚ê‚΂Ȃç‚È‚¢‚½‚߁CEVTTIM‚Í17ƒrƒbƒgˆÈã‚Å‚ ‚邱‚Æ‚ª•K—v
61 * ‚Å‚ ‚éD‚»‚Ì‚½‚߁C16ƒrƒbƒg‚É‚È‚éê‡‚ª‚ ‚éuint_t‚Å‚Í‚È‚­Culong_t‚É
62 * ’è‹`‚µ‚Ä‚¢‚éD
63 */
64typedef ulong_t EVTTIM;
65
66/*
67 * ƒ^ƒCƒ€ƒCƒxƒ“ƒgƒuƒƒbƒN‚̃f[ƒ^Œ^‚Ì’è‹`
68 */
69typedef void (*CBACK)(void *); /* ƒR[ƒ‹ƒoƒbƒNŠÖ”‚ÌŒ^ */
70
71typedef struct time_event_block {
72 uint_t index; /* ƒ^ƒCƒ€ƒCƒxƒ“ƒgƒq[ƒv’†‚ł̈ʒu */
73 CBACK callback; /* ƒR[ƒ‹ƒoƒbƒNŠÖ” */
74 void *arg; /* ƒR[ƒ‹ƒoƒbƒNŠÖ”‚Ö“n‚·ˆø” */
75} TMEVTB;
76
77/*
78 * ƒ^ƒCƒ€ƒCƒxƒ“ƒgƒq[ƒv’†‚̃m[ƒh‚̃f[ƒ^Œ^‚Ì’è‹`
79 */
80typedef struct time_event_node {
81 EVTTIM time; /* ƒCƒxƒ“ƒg”­¶Žž */
82 TMEVTB *p_tmevtb; /* ‘Ήž‚·‚éƒ^ƒCƒ€ƒCƒxƒ“ƒgƒuƒƒbƒN */
83} TMEVTN;
84
85/*
86 * ƒ^ƒCƒ€ƒCƒxƒ“ƒgƒq[ƒvikernel_cfg.cj
87 */
88extern TMEVTN tmevt_heap[];
89
90/*
91 * Œ»Ý‚̃VƒXƒeƒ€Žži’PˆÊ: 1ƒ~ƒŠ•bj
92 *
93 * ƒVƒXƒeƒ€‹N“®Žž‚É0‚ɏ‰Šú‰»‚³‚êCˆÈ~Cƒ^ƒCƒ€ƒeƒBƒbƒN‚ª‹Ÿ‹‹‚³‚ê‚é“x‚É
94 * ’P’²‚É‘‰Á‚·‚éD
95 */
96extern EVTTIM current_time;
97
98/*
99 * ƒ^ƒCƒ€ƒCƒxƒ“ƒgƒq[ƒv’†‚Å—LŒø‚ȍŏ¬‚̃VƒXƒeƒ€Žži’PˆÊ: 1ƒ~ƒŠ•bj
100 */
101extern EVTTIM min_time;
102
103/*
104 * ŽŸ‚̃^ƒCƒ€ƒeƒBƒbƒN‚̃VƒXƒeƒ€Žži’PˆÊ: 1ƒ~ƒŠ•bj
105 */
106extern EVTTIM next_time;
107
108/*
109 * ƒVƒXƒeƒ€ŽžÏŽZ—p•Ï”i’PˆÊ: 1/TIC_DENOƒ~ƒŠ•bj
110 *
111 * ŽŸ‚̃^ƒCƒ€ƒeƒBƒbƒN‚̃VƒXƒeƒ€Žž‚̉ºˆÊŒ…
112‚ðŽ¦‚·iãˆÊŒ…
113‚Ínext_timejD
114 * TIC_DENO‚ª1‚ÌŽž‚́C‰ºˆÊŒ…
115‚͏í‚É0‚Å‚ ‚邽‚߁C‚±‚̕ϐ”‚Í•K—v‚È‚¢D
116 */
117#if TIC_DENO != 1U
118extern uint_t next_subtime;
119#endif /* TIC_DENO != 1U */
120
121/*
122 * ‘Š‘ÎŽžŠÔ‚̊Žži’PˆÊ: 1ƒ~ƒŠ•bj
123 *
124 * ŽŸ‚̃^ƒCƒ€ƒeƒBƒbƒN‚̃VƒXƒeƒ€Žž‚ðØ‚èã‚°‚½ŽžDTIC_DENO‚ª1‚ÌŽž
125 * ‚́Cnext_time‚Ɉê’v‚·‚éD
126 */
127#if TIC_DENO == 1U
128#define base_time (next_time)
129#else /* TIC_DENO == 1U */
130#define base_time (next_time + (next_subtime > 0U ? 1U : 0U))
131#endif /* TIC_DENO == 1U */
132
133/*
134 * ƒ^ƒCƒ€ƒCƒxƒ“ƒgƒq[ƒv‚̍Ōã‚ÌŽg—p—̈æ‚̃Cƒ“ƒfƒbƒNƒX
135 *
136 * ƒ^ƒCƒ€ƒCƒxƒ“ƒgƒq[ƒv‚É“o˜^‚³‚ê‚Ä‚¢‚éƒ^ƒCƒ€ƒCƒxƒ“ƒg‚̐”‚Ɉê’v‚·‚éD
137 */
138extern uint_t last_index;
139
140/*
141 * ƒ^ƒCƒ€ƒCƒxƒ“ƒgŠÇ—ƒ‚ƒWƒ…
142[ƒ‹‚̏‰Šú‰»
143 */
144extern void initialize_tmevt(void);
145
146/*
147 * ƒ^ƒCƒ€ƒCƒxƒ“ƒg‚Ì‘}“üˆÊ’u‚Ì’Tõ
148 */
149extern uint_t tmevt_up(uint_t index, EVTTIM time);
150extern uint_t tmevt_down(uint_t index, EVTTIM time);
151
152/*
153 * ƒ^ƒCƒ€ƒCƒxƒ“ƒgƒq[ƒv‚Ö‚Ì“o˜^‚ƍ폜
154 */
155extern void tmevtb_insert(TMEVTB *p_tmevtb, EVTTIM time);
156extern void tmevtb_delete(TMEVTB *p_tmevtb);
157
158/*
159 * ƒ^ƒCƒ€ƒCƒxƒ“ƒgƒuƒƒbƒN‚Ì“o˜^i‘Š‘ÎŽžŠÔŽw’èj
160 *
161 * time‚ÅŽw’肵‚½‘Š‘ÎŽžŠÔ‚ªŒo‰ß‚µ‚½Œã‚ɁCarg‚ðˆø”‚Æ‚µ‚Äcallback‚ªŒÄ
162 * ‚яo‚³‚ê‚é‚悤‚ɁCp_tmevtb‚ÅŽw’肵‚½ƒ^ƒCƒ€ƒCƒxƒ“ƒgƒuƒƒbƒN‚ð“o˜^‚·
163 * ‚éD
164 *
165 */
166Inline void
167tmevtb_enqueue(TMEVTB *p_tmevtb, RELTIM time, CBACK callback, void *arg)
168{
169 assert(time <= TMAX_RELTIM);
170
171 p_tmevtb->callback = callback;
172 p_tmevtb->arg = arg;
173 tmevtb_insert(p_tmevtb, base_time + time);
174}
175
176/*
177 * ƒ^ƒCƒ€ƒCƒxƒ“ƒgƒuƒƒbƒN‚Ì“o˜^iƒCƒxƒ“ƒg”­¶ŽžŽw’èj
178 *
179 * time‚ÅŽw’肵‚½ƒCƒxƒ“ƒg”­¶Žž‚ɁCarg‚ðˆø”‚Æ‚µ‚Äcallback‚ªŒÄ‚яo
180 * ‚³‚ê‚é‚悤‚ɁCp_tmevtb‚ÅŽw’肵‚½ƒ^ƒCƒ€ƒCƒxƒ“ƒgƒuƒƒbƒN‚ð“o˜^‚·‚éD
181 */
182Inline void
183tmevtb_enqueue_evttim(TMEVTB *p_tmevtb, EVTTIM time, CBACK callback, void *arg)
184{
185 p_tmevtb->callback = callback;
186 p_tmevtb->arg = arg;
187 tmevtb_insert(p_tmevtb, time);
188}
189
190/*
191 * ƒ^ƒCƒ€ƒCƒxƒ“ƒgƒuƒƒbƒN‚Ì“o˜^‰ðœ
192 */
193Inline void
194tmevtb_dequeue(TMEVTB *p_tmevtb)
195{
196 tmevtb_delete(p_tmevtb);
197}
198
199/*
200 * ƒ^ƒCƒ€ƒCƒxƒ“ƒg‚Ü‚Å‚ÌŽc‚莞ŠÔ‚ÌŒvŽZ
201 */
202extern RELTIM tmevt_lefttim(TMEVTB *p_tmevtb);
203
204/*
205 * ƒ^ƒCƒ€ƒeƒBƒbƒN‚Ì‹Ÿ‹‹
206 */
207extern void signal_time(void);
208
209#endif /* TOPPERS_TIME_EVENT_H */
Note: See TracBrowser for help on using the repository browser.