source: extension/mutex/kernel/mutex.h

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

TOPPERS/ASP 1.9.1

ファイルサイズ: 5.6 KB
Rev 
[7]1/*
2 *  TOPPERS/ASP Kernel
3 *      Toyohashi Open Platform for Embedded Real-Time Systems/
4 *      Advanced Standard Profile Kernel
5 *
6 *  Copyright (C) 2005-2012 by Embedded and Real-Time Systems Laboratory
7 *              Graduate School of Information Science, Nagoya Univ., JAPAN
8 *
9 *  Ÿåµ­Ãøºîž¢ŒÔ€Ï¡€°Ê²Œ€Î(1)¡Á(4)€ÎŸò·ï€òËþ€¿€¹Ÿì¹ç€ËžÂ€ê¡€ËÜ¥œ¥Õ¥È¥Š¥§
10 *  ¥¢¡ÊËÜ¥œ¥Õ¥È¥Š¥§¥¢€ò²þÊÑ€·€¿€â€Î€òŽÞ€à¡¥°Ê²ŒÆ±€ž¡Ë€ò»ÈÍÑ¡ŠÊ£Àœ¡Š²þ
11 *  ÊÑ¡ŠºÆÇÛÉۡʰʲŒ¡€ÍøÍрȞƀ֡ˀ¹€ë€³€È€ò̵œþ€ÇµöÂú€¹€ë¡¥
12 *  (1) ËÜ¥œ¥Õ¥È¥Š¥§¥¢€ò¥œ¡Œ¥¹¥³¡Œ¥É€Î·Á€ÇÍøÍÑ€¹€ëŸì¹ç€Ë€Ï¡€Ÿåµ­€ÎÃøºî
13 *      ž¢ÉœŒš¡€€³€ÎÍøÍÑŸò·ï€ª€è€Ó²Œµ­€Î̵ÊÝŸÚµ¬Äꀬ¡€€œ€Î€Þ€Þ€Î·Á€Ç¥œ¡Œ
14 *      ¥¹¥³¡Œ¥ÉÃæ€ËŽÞ€Þ€ì€Æ€€€ë€³€È¡¥
15 *  (2) ËÜ¥œ¥Õ¥È¥Š¥§¥¢€ò¡€¥é¥€¥Ö¥é¥ê·ÁŒ°€Ê€É¡€ÂŸ€Î¥œ¥Õ¥È¥Š¥§¥¢³«È¯€Ë»È
16 *      Íрǀ­€ë·Á€ÇºÆÇÛÉÛ€¹€ëŸì¹ç€Ë€Ï¡€ºÆÇÛÉÛ€ËÈŒ€Š¥É¥­¥å¥á¥ó¥È¡ÊÍøÍÑ
17 *      ŒÔ¥Þ¥Ë¥å¥¢¥ë€Ê€É¡Ë€Ë¡€Ÿåµ­€ÎÃøºîž¢ÉœŒš¡€€³€ÎÍøÍÑŸò·ï€ª€è€Ó²Œµ­
18 *      €Î̵ÊÝŸÚµ¬Äê€ò·ÇºÜ€¹€ë€³€È¡¥
19 *  (3) ËÜ¥œ¥Õ¥È¥Š¥§¥¢€ò¡€µ¡Žï€ËÁȀ߹þ€à€Ê€É¡€ÂŸ€Î¥œ¥Õ¥È¥Š¥§¥¢³«È¯€Ë»È
20 *      Íрǀ­€Ê€€·Á€ÇºÆÇÛÉÛ€¹€ëŸì¹ç€Ë€Ï¡€Œ¡€Î€€€º€ì€«€ÎŸò·ï€òËþ€¿€¹€³
21 *      €È¡¥
22 *    (a) ºÆÇÛÉÛ€ËÈŒ€Š¥É¥­¥å¥á¥ó¥È¡ÊÍøÍьԥޥ˥奢¥ë€Ê€É¡Ë€Ë¡€Ÿåµ­€ÎÃø
23 *        ºîž¢ÉœŒš¡€€³€ÎÍøÍÑŸò·ï€ª€è€Ó²Œµ­€Î̵ÊÝŸÚµ¬Äê€ò·ÇºÜ€¹€ë€³€È¡¥
24 *    (b) ºÆÇÛÉۀηÁÂÖ€ò¡€ÊÌ€ËÄê€á€ëÊýË¡€Ë€è€Ã€Æ¡€TOPPERS¥×¥í¥ž¥§¥¯¥È€Ë
25 *        Êó¹ð€¹€ë€³€È¡¥
26 *  (4) ËÜ¥œ¥Õ¥È¥Š¥§¥¢€ÎÍøÍрˀè€êÄŸÀÜŪ€Þ€¿€ÏŽÖÀÜŪ€ËÀž€ž€ë€€€«€Ê€ë»
27 *      ³²€«€é€â¡€Ÿåµ­Ãøºîž¢ŒÔ€ª€è€ÓTOPPERS¥×¥í¥ž¥§¥¯¥È€òÌÈÀÕ€¹€ë€³€È¡¥
28 *      €Þ€¿¡€ËÜ¥œ¥Õ¥È¥Š¥§¥¢€Î¥æ¡Œ¥¶€Þ€¿€Ï¥š¥ó¥É¥æ¡Œ¥¶€«€é€Î€€€«€Ê€ëÍý
29 *      ͳ€ËŽð€Å€¯ÀÁµá€«€é€â¡€Ÿåµ­Ãøºîž¢ŒÔ€ª€è€ÓTOPPERS¥×¥í¥ž¥§¥¯¥È€ò
30 *      ÌÈÀÕ€¹€ë€³€È¡¥
31 *
32 *  ËÜ¥œ¥Õ¥È¥Š¥§¥¢€Ï¡€ÌµÊÝŸÚ€ÇÄó¶¡€µ€ì€Æ€€€ë€â€Î€Ç€¢€ë¡¥Ÿåµ­Ãøºîž¢ŒÔ€ª
33 *  €è€ÓTOPPERS¥×¥í¥ž¥§¥¯¥È€Ï¡€ËÜ¥œ¥Õ¥È¥Š¥§¥¢€ËŽØ€·€Æ¡€ÆÃÄê€Î»ÈÍÑÌÜŪ
34 *  €ËÂЀ¹€ëŬ¹çÀ­€âŽÞ€á€Æ¡€€€€«€Ê€ëÊÝŸÚ€â¹Ô€ï€Ê€€¡¥€Þ€¿¡€ËÜ¥œ¥Õ¥È¥Š¥§
35 *  ¥¢€ÎÍøÍрˀè€êÄŸÀÜŪ€Þ€¿€ÏŽÖÀÜŪ€ËÀž€ž€¿€€€«€Ê€ë»³²€ËŽØ€·€Æ€â¡€€œ
36 *  €ÎÀÕÇ€€òÉé€ï€Ê€€¡¥
37 *
38 *  @(#) $Id$
39 */
40
41/*
42 *              ¥ß¥å¡Œ¥Æ¥Ã¥¯¥¹µ¡Çœ
43 */
44
45#ifndef TOPPERS_MUTEX_H
46#define TOPPERS_MUTEX_H
47
48#include "wait.h"
49
50/*
51 *  ¥ß¥å¡Œ¥Æ¥Ã¥¯¥¹œéŽü²œ¥Ö¥í¥Ã¥¯
52 *
53 *  €³€Î¹œÂ€Â΀ϡ€Æ±Žü¡ŠÄÌ¿®¥ª¥Ö¥ž¥§¥¯¥È€ÎœéŽü²œ¥Ö¥í¥Ã¥¯€Î¶ŠÄÌÉôʬ
54 *  ¡ÊWOBJINIB¡Ë€ò³ÈÄ¥¡Ê¥ª¥Ö¥ž¥§¥¯¥È»ØžþžÀžì€Î·ÑŸµ€ËÁêÅö¡Ë€·€¿€â€Î€Ç¡€
55 *  ºÇœé€Î¥Õ¥£¡Œ¥ë¥É€¬¶ŠÄ̀ˀʀÀƀ€€ë¡¥
56 */
57typedef struct mutex_initialization_block {
58        ATR                     mtxatr;                 /* ¥ß¥å¡Œ¥Æ¥Ã¥¯¥¹Â°À­ */
59        uint_t          ceilpri;                /* ¥ß¥å¡Œ¥Æ¥Ã¥¯¥¹€ÎŸåžÂÍ¥ÀèÅÙ¡ÊÆâÉôÉœžœ¡Ë*/
60} MTXINIB;
61
62/*
63 *  ¥ß¥å¡Œ¥Æ¥Ã¥¯¥¹ŽÉÍý¥Ö¥í¥Ã¥¯
64 *
65 *  €³€Î¹œÂ€Â΀ϡ€Æ±Žü¡ŠÄÌ¿®¥ª¥Ö¥ž¥§¥¯¥È€ÎŽÉÍý¥Ö¥í¥Ã¥¯€Î¶ŠÄÌÉôʬ¡ÊWOBJCB¡Ë
66 *  €ò³ÈÄ¥¡Ê¥ª¥Ö¥ž¥§¥¯¥È»ØžþžÀžì€Î·ÑŸµ€ËÁêÅö¡Ë€·€¿€â€Î€Ç¡€ºÇœé€Î2€Ä€Î
67 *  ¥Õ¥£¡Œ¥ë¥É€¬¶ŠÄ̀ˀʀÀƀ€€ë¡¥
68 */
69typedef struct mutex_control_block {
70        QUEUE           wait_queue;             /* ¥ß¥å¡Œ¥Æ¥Ã¥¯¥¹ÂÔ€Á¥­¥å¡Œ */
71        const MTXINIB *p_mtxinib;       /* œéŽü²œ¥Ö¥í¥Ã¥¯€Ø€Î¥Ý¥€¥ó¥¿ */
72        TCB                     *p_loctsk;              /* ¥ß¥å¡Œ¥Æ¥Ã¥¯¥¹€ò¥í¥Ã¥¯€·€Æ€€€ë¥¿¥¹¥¯ */
73        QUEUE           mutex_queue;    /* ¥í¥Ã¥¯€·€Æ€€€ë¥ß¥å¡Œ¥Æ¥Ã¥¯¥¹€Î¥­¥å¡Œ */
74} MTXCB;
75
76/*
77 *  ¥ß¥å¡Œ¥Æ¥Ã¥¯¥¹ÂÔ€ÁŸðÊó¥Ö¥í¥Ã¥¯€ÎÄêµÁ
78 *
79 *  €³€Î¹œÂ€Â΀ϡ€Æ±Žü¡ŠÄÌ¿®¥ª¥Ö¥ž¥§¥¯¥È€ÎÂÔ€ÁŸðÊó¥Ö¥í¥Ã¥¯€Î¶ŠÄÌÉôʬ
80 *  ¡ÊWINFO_WOBJ¡Ë€ò³ÈÄ¥¡Ê¥ª¥Ö¥ž¥§¥¯¥È»ØžþžÀžì€Î·ÑŸµ€ËÁêÅö¡Ë€·€¿€â€Î€Ç¡€
81 *  €¹€Ù€Æ€Î¥Õ¥£¡Œ¥ë¥É€¬¶ŠÄ̀ˀʀÀƀ€€ë¡¥
82 */
83typedef struct mutex_waiting_information {
84        WINFO   winfo;                  /* Éžœà€ÎÂÔ€ÁŸðÊó¥Ö¥í¥Ã¥¯ */
85        MTXCB   *p_mtxcb;               /* ÂԀÀƀ€€ë¥ß¥å¡Œ¥Æ¥Ã¥¯¥¹€ÎŽÉÍý¥Ö¥í¥Ã¥¯ */
86} WINFO_MTX;
87
88/*
89 *  ¥ß¥å¡Œ¥Æ¥Ã¥¯¥¹ID€ÎºÇÂçÃÍ¡Êkernel_cfg.c¡Ë
90 */
91extern const ID tmax_mtxid;
92
93/*
94 *  ¥ß¥å¡Œ¥Æ¥Ã¥¯¥¹œéŽü²œ¥Ö¥í¥Ã¥¯€Î¥š¥ê¥¢¡Êkernel_cfg.c¡Ë
95 */
96extern const MTXINIB    mtxinib_table[];
97
98/*
99 *  ¥ß¥å¡Œ¥Æ¥Ã¥¯¥¹ŽÉÍý¥Ö¥í¥Ã¥¯€Î¥š¥ê¥¢¡Êkernel_cfg.c¡Ë
100 */
101extern MTXCB    mtxcb_table[];
102
103/*
104 *  ¥ß¥å¡Œ¥Æ¥Ã¥¯¥¹ŽÉÍý¥Ö¥í¥Ã¥¯€«€é¥ß¥å¡Œ¥Æ¥Ã¥¯¥¹ID€òŒè€êœÐ€¹€¿€á€Î¥Þ¥¯¥í
105 */
106#define MTXID(p_mtxcb)  ((ID)(((p_mtxcb) - mtxcb_table) + TMIN_MTXID))
107
108/*
109 *  ¥ß¥å¡Œ¥Æ¥Ã¥¯¥¹µ¡Çœ€ÎœéŽü²œ
110 */
111extern void     initialize_mutex(void);
112
113/*
114 *  ŸåžÂÍ¥ÀèÅÙ°ãÈ¿€Î¥Á¥§¥Ã¥¯
115 *
116 *  chg_pri€ÎÃæ€ÇŸåžÂÍ¥ÀèÅÙ°ãÈ¿€Î¥Á¥§¥Ã¥¯€ò¹Ô€Š€¿€á€ËÍÑ€€€ëŽØ¿ô€Ç€¢€ê¡€
117 *  p_tcb€Ç»ØÄꀵ€ì€ë¥¿¥¹¥¯€¬¥í¥Ã¥¯€·€Æ€€€ëÍ¥ÀèÅÙŸåžÂ¥ß¥å¡Œ¥Æ¥Ã¥¯¥¹€È¡€
118 *  ¥í¥Ã¥¯€òÂԀÀƀ€€ëÍ¥ÀèÅÙŸåžÂ¥ß¥å¡Œ¥Æ¥Ã¥¯¥¹€ÎÃæ€Ç¡€ŸåžÂÍ¥ÀèÅÙ€¬
119 *  bpriority€è€ê€âÄ €â€Î€¬€¢€ì€Ðfalse€ò¡€€œ€Š€Ç€Ê€±€ì€Ðtrue€òÊÖ€¹¡¥
120 */
121extern bool_t   (*mtxhook_check_ceilpri)(TCB *p_tcb, uint_t bpriority);
122extern bool_t   mutex_check_ceilpri(TCB *p_tcb, uint_t bpriority);
123
124/*
125 *  Í¥ÀèÅÙŸåžÂ¥ß¥å¡Œ¥Æ¥Ã¥¯¥¹€ò¥í¥Ã¥¯€·€Æ€€€ë€«€Î¥Á¥§¥Ã¥¯
126 *
127 *  p_tcb€Ç»ØÄꀵ€ì€ë¥¿¥¹¥¯€¬Í¥ÀèÅÙŸåžÂ¥ß¥å¡Œ¥Æ¥Ã¥¯¥¹€ò¥í¥Ã¥¯€·€Æ€€€ì€Ð
128 *  true¡€€œ€Š€Ç€Ê€±€ì€Ðfalse€òÊÖ€¹¡¥
129 */
130extern bool_t   (*mtxhook_scan_ceilmtx)(TCB *p_tcb);
131extern bool_t   mutex_scan_ceilmtx(TCB *p_tcb);
132
133/*
134 *  ¥¿¥¹¥¯€ÎžœºßÍ¥ÀèÅـη׻»
135 *
136 *  p_tcb€Ç»ØÄꀵ€ì€ë¥¿¥¹¥¯€ÎžœºßÍ¥ÀèÅÙ¡Ê€ËÀßÄꀹ€Ù€­Ã͡ˀò·×»»€¹€ë¡¥
137 */
138extern uint_t   mutex_calc_priority(TCB *p_tcb);
139
140/*
141 *  ¥ß¥å¡Œ¥Æ¥Ã¥¯¥¹€Î¥í¥Ã¥¯²òœü
142 *
143 *  p_mtxcb€Ç»ØÄꀵ€ì€ë¥ß¥å¡Œ¥Æ¥Ã¥¯¥¹€ò¥í¥Ã¥¯²òœü€¹€ë¡¥¥í¥Ã¥¯²òœü€·€¿
144 *  ¥ß¥å¡Œ¥Æ¥Ã¥¯¥¹€Ë¡€¥í¥Ã¥¯ÂÔ€ÁŸõÂրΥ¿¥¹¥¯€¬€¢€ëŸì¹ç€Ë€Ï¡€€œ€Î¥¿¥¹¥¯
145 *  €Ë¥ß¥å¡Œ¥Æ¥Ã¥¯¥¹€ò¥í¥Ã¥¯€µ€»€ë¡¥
146 */
147extern bool_t   mutex_release(MTXCB *p_mtxcb);
148
149/*
150 *  ¥¿¥¹¥¯€¬¥í¥Ã¥¯€·€Æ€€€ë€¹€Ù€Æ€Î¥ß¥å¡Œ¥Æ¥Ã¥¯¥¹€Î¥í¥Ã¥¯²òœü
151 *
152 *  p_tcb€Ç»ØÄꀵ€ì€ë¥¿¥¹¥¯€Ë¡€€œ€ì€¬¥í¥Ã¥¯€·€Æ€€€ë€¹€Ù€Æ€Î¥ß¥å¡Œ¥Æ¥Ã¥¯
153 *  ¥¹€ò¥í¥Ã¥¯²òœü€µ€»€ë¡¥¥í¥Ã¥¯²òœü€·€¿¥ß¥å¡Œ¥Æ¥Ã¥¯¥¹€Ë¡€¥í¥Ã¥¯ÂÔ€ÁŸõ
154 *  ÂրΥ¿¥¹¥¯€¬€¢€ëŸì¹ç€Ë€Ï¡€€œ€Î¥¿¥¹¥¯€Ë¥ß¥å¡Œ¥Æ¥Ã¥¯¥¹€ò¥í¥Ã¥¯€µ€»€ë¡¥
155 *
156 *  €³€ÎŽØ¿ô€Ï¡€¥¿¥¹¥¯€ÎœªÎ»»þ€Ë»È€ï€ì€ë€â€Î€Ç€¢€ë€¿€á¡€p_tcb€Ç»ØÄꀵ€ì
157 *  €ë¥¿¥¹¥¯€ÎÍ¥ÀèÅÙ€òÊѹ¹€¹€ëœèÍý€Ï¹Ô€ï€Ê€€¡¥€¿€À€·¡€€³€ÎŽØ¿ô€ÎÃæ€ÇŸ
158 *  €Î¥¿¥¹¥¯€ÎÍ¥ÀèÅÙ€¬ÊѲœ€·¡€ŒÂ¹Ô€¹€Ù€­¥¿¥¹¥¯€¬ÊÑ€ï€ë€³€È€¬€¢€ë¡¥€œ€Î
159 *  €¿€á¡€€³€ÎŽØ¿ô€«€éÌá€Ã€¿žå€Ë¡€¥Ç¥£¥¹¥Ñ¥Ã¥Á€¬É¬Í×€«ÈœÊÌ€·€Æ¡€É¬Í×€Ê
160 *  Ÿì¹ç€Ë€Ï¥Ç¥£¥¹¥Ñ¥Ã¥Á€ò¹Ô€ï€Ê€±€ì€Ð€Ê€é€Ê€€¡¥
161 */
162extern bool_t   (*mtxhook_release_all)(TCB *p_tcb);
163extern bool_t   mutex_release_all(TCB *p_tcb);
164
165#endif /* TOPPERS_MUTEX_H */
詳しい使い方は TracBrowser を参照してください。