source: kernel/time_event.h @ 7

このファイルの 7 以降における最終更新内容7 で kominami が 2015/09/12 9:22:12 に更新しました

TOPPERS/ASP 1.9.1

ファイルサイズ: 5.7 KB
 
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 *  Ÿåµ­Ãøºîž¢ŒÔ€Ï¡€°Ê²Œ€Î(1)¡Á(4)€ÎŸò·ï€òËþ€¿€¹Ÿì¹ç€ËžÂ€ê¡€ËÜ¥œ¥Õ¥È¥Š¥§
12 *  ¥¢¡ÊËÜ¥œ¥Õ¥È¥Š¥§¥¢€ò²þÊÑ€·€¿€â€Î€òŽÞ€à¡¥°Ê²ŒÆ±€ž¡Ë€ò»ÈÍÑ¡ŠÊ£Àœ¡Š²þ
13 *  ÊÑ¡ŠºÆÇÛÉۡʰʲŒ¡€ÍøÍрȞƀ֡ˀ¹€ë€³€È€ò̵œþ€ÇµöÂú€¹€ë¡¥
14 *  (1) ËÜ¥œ¥Õ¥È¥Š¥§¥¢€ò¥œ¡Œ¥¹¥³¡Œ¥É€Î·Á€ÇÍøÍÑ€¹€ëŸì¹ç€Ë€Ï¡€Ÿåµ­€ÎÃøºî
15 *      ž¢ÉœŒš¡€€³€ÎÍøÍÑŸò·ï€ª€è€Ó²Œµ­€Î̵ÊÝŸÚµ¬Äꀬ¡€€œ€Î€Þ€Þ€Î·Á€Ç¥œ¡Œ
16 *      ¥¹¥³¡Œ¥ÉÃæ€ËŽÞ€Þ€ì€Æ€€€ë€³€È¡¥
17 *  (2) ËÜ¥œ¥Õ¥È¥Š¥§¥¢€ò¡€¥é¥€¥Ö¥é¥ê·ÁŒ°€Ê€É¡€ÂŸ€Î¥œ¥Õ¥È¥Š¥§¥¢³«È¯€Ë»È
18 *      Íрǀ­€ë·Á€ÇºÆÇÛÉÛ€¹€ëŸì¹ç€Ë€Ï¡€ºÆÇÛÉÛ€ËÈŒ€Š¥É¥­¥å¥á¥ó¥È¡ÊÍøÍÑ
19 *      ŒÔ¥Þ¥Ë¥å¥¢¥ë€Ê€É¡Ë€Ë¡€Ÿåµ­€ÎÃøºîž¢ÉœŒš¡€€³€ÎÍøÍÑŸò·ï€ª€è€Ó²Œµ­
20 *      €Î̵ÊÝŸÚµ¬Äê€ò·ÇºÜ€¹€ë€³€È¡¥
21 *  (3) ËÜ¥œ¥Õ¥È¥Š¥§¥¢€ò¡€µ¡Žï€ËÁȀ߹þ€à€Ê€É¡€ÂŸ€Î¥œ¥Õ¥È¥Š¥§¥¢³«È¯€Ë»È
22 *      Íрǀ­€Ê€€·Á€ÇºÆÇÛÉÛ€¹€ëŸì¹ç€Ë€Ï¡€Œ¡€Î€€€º€ì€«€ÎŸò·ï€òËþ€¿€¹€³
23 *      €È¡¥
24 *    (a) ºÆÇÛÉÛ€ËÈŒ€Š¥É¥­¥å¥á¥ó¥È¡ÊÍøÍьԥޥ˥奢¥ë€Ê€É¡Ë€Ë¡€Ÿåµ­€ÎÃø
25 *        ºîž¢ÉœŒš¡€€³€ÎÍøÍÑŸò·ï€ª€è€Ó²Œµ­€Î̵ÊÝŸÚµ¬Äê€ò·ÇºÜ€¹€ë€³€È¡¥
26 *    (b) ºÆÇÛÉۀηÁÂÖ€ò¡€ÊÌ€ËÄê€á€ëÊýË¡€Ë€è€Ã€Æ¡€TOPPERS¥×¥í¥ž¥§¥¯¥È€Ë
27 *        Êó¹ð€¹€ë€³€È¡¥
28 *  (4) ËÜ¥œ¥Õ¥È¥Š¥§¥¢€ÎÍøÍрˀè€êÄŸÀÜŪ€Þ€¿€ÏŽÖÀÜŪ€ËÀž€ž€ë€€€«€Ê€ë»
29 *      ³²€«€é€â¡€Ÿåµ­Ãøºîž¢ŒÔ€ª€è€ÓTOPPERS¥×¥í¥ž¥§¥¯¥È€òÌÈÀÕ€¹€ë€³€È¡¥
30 *      €Þ€¿¡€ËÜ¥œ¥Õ¥È¥Š¥§¥¢€Î¥æ¡Œ¥¶€Þ€¿€Ï¥š¥ó¥É¥æ¡Œ¥¶€«€é€Î€€€«€Ê€ëÍý
31 *      ͳ€ËŽð€Å€¯ÀÁµá€«€é€â¡€Ÿåµ­Ãøºîž¢ŒÔ€ª€è€ÓTOPPERS¥×¥í¥ž¥§¥¯¥È€ò
32 *      ÌÈÀÕ€¹€ë€³€È¡¥
33 *
34 *  ËÜ¥œ¥Õ¥È¥Š¥§¥¢€Ï¡€ÌµÊÝŸÚ€ÇÄó¶¡€µ€ì€Æ€€€ë€â€Î€Ç€¢€ë¡¥Ÿåµ­Ãøºîž¢ŒÔ€ª
35 *  €è€ÓTOPPERS¥×¥í¥ž¥§¥¯¥È€Ï¡€ËÜ¥œ¥Õ¥È¥Š¥§¥¢€ËŽØ€·€Æ¡€ÆÃÄê€Î»ÈÍÑÌÜŪ
36 *  €ËÂЀ¹€ëŬ¹çÀ­€âŽÞ€á€Æ¡€€€€«€Ê€ëÊÝŸÚ€â¹Ô€ï€Ê€€¡¥€Þ€¿¡€ËÜ¥œ¥Õ¥È¥Š¥§
37 *  ¥¢€ÎÍøÍрˀè€êÄŸÀÜŪ€Þ€¿€ÏŽÖÀÜŪ€ËÀž€ž€¿€€€«€Ê€ë»³²€ËŽØ€·€Æ€â¡€€œ
38 *  €ÎÀÕÇ€€òÉé€ï€Ê€€¡¥
39 *
40 *  $Id$
41 */
42
43/*
44 *              ¥¿¥€¥à¥€¥Ù¥ó¥ÈŽÉÍý¥â¥ž¥å¡Œ¥ë
45 */
46
47#ifndef TOPPERS_TIME_EVENT_H
48#define TOPPERS_TIME_EVENT_H
49
50/*
51 *  ¥€¥Ù¥ó¥ÈȯÀž»þ¹ï€Î¥Ç¡Œ¥¿·¿€ÎÄêµÁ
52 *
53 *  EVTTIM€Ï¡€RELTIM€È€·€Æ»ØÄê€Ç€­€ëÈϰπè€ê€â¹­€€ÈϰπòÉœžœ€Ç€­€ëɬÍ×
54 *  €¬€¢€ë¡¥ŠÌITRON4.0»ÅÍ̀Υ¹¥¿¥ó¥À¡Œ¥É¥×¥í¥Õ¥¡¥€¥ë€Ç€Ï¡€RELTIM€¬16¥Ó¥Ã
55 *  ¥È°ÊŸå€Ç€Ê€±€ì€Ð€Ê€é€Ê€€€¿€á¡€EVTTIM€Ï17¥Ó¥Ã¥È°ÊŸå€Ç€¢€ë€³€È€¬É¬Í×
56 *  €Ç€¢€ë¡¥€œ€Î€¿€á¡€16¥Ó¥Ã¥È€Ë€Ê€ëŸì¹ç€¬€¢€ëuint_t€Ç€Ï€Ê€¯¡€ulong_t€Ë
57 *  ÄêµÁ€·€Æ€€€ë¡¥
58 */
59typedef ulong_t EVTTIM;
60
61/*
62 *  ¥¿¥€¥à¥€¥Ù¥ó¥È¥Ö¥í¥Ã¥¯€Î¥Ç¡Œ¥¿·¿€ÎÄêµÁ
63 */
64typedef void    (*CBACK)(void *);       /* ¥³¡Œ¥ë¥Ð¥Ã¥¯ŽØ¿ô€Î·¿ */
65
66typedef struct time_event_block {
67        uint_t  index;                  /* ¥¿¥€¥à¥€¥Ù¥ó¥È¥Ò¡Œ¥×Ãæ€Ç€Î°ÌÃÖ */
68        CBACK   callback;               /* ¥³¡Œ¥ë¥Ð¥Ã¥¯ŽØ¿ô */
69        void    *arg;                   /* ¥³¡Œ¥ë¥Ð¥Ã¥¯ŽØ¿ô€ØÅÏ€¹°ú¿ô */
70} TMEVTB;
71
72/*
73 *  ¥¿¥€¥à¥€¥Ù¥ó¥È¥Ò¡Œ¥×Ãæ€Î¥Î¡Œ¥É€Î¥Ç¡Œ¥¿·¿€ÎÄêµÁ
74 */
75typedef struct time_event_node {
76        EVTTIM  time;                   /* ¥€¥Ù¥ó¥ÈȯÀž»þ¹ï */
77        TMEVTB  *p_tmevtb;              /* Âбþ€¹€ë¥¿¥€¥à¥€¥Ù¥ó¥È¥Ö¥í¥Ã¥¯ */
78} TMEVTN;
79
80/*
81 *  ¥¿¥€¥à¥€¥Ù¥ó¥È¥Ò¡Œ¥×¡Êkernel_cfg.c¡Ë
82 */
83extern TMEVTN   tmevt_heap[];
84
85/*
86 *  žœºß€Î¥·¥¹¥Æ¥à»þ¹ï¡Êñ°Ì: 1¥ß¥êÉáË
87 *
88 *  ¥·¥¹¥Æ¥àµ¯Æ°»þ€Ë0€ËœéŽü²œ€µ€ì¡€°Ê¹ß¡€¥¿¥€¥à¥Æ¥£¥Ã¥¯€¬¶¡µë€µ€ì€ëÅÙ€Ë
89 *  ñĎ€ËÁý²Ã€¹€ë¡¥
90 */
91extern EVTTIM   current_time;
92
93/*
94 *  ¥¿¥€¥à¥€¥Ù¥ó¥È¥Ò¡Œ¥×Ãæ€ÇÍ­žú€ÊºÇŸ®€Î¥·¥¹¥Æ¥à»þ¹ï¡Êñ°Ì: 1¥ß¥êÉáË
95 */
96extern EVTTIM   min_time;
97
98/*
99 *  Œ¡€Î¥¿¥€¥à¥Æ¥£¥Ã¥¯€Î¥·¥¹¥Æ¥à»þ¹ï¡Êñ°Ì: 1¥ß¥êÉáË
100 */
101extern EVTTIM   next_time;
102
103/*
104 *  ¥·¥¹¥Æ¥à»þ¹ïÀÑ»»ÍÑÊÑ¿ô¡Êñ°Ì: 1/TIC_DENO¥ß¥êÉáË
105 *
106 *  Œ¡€Î¥¿¥€¥à¥Æ¥£¥Ã¥¯€Î¥·¥¹¥Æ¥à»þ¹ï€Î²Œ°Ì·å€òŒš€¹¡ÊŸå°Ì·å€Ïnext_time¡Ë¡¥
107 *  TIC_DENO€¬1€Î»þ€Ï¡€²Œ°Ì·å€ÏŸï€Ë0€Ç€¢€ë€¿€á¡€€³€ÎÊÑ¿ô€ÏɬÍ׀ʀ€¡¥
108 */
109#if TIC_DENO != 1U
110extern uint_t   next_subtime;
111#endif /* TIC_DENO != 1U */
112
113/*
114 *  ÁêÂлþŽÖ€ÎŽðœà»þ¹ï¡Êñ°Ì: 1¥ß¥êÉáË
115 *
116 *  Œ¡€Î¥¿¥€¥à¥Æ¥£¥Ã¥¯€Î¥·¥¹¥Æ¥à»þ¹ï€òÀÚ€êŸå€²€¿»þ¹ï¡¥TIC_DENO€¬1€Î»þ
117 *  €Ï¡€next_time€Ë°ìÃ×€¹€ë¡¥
118 */
119#if TIC_DENO == 1U
120#define base_time       (next_time)
121#else /* TIC_DENO == 1U */
122#define base_time       (next_time + (next_subtime > 0U ? 1U : 0U))
123#endif /* TIC_DENO == 1U */
124
125/*
126 *  ¥¿¥€¥à¥€¥Ù¥ó¥È¥Ò¡Œ¥×€ÎºÇžå€Î»ÈÍÑÎΰè€Î¥€¥ó¥Ç¥Ã¥¯¥¹
127 *
128 *  ¥¿¥€¥à¥€¥Ù¥ó¥È¥Ò¡Œ¥×€ËÅÐÏ¿€µ€ì€Æ€€€ë¥¿¥€¥à¥€¥Ù¥ó¥È€Î¿ô€Ë°ìÃ×€¹€ë¡¥
129 */
130extern uint_t   last_index;
131
132/*
133 *  ¥¿¥€¥à¥€¥Ù¥ó¥ÈŽÉÍý¥â¥ž¥å¡Œ¥ë€ÎœéŽü²œ
134 */
135extern void     initialize_tmevt(void);
136
137/*
138 *  ¥¿¥€¥à¥€¥Ù¥ó¥È€ÎÁÞÆþ°ÌÃÖ€Îõº÷
139 */
140extern uint_t   tmevt_up(uint_t index, EVTTIM time);
141extern uint_t   tmevt_down(uint_t index, EVTTIM time);
142
143/*
144 *  ¥¿¥€¥à¥€¥Ù¥ó¥È¥Ò¡Œ¥×€Ø€ÎÅÐÏ¿€Èºïœü
145 */
146extern void     tmevtb_insert(TMEVTB *p_tmevtb, EVTTIM time);
147extern void     tmevtb_delete(TMEVTB *p_tmevtb);
148
149/*
150 *  ¥¿¥€¥à¥€¥Ù¥ó¥È¥Ö¥í¥Ã¥¯€ÎÅÐÏ¿¡ÊÁêÂлþŽÖ»ØÄê¡Ë
151 *
152 *  time€Ç»ØÄꀷ€¿ÁêÂлþŽÖ€¬·Ð²á€·€¿žå€Ë¡€arg€ò°ú¿ô€È€·€Æcallback€¬žÆ
153 *  €ÓœÐ€µ€ì€ë€è€Š€Ë¡€p_tmevtb€Ç»ØÄꀷ€¿¥¿¥€¥à¥€¥Ù¥ó¥È¥Ö¥í¥Ã¥¯€òÅÐÏ¿€¹
154 *  €ë¡¥
155 * 
156 */
157Inline void
158tmevtb_enqueue(TMEVTB *p_tmevtb, RELTIM time, CBACK callback, void *arg)
159{
160        assert(time <= TMAX_RELTIM);
161
162        p_tmevtb->callback = callback;
163        p_tmevtb->arg = arg;
164        tmevtb_insert(p_tmevtb, base_time + time);
165}
166
167/*
168 *  ¥¿¥€¥à¥€¥Ù¥ó¥È¥Ö¥í¥Ã¥¯€ÎÅÐÏ¿¡Ê¥€¥Ù¥ó¥ÈȯÀž»þ¹ï»ØÄê¡Ë
169 *
170 *  time€Ç»ØÄꀷ€¿¥€¥Ù¥ó¥ÈȯÀž»þ¹ï€Ë¡€arg€ò°ú¿ô€È€·€Æcallback€¬žÆ€ÓœÐ
171 *  €µ€ì€ë€è€Š€Ë¡€p_tmevtb€Ç»ØÄꀷ€¿¥¿¥€¥à¥€¥Ù¥ó¥È¥Ö¥í¥Ã¥¯€òÅÐÏ¿€¹€ë¡¥
172 */
173Inline void
174tmevtb_enqueue_evttim(TMEVTB *p_tmevtb, EVTTIM time, CBACK callback, void *arg)
175{
176        p_tmevtb->callback = callback;
177        p_tmevtb->arg = arg;
178        tmevtb_insert(p_tmevtb, time);
179}
180
181/*
182 *  ¥¿¥€¥à¥€¥Ù¥ó¥È¥Ö¥í¥Ã¥¯€ÎÅÐÏ¿²òœü
183 */
184Inline void
185tmevtb_dequeue(TMEVTB *p_tmevtb)
186{
187        tmevtb_delete(p_tmevtb);
188}
189
190/*
191 *  ¥¿¥€¥à¥€¥Ù¥ó¥È€Þ€Ç€Î»Ä€ê»þŽÖ€Î·×»»
192 */
193extern RELTIM   tmevt_lefttim(TMEVTB *p_tmevtb);
194
195/*
196 *  ¥¿¥€¥à¥Æ¥£¥Ã¥¯€Î¶¡µë
197 */
198extern void     signal_time(void);
199
200#endif /* TOPPERS_TIME_EVENT_H */
詳しい使い方は TracBrowser を参照してください。