source: kernel/eventflag.c @ 7

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

TOPPERS/ASP 1.9.1

ファイルサイズ: 10.9 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-2011 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#include "kernel_impl.h"
48#include "check.h"
49#include "task.h"
50#include "wait.h"
51#include "eventflag.h"
52
53/*
54 *  ¥È¥ì¡Œ¥¹¥í¥°¥Þ¥¯¥í€Î¥Ç¥Õ¥©¥ë¥ÈÄêµÁ
55 */
56#ifndef LOG_SET_FLG_ENTER
57#define LOG_SET_FLG_ENTER(flgid, setptn)
58#endif /* LOG_SET_FLG_ENTER */
59
60#ifndef LOG_SET_FLG_LEAVE
61#define LOG_SET_FLG_LEAVE(ercd)
62#endif /* LOG_SET_FLG_LEAVE */
63
64#ifndef LOG_ISET_FLG_ENTER
65#define LOG_ISET_FLG_ENTER(flgid, setptn)
66#endif /* LOG_ISET_FLG_ENTER */
67
68#ifndef LOG_ISET_FLG_LEAVE
69#define LOG_ISET_FLG_LEAVE(ercd)
70#endif /* LOG_ISET_FLG_LEAVE */
71
72#ifndef LOG_CLR_FLG_ENTER
73#define LOG_CLR_FLG_ENTER(flgid, clrptn)
74#endif /* LOG_CLR_FLG_ENTER */
75
76#ifndef LOG_CLR_FLG_LEAVE
77#define LOG_CLR_FLG_LEAVE(ercd)
78#endif /* LOG_CLR_FLG_LEAVE */
79
80#ifndef LOG_WAI_FLG_ENTER
81#define LOG_WAI_FLG_ENTER(flgid, waiptn, wfmode, p_flgptn)
82#endif /* LOG_WAI_FLG_ENTER */
83
84#ifndef LOG_WAI_FLG_LEAVE
85#define LOG_WAI_FLG_LEAVE(ercd, flgptn)
86#endif /* LOG_WAI_FLG_LEAVE */
87
88#ifndef LOG_POL_FLG_ENTER
89#define LOG_POL_FLG_ENTER(flgid, waiptn, wfmode, p_flgptn)
90#endif /* LOG_POL_FLG_ENTER */
91
92#ifndef LOG_POL_FLG_LEAVE
93#define LOG_POL_FLG_LEAVE(ercd, flgptn)
94#endif /* LOG_POL_FLG_LEAVE */
95
96#ifndef LOG_TWAI_FLG_ENTER
97#define LOG_TWAI_FLG_ENTER(flgid, waiptn, wfmode, p_flgptn, tmout)
98#endif /* LOG_TWAI_FLG_ENTER */
99
100#ifndef LOG_TWAI_FLG_LEAVE
101#define LOG_TWAI_FLG_LEAVE(ercd, flgptn)
102#endif /* LOG_TWAI_FLG_LEAVE */
103
104#ifndef LOG_INI_FLG_ENTER
105#define LOG_INI_FLG_ENTER(flgid)
106#endif /* LOG_INI_FLG_ENTER */
107
108#ifndef LOG_INI_FLG_LEAVE
109#define LOG_INI_FLG_LEAVE(ercd)
110#endif /* LOG_INI_FLG_LEAVE */
111
112#ifndef LOG_REF_FLG_ENTER
113#define LOG_REF_FLG_ENTER(flgid, pk_rflg)
114#endif /* LOG_REF_FLG_ENTER */
115
116#ifndef LOG_REF_FLG_LEAVE
117#define LOG_REF_FLG_LEAVE(ercd, pk_rflg)
118#endif /* LOG_REF_FLG_LEAVE */
119
120/*
121 *  ¥€¥Ù¥ó¥È¥Õ¥é¥°€Î¿ô
122 */
123#define tnum_flg        ((uint_t)(tmax_flgid - TMIN_FLGID + 1))
124
125/*
126 *  ¥€¥Ù¥ó¥È¥Õ¥é¥°ID€«€é¥€¥Ù¥ó¥È¥Õ¥é¥°ŽÉÍý¥Ö¥í¥Ã¥¯€òŒè€êœÐ€¹€¿€á€Î¥Þ¥¯¥í
127 */
128#define INDEX_FLG(flgid)        ((uint_t)((flgid) - TMIN_FLGID))
129#define get_flgcb(flgid)        (&(flgcb_table[INDEX_FLG(flgid)]))
130
131/*
132 *  ¥€¥Ù¥ó¥È¥Õ¥é¥°µ¡Çœ€ÎœéŽü²œ
133 */
134#ifdef TOPPERS_flgini
135
136void
137initialize_eventflag(void)
138{
139        uint_t  i;
140        FLGCB   *p_flgcb;
141
142        for (i = 0; i < tnum_flg; i++) {
143                p_flgcb = &(flgcb_table[i]);
144                queue_initialize(&(p_flgcb->wait_queue));
145                p_flgcb->p_flginib = &(flginib_table[i]);
146                p_flgcb->flgptn = p_flgcb->p_flginib->iflgptn;
147        }
148}
149
150#endif /* TOPPERS_flgini */
151
152/*
153 *  ¥€¥Ù¥ó¥È¥Õ¥é¥°ÂÔ€Á²òœüŸò·ï€Î¥Á¥§¥Ã¥¯
154 */
155#ifdef TOPPERS_flgcnd
156
157bool_t
158check_flg_cond(FLGCB *p_flgcb, FLGPTN waiptn, MODE wfmode, FLGPTN *p_flgptn)
159{
160        if ((wfmode & TWF_ORW) != 0U ? (p_flgcb->flgptn & waiptn) != 0U
161                                                                        : (p_flgcb->flgptn & waiptn) == waiptn) {
162                *p_flgptn = p_flgcb->flgptn;
163                if ((p_flgcb->p_flginib->flgatr & TA_CLR) != 0U) {
164                        p_flgcb->flgptn = 0U;
165                }
166                return(true);
167        }
168        return(false);
169}
170
171#endif /* TOPPERS_flgcnd */
172
173/*
174 *  ¥€¥Ù¥ó¥È¥Õ¥é¥°€Î¥»¥Ã¥È
175 */
176#ifdef TOPPERS_set_flg
177
178ER
179set_flg(ID flgid, FLGPTN setptn)
180{
181        FLGCB   *p_flgcb;
182        QUEUE   *p_queue;
183        TCB             *p_tcb;
184        WINFO_FLG *p_winfo_flg;
185        bool_t  dspreq = false;
186        ER              ercd;
187
188        LOG_SET_FLG_ENTER(flgid, setptn);
189        CHECK_TSKCTX_UNL();
190        CHECK_FLGID(flgid);
191        p_flgcb = get_flgcb(flgid);
192
193        t_lock_cpu();
194        p_flgcb->flgptn |= setptn;
195        p_queue = p_flgcb->wait_queue.p_next;
196        while (p_queue != &(p_flgcb->wait_queue)) {
197                p_tcb = (TCB *) p_queue;
198                p_queue = p_queue->p_next;
199                p_winfo_flg = (WINFO_FLG *)(p_tcb->p_winfo);
200                if (check_flg_cond(p_flgcb, p_winfo_flg->waiptn,
201                                                        p_winfo_flg->wfmode, &(p_winfo_flg->flgptn))) {
202                        queue_delete(&(p_tcb->task_queue));
203                        if (wait_complete(p_tcb)) {
204                                dspreq = true;
205                        }
206                        if ((p_flgcb->p_flginib->flgatr & TA_CLR) != 0U) {
207                                break;
208                        }
209                }
210        }
211        if (dspreq) {
212                dispatch();
213        }
214        ercd = E_OK;
215        t_unlock_cpu();
216
217  error_exit:
218        LOG_SET_FLG_LEAVE(ercd);
219        return(ercd);
220}
221
222#endif /* TOPPERS_set_flg */
223
224/*
225 *  ¥€¥Ù¥ó¥È¥Õ¥é¥°€Î¥»¥Ã¥È¡ÊÈ󥿥¹¥¯¥³¥ó¥Æ¥­¥¹¥ÈÍÑ¡Ë
226 */
227#ifdef TOPPERS_iset_flg
228
229ER
230iset_flg(ID flgid, FLGPTN setptn)
231{
232        FLGCB   *p_flgcb;
233        QUEUE   *p_queue;
234        TCB             *p_tcb;
235        WINFO_FLG *p_winfo_flg;
236        ER              ercd;
237
238        LOG_ISET_FLG_ENTER(flgid, setptn);
239        CHECK_INTCTX_UNL();
240        CHECK_FLGID(flgid);
241        p_flgcb = get_flgcb(flgid);
242
243        i_lock_cpu();
244        p_flgcb->flgptn |= setptn;
245        p_queue = p_flgcb->wait_queue.p_next;
246        while (p_queue != &(p_flgcb->wait_queue)) {
247                p_tcb = (TCB *) p_queue;
248                p_queue = p_queue->p_next;
249                p_winfo_flg = (WINFO_FLG *)(p_tcb->p_winfo);
250                if (check_flg_cond(p_flgcb, p_winfo_flg->waiptn,
251                                                        p_winfo_flg->wfmode, &(p_winfo_flg->flgptn))) {
252                        queue_delete(&(p_tcb->task_queue));
253                        if (wait_complete(p_tcb)) {
254                                reqflg = true;
255                        }
256                        if ((p_flgcb->p_flginib->flgatr & TA_CLR) != 0U) {
257                                break;
258                        }
259                }
260        }
261        ercd = E_OK;
262        i_unlock_cpu();
263
264  error_exit:
265        LOG_ISET_FLG_LEAVE(ercd);
266        return(ercd);
267}
268
269#endif /* TOPPERS_iset_flg */
270
271/*
272 *  ¥€¥Ù¥ó¥È¥Õ¥é¥°€Î¥¯¥ê¥¢
273 */
274#ifdef TOPPERS_clr_flg
275
276ER
277clr_flg(ID flgid, FLGPTN clrptn)
278{
279        FLGCB   *p_flgcb;
280        ER              ercd;
281
282        LOG_CLR_FLG_ENTER(flgid, clrptn);
283        CHECK_TSKCTX_UNL();
284        CHECK_FLGID(flgid);
285        p_flgcb = get_flgcb(flgid);
286
287        t_lock_cpu();
288        p_flgcb->flgptn &= clrptn;
289        ercd = E_OK;
290        t_unlock_cpu();
291
292  error_exit:
293        LOG_CLR_FLG_LEAVE(ercd);
294        return(ercd);
295}
296
297#endif /* TOPPERS_clr_flg */
298
299/*
300 *  ¥€¥Ù¥ó¥È¥Õ¥é¥°ÂÔ€Á
301 */
302#ifdef TOPPERS_wai_flg
303
304ER
305wai_flg(ID flgid, FLGPTN waiptn, MODE wfmode, FLGPTN *p_flgptn)
306{
307        FLGCB   *p_flgcb;
308        WINFO_FLG winfo_flg;
309        ER              ercd;
310
311        LOG_WAI_FLG_ENTER(flgid, waiptn, wfmode, p_flgptn);
312        CHECK_DISPATCH();
313        CHECK_FLGID(flgid);
314        CHECK_PAR(waiptn != 0U);
315        CHECK_PAR(wfmode == TWF_ORW || wfmode == TWF_ANDW);
316        p_flgcb = get_flgcb(flgid);
317
318        t_lock_cpu();
319        if ((p_flgcb->p_flginib->flgatr & TA_WMUL) == 0U
320                                        && !queue_empty(&(p_flgcb->wait_queue))) {
321                ercd = E_ILUSE;
322        }
323        else if (check_flg_cond(p_flgcb, waiptn, wfmode, p_flgptn)) {
324                ercd = E_OK;
325        }
326        else {
327                winfo_flg.waiptn = waiptn;
328                winfo_flg.wfmode = wfmode;
329                p_runtsk->tstat = (TS_WAITING | TS_WAIT_FLG);
330                wobj_make_wait((WOBJCB *) p_flgcb, (WINFO_WOBJ *) &winfo_flg);
331                dispatch();
332                ercd = winfo_flg.winfo.wercd;
333                if (ercd == E_OK) {
334                        *p_flgptn = winfo_flg.flgptn;
335                }
336        }
337        t_unlock_cpu();
338
339  error_exit:
340        LOG_WAI_FLG_LEAVE(ercd, *p_flgptn);
341        return(ercd);
342}
343
344#endif /* TOPPERS_wai_flg */
345
346/*
347 *  ¥€¥Ù¥ó¥È¥Õ¥é¥°ÂÔ€Á¡Ê¥Ý¡Œ¥ê¥ó¥°¡Ë
348 */
349#ifdef TOPPERS_pol_flg
350
351ER
352pol_flg(ID flgid, FLGPTN waiptn, MODE wfmode, FLGPTN *p_flgptn)
353{
354        FLGCB   *p_flgcb;
355        ER              ercd;
356
357        LOG_POL_FLG_ENTER(flgid, waiptn, wfmode, p_flgptn);
358        CHECK_TSKCTX_UNL();
359        CHECK_FLGID(flgid);
360        CHECK_PAR(waiptn != 0U);
361        CHECK_PAR(wfmode == TWF_ORW || wfmode == TWF_ANDW);
362        p_flgcb = get_flgcb(flgid);
363
364        t_lock_cpu();
365        if ((p_flgcb->p_flginib->flgatr & TA_WMUL) == 0U
366                                        && !queue_empty(&(p_flgcb->wait_queue))) {
367                ercd = E_ILUSE;
368        }
369        else if (check_flg_cond(p_flgcb, waiptn, wfmode, p_flgptn)) {
370                ercd = E_OK;
371        }
372        else {
373                ercd = E_TMOUT;
374        }
375        t_unlock_cpu();
376
377  error_exit:
378        LOG_POL_FLG_LEAVE(ercd, *p_flgptn);
379        return(ercd);
380}
381
382#endif /* TOPPERS_pol_flg */
383
384/*
385 *  ¥€¥Ù¥ó¥È¥Õ¥é¥°ÂÔ€Á¡Ê¥¿¥€¥à¥¢¥Š¥È€¢€ê¡Ë
386 */
387#ifdef TOPPERS_twai_flg
388
389ER
390twai_flg(ID flgid, FLGPTN waiptn, MODE wfmode, FLGPTN *p_flgptn, TMO tmout)
391{
392        FLGCB   *p_flgcb;
393        WINFO_FLG winfo_flg;
394        TMEVTB  tmevtb;
395        ER              ercd;
396
397        LOG_TWAI_FLG_ENTER(flgid, waiptn, wfmode, p_flgptn, tmout);
398        CHECK_DISPATCH();
399        CHECK_FLGID(flgid);
400        CHECK_PAR(waiptn != 0U);
401        CHECK_PAR(wfmode == TWF_ORW || wfmode == TWF_ANDW);
402        CHECK_TMOUT(tmout);
403        p_flgcb = get_flgcb(flgid);
404
405        t_lock_cpu();
406        if ((p_flgcb->p_flginib->flgatr & TA_WMUL) == 0U
407                                        && !queue_empty(&(p_flgcb->wait_queue))) {
408                ercd = E_ILUSE;
409        }
410        else if (check_flg_cond(p_flgcb, waiptn, wfmode, p_flgptn)) {
411                ercd = E_OK;
412        }
413        else if (tmout == TMO_POL) {
414                ercd = E_TMOUT;
415        }
416        else {
417                winfo_flg.waiptn = waiptn;
418                winfo_flg.wfmode = wfmode;
419                p_runtsk->tstat = (TS_WAITING | TS_WAIT_FLG);
420                wobj_make_wait_tmout((WOBJCB *) p_flgcb, (WINFO_WOBJ *) &winfo_flg,
421                                                                                                                &tmevtb, tmout);
422                dispatch();
423                ercd = winfo_flg.winfo.wercd;
424                if (ercd == E_OK) {
425                        *p_flgptn = winfo_flg.flgptn;
426                }
427        }
428        t_unlock_cpu();
429
430  error_exit:
431        LOG_TWAI_FLG_LEAVE(ercd, *p_flgptn);
432        return(ercd);
433}
434
435#endif /* TOPPERS_twai_flg */
436
437/*
438 *  ¥€¥Ù¥ó¥È¥Õ¥é¥°€ÎºÆœéŽü²œ
439 */
440#ifdef TOPPERS_ini_flg
441
442ER
443ini_flg(ID flgid)
444{
445        FLGCB   *p_flgcb;
446        bool_t  dspreq;
447        ER              ercd;
448   
449        LOG_INI_FLG_ENTER(flgid);
450        CHECK_TSKCTX_UNL();
451        CHECK_FLGID(flgid);
452        p_flgcb = get_flgcb(flgid);
453
454        t_lock_cpu();
455        dspreq = init_wait_queue(&(p_flgcb->wait_queue));
456        p_flgcb->flgptn = p_flgcb->p_flginib->iflgptn;
457        if (dspreq) {
458                dispatch();
459        }
460        ercd = E_OK;
461        t_unlock_cpu();
462
463  error_exit:
464        LOG_INI_FLG_LEAVE(ercd);
465        return(ercd);
466}
467
468#endif /* TOPPERS_ini_flg */
469
470/*
471 *  ¥€¥Ù¥ó¥È¥Õ¥é¥°€ÎŸõÂÖ»²ŸÈ
472 */
473#ifdef TOPPERS_ref_flg
474
475ER
476ref_flg(ID flgid, T_RFLG *pk_rflg)
477{
478        FLGCB   *p_flgcb;
479        ER              ercd;
480   
481        LOG_REF_FLG_ENTER(flgid, pk_rflg);
482        CHECK_TSKCTX_UNL();
483        CHECK_FLGID(flgid);
484        p_flgcb = get_flgcb(flgid);
485
486        t_lock_cpu();
487        pk_rflg->wtskid = wait_tskid(&(p_flgcb->wait_queue));
488        pk_rflg->flgptn = p_flgcb->flgptn;
489        ercd = E_OK;
490        t_unlock_cpu();
491
492  error_exit:
493        LOG_REF_FLG_LEAVE(ercd, pk_rflg);
494        return(ercd);
495}
496
497#endif /* TOPPERS_ref_flg */
詳しい使い方は TracBrowser を参照してください。