source: extension/mutex/test/test_mutex6.c

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

TOPPERS/ASP 1.9.1

ファイルサイズ: 11.8 KB
 
1/*
2 *  TOPPERS Software
3 *      Toyohashi Open Platform for Embedded Real-Time Systems
4 *
5 *  Copyright (C) 2007-2014 by Embedded and Real-Time Systems Laboratory
6 *              Graduate School of Information Science, Nagoya Univ., JAPAN
7 *
8 *  Ÿåµ­Ãøºîž¢ŒÔ€Ï¡€°Ê²Œ€Î(1)¡Á(4)€ÎŸò·ï€òËþ€¿€¹Ÿì¹ç€ËžÂ€ê¡€ËÜ¥œ¥Õ¥È¥Š¥§
9 *  ¥¢¡ÊËÜ¥œ¥Õ¥È¥Š¥§¥¢€ò²þÊÑ€·€¿€â€Î€òŽÞ€à¡¥°Ê²ŒÆ±€ž¡Ë€ò»ÈÍÑ¡ŠÊ£Àœ¡Š²þ
10 *  ÊÑ¡ŠºÆÇÛÉۡʰʲŒ¡€ÍøÍрȞƀ֡ˀ¹€ë€³€È€ò̵œþ€ÇµöÂú€¹€ë¡¥
11 *  (1) ËÜ¥œ¥Õ¥È¥Š¥§¥¢€ò¥œ¡Œ¥¹¥³¡Œ¥É€Î·Á€ÇÍøÍÑ€¹€ëŸì¹ç€Ë€Ï¡€Ÿåµ­€ÎÃøºî
12 *      ž¢ÉœŒš¡€€³€ÎÍøÍÑŸò·ï€ª€è€Ó²Œµ­€Î̵ÊÝŸÚµ¬Äꀬ¡€€œ€Î€Þ€Þ€Î·Á€Ç¥œ¡Œ
13 *      ¥¹¥³¡Œ¥ÉÃæ€ËŽÞ€Þ€ì€Æ€€€ë€³€È¡¥
14 *  (2) ËÜ¥œ¥Õ¥È¥Š¥§¥¢€ò¡€¥é¥€¥Ö¥é¥ê·ÁŒ°€Ê€É¡€ÂŸ€Î¥œ¥Õ¥È¥Š¥§¥¢³«È¯€Ë»È
15 *      Íрǀ­€ë·Á€ÇºÆÇÛÉÛ€¹€ëŸì¹ç€Ë€Ï¡€ºÆÇÛÉÛ€ËÈŒ€Š¥É¥­¥å¥á¥ó¥È¡ÊÍøÍÑ
16 *      ŒÔ¥Þ¥Ë¥å¥¢¥ë€Ê€É¡Ë€Ë¡€Ÿåµ­€ÎÃøºîž¢ÉœŒš¡€€³€ÎÍøÍÑŸò·ï€ª€è€Ó²Œµ­
17 *      €Î̵ÊÝŸÚµ¬Äê€ò·ÇºÜ€¹€ë€³€È¡¥
18 *  (3) ËÜ¥œ¥Õ¥È¥Š¥§¥¢€ò¡€µ¡Žï€ËÁȀ߹þ€à€Ê€É¡€ÂŸ€Î¥œ¥Õ¥È¥Š¥§¥¢³«È¯€Ë»È
19 *      Íрǀ­€Ê€€·Á€ÇºÆÇÛÉÛ€¹€ëŸì¹ç€Ë€Ï¡€Œ¡€Î€€€º€ì€«€ÎŸò·ï€òËþ€¿€¹€³
20 *      €È¡¥
21 *    (a) ºÆÇÛÉÛ€ËÈŒ€Š¥É¥­¥å¥á¥ó¥È¡ÊÍøÍьԥޥ˥奢¥ë€Ê€É¡Ë€Ë¡€Ÿåµ­€ÎÃø
22 *        ºîž¢ÉœŒš¡€€³€ÎÍøÍÑŸò·ï€ª€è€Ó²Œµ­€Î̵ÊÝŸÚµ¬Äê€ò·ÇºÜ€¹€ë€³€È¡¥
23 *    (b) ºÆÇÛÉۀηÁÂÖ€ò¡€ÊÌ€ËÄê€á€ëÊýË¡€Ë€è€Ã€Æ¡€TOPPERS¥×¥í¥ž¥§¥¯¥È€Ë
24 *        Êó¹ð€¹€ë€³€È¡¥
25 *  (4) ËÜ¥œ¥Õ¥È¥Š¥§¥¢€ÎÍøÍрˀè€êÄŸÀÜŪ€Þ€¿€ÏŽÖÀÜŪ€ËÀž€ž€ë€€€«€Ê€ë»
26 *      ³²€«€é€â¡€Ÿåµ­Ãøºîž¢ŒÔ€ª€è€ÓTOPPERS¥×¥í¥ž¥§¥¯¥È€òÌÈÀÕ€¹€ë€³€È¡¥
27 *      €Þ€¿¡€ËÜ¥œ¥Õ¥È¥Š¥§¥¢€Î¥æ¡Œ¥¶€Þ€¿€Ï¥š¥ó¥É¥æ¡Œ¥¶€«€é€Î€€€«€Ê€ëÍý
28 *      ͳ€ËŽð€Å€¯ÀÁµá€«€é€â¡€Ÿåµ­Ãøºîž¢ŒÔ€ª€è€ÓTOPPERS¥×¥í¥ž¥§¥¯¥È€ò
29 *      ÌÈÀÕ€¹€ë€³€È¡¥
30 *
31 *  ËÜ¥œ¥Õ¥È¥Š¥§¥¢€Ï¡€ÌµÊÝŸÚ€ÇÄó¶¡€µ€ì€Æ€€€ë€â€Î€Ç€¢€ë¡¥Ÿåµ­Ãøºîž¢ŒÔ€ª
32 *  €è€ÓTOPPERS¥×¥í¥ž¥§¥¯¥È€Ï¡€ËÜ¥œ¥Õ¥È¥Š¥§¥¢€ËŽØ€·€Æ¡€ÆÃÄê€Î»ÈÍÑÌÜŪ
33 *  €ËÂЀ¹€ëŬ¹çÀ­€âŽÞ€á€Æ¡€€€€«€Ê€ëÊÝŸÚ€â¹Ô€ï€Ê€€¡¥€Þ€¿¡€ËÜ¥œ¥Õ¥È¥Š¥§
34 *  ¥¢€ÎÍøÍрˀè€êÄŸÀÜŪ€Þ€¿€ÏŽÖÀÜŪ€ËÀž€ž€¿€€€«€Ê€ë»³²€ËŽØ€·€Æ€â¡€€œ
35 *  €ÎÀÕÇ€€òÉé€ï€Ê€€¡¥
36 *
37 *  $Id$
38 */
39
40/*
41 *              ¥ß¥å¡Œ¥Æ¥Ã¥¯¥¹€Î¥Æ¥¹¥È(6)
42 *
43 * ¡Ú¥Æ¥¹¥È€ÎÌÜŪ¡Û
44 *
45 *  Í¥ÀèÅÙŸåžÂ¥ß¥å¡Œ¥Æ¥Ã¥¯¥¹€ËÂЀ·€Æ¡€¥¿¥¹¥¯€ÎœªÎ»»þ¡€¥¿¥¹¥¯€ÎÍ¥Àèœç°Ì
46 *  €Î²óÅŸ»þ€Î¥ß¥å¡Œ¥Æ¥Ã¥¯¥¹ŽØÏ¢€ÎœèÍý€òÌÖÍåŪ€Ë¥Æ¥¹¥È€¹€ë¡¥
47 *
48 * ¡Ú¥Æ¥¹¥È¹àÌÜ¡Û
49 *
50 *      (A) ¥¿¥¹¥¯€ÎœªÎ»»þ¡Êext_tsk¡Ë
51 *              (A-1) ¥í¥Ã¥¯€·€Æ€€€¿¥ß¥å¡Œ¥Æ¥Ã¥¯¥¹¡Ê1€Ä¡Ë€¬¥í¥Ã¥¯²òœü€µ€ì€ë€³€È¡¥
52 *              (A-2) ¥í¥Ã¥¯€·€Æ€€€¿¥ß¥å¡Œ¥Æ¥Ã¥¯¥¹¡Ê1€Ä¡Ë€¬¥í¥Ã¥¯²òœü€µ€ì¡€¥í¥Ã
53 *                        ¥¯€òÂԀÀƀ€€¿¥¿¥¹¥¯€¬€œ€ì€ò¥í¥Ã¥¯€·¡€Í¥ÀèÅÙ€¬ÊѲœ€·¡€ÂÔ
54 *                        €Á²òœü€µ€ì€ë€³€È¡¥
55 *              (A-3) ¥í¥Ã¥¯€·€Æ€€€¿¥ß¥å¡Œ¥Æ¥Ã¥¯¥¹¡ÊÊ£¿ô¡Ë€¬€¹€Ù€Æ¥í¥Ã¥¯²òœü€µ
56 *                        €ì€ë€³€È¡¥
57 *              (A-4) ¥í¥Ã¥¯€·€Æ€€€¿¥ß¥å¡Œ¥Æ¥Ã¥¯¥¹¡ÊÊ£¿ô¡Ë€¬¥í¥Ã¥¯²òœü€µ€ì¡€¥í¥Ã
58 *                        ¥¯€òÂԀÀƀ€€¿¥¿¥¹¥¯¡ÊÊ£¿ô¡Ë€¬€œ€ì€ò¥í¥Ã¥¯€·¡€Í¥ÀèÅÙ€¬ÊÑ
59 *                        ²œ€·¡€ÂÔ€Á²òœü€µ€ì€ë€³€È¡¥€œ€Î»þ€Ë¡€žå€Ç¥ß¥å¡Œ¥Æ¥Ã¥¯¥¹€ò
60 *                        ¥í¥Ã¥¯€·€¿¥¿¥¹¥¯¡ÊÀè€Ë¥í¥Ã¥¯€·€Æ€€€¿¥ß¥å¡Œ¥Æ¥Ã¥¯¥¹€òÂÔ€Ã
61 *                        €Æ€€€¿¥¿¥¹¥¯¡Ë€ÎÊý€¬¡€Í¥Àèœç°Ì€¬¹â€¯€Ê€ë€³€È¡¥
62 *      (B) ¥¿¥¹¥¯€ÎÍ¥Àèœç°Ì€Î²óÅŸ¡Êrot_rdq¡Ë
63 *              (B-1) TPRI_SELF€ò»ØÄꀷ€¿»þ€Ë¡€¥¿¥¹¥¯€Î¥Ù¡Œ¥¹Í¥ÀèÅÙ€ÎÍ¥Àèœç°Ì€¬
64 *              ¡¡¡¡¡¡²óÅŸ€¹€ë€³€È¡¥
65 *              (B-2) TPRI_SELF€ò»ØÄꀷ€¿»þ€Ë¡€¥¿¥¹¥¯€ÎžœºßÍ¥ÀèÅÙ€ÎÍ¥Àèœç°Ì€¬²ó
66 *              ¡¡¡¡¡¡ÅŸ€·€Ê€€€³€È¡¥
67 *
68 * ¡Ú¥Æ¥¹¥È¹àÌ܀ΌžœÊýË¡¡Û
69 *
70 *      (A-1)
71 *              ÄãÍ¥ÀèÅÙ¥¿¥¹¥¯¡ÊTASK2¡Ë€Ë¥ß¥å¡Œ¥Æ¥Ã¥¯¥¹¡ÊMTX1¡Ë€ò¥í¥Ã¥¯€µ€»¡€
72 *              ext_tsk€¹€ë€È¡€¥í¥Ã¥¯€¬²òœü€µ€ì€ë€³€È€ò³Îǧ€¹€ë¡¥
73 *      (A-2)
74 *              ÄãÍ¥ÀèÅÙ¥¿¥¹¥¯¡ÊTASK2¡Ë€Ë¹âÍ¥ÀèÅÙŸåžÂ¥ß¥å¡Œ¥Æ¥Ã¥¯¥¹¡ÊMTX1¡Ë€ò¥í¥Ã
75 *              ¥¯€µ€»¡€ÊÌ€ÎÄãÍ¥ÀèÅÙ¥¿¥¹¥¯¡ÊTASK3¡Ë€ËMTX1€òÂÔ€¿€»€¿ŸõÂրǡ€
76 *              TASK2 €¬ext_tsk€¹€ë€È¡€TASK3€¬¹âÍ¥ÀèÅـˀʀÀÆÂÔ€Á²òœü€µ€ì€ë€³
77 *              €È€ò³Îǧ€¹€ë¡¥
78 *      (A-3)
79 *              ÄãÍ¥ÀèÅÙ¥¿¥¹¥¯¡ÊTASK2¡Ë€Ë¥ß¥å¡Œ¥Æ¥Ã¥¯¥¹€ò2€Ä¡ÊMTX1¡€MTX2¡Ë¥í¥Ã
80 *              ¥¯€µ€»¡€ext_tsk€¹€ë€È¡€ÎŸÊý€Î¥í¥Ã¥¯€¬²òœü€µ€ì€ë€³€È€ò³Îǧ€¹€ë¡¥
81 *      (A-4)
82 *              ÄãÍ¥ÀèÅÙ¥¿¥¹¥¯¡ÊTASK2¡Ë€Ë¹âÍ¥ÀèÅÙŸåžÂ¥ß¥å¡Œ¥Æ¥Ã¥¯¥¹2€Ä¡ÊMTX1¡€
83 *              MTX2¡Ë€ò€³€Îœç€Ç¥í¥Ã¥¯€µ€»¡€ÊÌ€ÎÄãÍ¥ÀèÅÙ¥¿¥¹¥¯2€Ä¡ÊTASK3¡€
84 *              TASK4¡Ë€Ë€œ€ì€Ÿ€ì€Î¥í¥Ã¥¯€òÂÔ€¿€»€¿ŸõÂրǡ€TASK2€òext_tsk€¹€ë€È¡€
85 *              TASK3€ÈTASK4€¬¹âÍ¥ÀèÅـˀʀÀÆÂÔ€Á²òœü€µ€ì€ë€³€È€ò³Îǧ€¹€ë¡¥€Þ
86 *              €¿¡€Àè€Ë¥í¥Ã¥¯€·€Æ€€€¿¥ß¥å¡Œ¥Æ¥Ã¥¯¥¹¡ÊMTX1¡Ë€òÂԀÀƀ€€¿¥¿¥¹¥¯
87 *              ¡ÊTASK3¡Ë€¬¡€TASK4€è€ê€âÍ¥Àèœç°Ì€¬¹â€¯€Ê€ë€³€È€ò³Îǧ€¹€ë¡¥
88 *      (B-1)
89 *              ÄãÍ¥ÀèÅÙ¥¿¥¹¥¯€¬3€Ä¡ÊTASK2¡€TASK3¡€TASK4¡Ë€¬ŒÂ¹Ô€Ç€­€ëŸõÂրλþ
90 *              €Ë¡€1€Ä€ÎÄãÍ¥ÀèÅÙ¥¿¥¹¥¯¡ÊTASK2¡Ë€Ë¹âÍ¥ÀèÅÙŸåžÂ¥ß¥å¡Œ¥Æ¥Ã¥¯¥¹€ò
91 *              ¥í¥Ã¥¯€µ€»¡€rot_rdq(TPRI_SELF)€¹€ë€È¡€»Ä€ê€Î2€Ä€ÎÄãÍ¥ÀèÅÙ¥¿¥¹¥¯
92 *              €ÎÍ¥Àèœç°Ì€¬²óÅŸ€¹€ë€³€È€ò³Îǧ€¹€ë¡¥
93 *      (B-2)
94 *              Ÿå€ÈƱ€žŸõ¶·€Ç¡€¹âÍ¥ÀèÅÙ¥¿¥¹¥¯€ÎÍ¥Àèœç°Ì€¬²óÅŸ€·€Ê€€€³€È€ò³Îǧ
95 *              €¹€ë¡¥
96 *
97 * ¡Ú»ÈÍѥ꥜¡Œ¥¹¡Û
98 *
99 *      TASK1: ÄãÍ¥ÀèÅÙ¥¿¥¹¥¯¡€¥á¥€¥ó¥¿¥¹¥¯¡€ºÇœé€«€éµ¯Æ°
100 *      TASK2: ÄãÍ¥ÀèÅÙ¥¿¥¹¥¯
101 *      TASK3: ÄãÍ¥ÀèÅÙ¥¿¥¹¥¯
102 *      TASK4: ÄãÍ¥ÀèÅÙ¥¿¥¹¥¯
103 *      MTX1: ¥ß¥å¡Œ¥Æ¥Ã¥¯¥¹¡ÊTA_CEILING°À­¡€ŸåžÂ€Ï¹âÍ¥ÀèÅÙ¡Ë
104 *      MTX2: ¥ß¥å¡Œ¥Æ¥Ã¥¯¥¹¡ÊTA_CEILING°À­¡€ŸåžÂ€Ï¹âÍ¥ÀèÅÙ¡Ë
105 *
106 * ¡Ú¥Æ¥¹¥È¥·¡Œ¥±¥ó¥¹¡Û
107 *
108 *      == TASK1¡ÊÍ¥ÀèÅÙ¡§Äã¡Ë==
109 *              call(set_bit_func(bit_mutex))
110 *      1:      act_tsk(TASK2)
111 *      2:      rot_rdq(TPRI_SELF)
112 *      //              Äã¡§TASK2¢ªTASK1
113 *      == TASK2-1¡ÊÍ¥ÀèÅÙ¡§Äã¡Ë1²ó€á ==
114 *      3:      loc_mtx(MTX1)
115 *      //              ¹â¡§TASK2¡€Äã¡§TASK1¡€MTX1¡§TASK2
116 *      4:      ext_tsk() -> noreturn                   ... (A-1)
117 *      //              Äã¡§TASK1
118 *      == TASK1¡Ê³€­¡Ë==
119 *      5:      ref_mtx(MTX1, &rmtx)
120 *              assert(rmtx.htskid == TSK_NONE)
121 *              assert(rmtx.wtskid == TSK_NONE)
122 *
123 *      6:      act_tsk(TASK2)
124 *              act_tsk(TASK3)
125 *      7:      rot_rdq(TPRI_SELF)
126 *      //              Äã¡§TASK2¢ªTASK3¢ªTASK1
127 *      == TASK2-2¡ÊÍ¥ÀèÅÙ¡§Äã¡Ë2²ó€á ==
128 *      8:      loc_mtx(MTX1)
129 *      //              ¹â¡§TASK2¡€Äã¡§TASK3¢ªTASK1¡€MTX1¡§TASK2
130 *      9:      slp_tsk()
131 *      //              Äã¡§TASK3¢ªTASK1¡€MTX1¡§TASK2
132 *      == TASK3¡ÊÍ¥ÀèÅÙ¡§Äã¡Ë==
133 *      10:     loc_mtx(MTX1)
134 *      //              Äã¡§TASK1¡€MTX1¡§TASK2¢ªTASK3
135 *      == TASK1¡Ê³€­¡Ë==
136 *      11:     wup_tsk(TASK2)
137 *      //              ¹â¡§TASK2¡€Äã¡§TASK1¡€MTX1¡§TASK2¢ªTASK3
138 *      == TASK2-2¡Ê³€­¡Ë==
139 *      12:     ext_tsk() -> noreturn                   ... (A-2)
140 *      //              ¹â¡§TASK3¡€Äã¡§TASK1¡€MTX1¡§TASK3
141 *      == TASK3¡Ê³€­¡Ë==
142 *      13:     ref_mtx(MTX1, &rmtx)
143 *              assert(rmtx.htskid == TASK3)
144 *              assert(rmtx.wtskid == TSK_NONE)
145 *              get_pri(TPRI_SELF, &tskpri)
146 *              assert(tskpri == HIGH_PRIORITY)
147 *              unl_mtx(MTX1)
148 *              slp_tsk()
149 *      //              Äã¡§TASK1
150 *
151 *      == TASK1¡Ê³€­¡Ë==
152 *      14:     act_tsk(TASK2)
153 *      15:     rot_rdq(TPRI_SELF)
154 *      //              Äã¡§TASK2¢ªTASK1
155 *      == TASK2-3¡ÊÍ¥ÀèÅÙ¡§Äã¡Ë3²ó€á ==
156 *      16:     loc_mtx(MTX1)
157 *              loc_mtx(MTX2)
158 *      //              ¹â¡§TASK2¡€Äã¡§TASK1¡€MTX1¡§TASK2¡€MTX2¡§TASK2
159 *      17:     ext_tsk() -> noreturn                   ... (A-3)
160 *      //              Äã¡§TASK1
161 *      == TASK1¡Ê³€­¡Ë==
162 *      18:     ref_mtx(MTX1, &rmtx)
163 *              assert(rmtx.htskid == TSK_NONE)
164 *              assert(rmtx.wtskid == TSK_NONE)
165 *              ref_mtx(MTX2, &rmtx)
166 *              assert(rmtx.htskid == TSK_NONE)
167 *              assert(rmtx.wtskid == TSK_NONE)
168 *
169 *      19:     act_tsk(TASK2)
170 *              wup_tsk(TASK3)
171 *              act_tsk(TASK4)
172 *      20:     rot_rdq(TPRI_SELF)
173 *      //              Äã¡§TASK2¢ªTASK3¢ªTASK4¢ªTASK1
174 *      == TASK2-4¡ÊÍ¥ÀèÅÙ¡§Äã¡Ë4²ó€á ==
175 *      21:     loc_mtx(MTX1)
176 *              loc_mtx(MTX2)
177 *      //              ¹â¡§TASK2¡€Äã¡§TASK3¢ªTASK4¢ªTASK1¡€MTX1¡§TASK2¡€MTX2¡§TASK2
178 *      22:     chg_pri(TASK1, HIGH_PRIORITY)
179 *      //              ¹â¡§TASK2¢ªTASK1¡€Äã¡§TASK3¢ªTASK4¡€MTX1¡§TASK2¡€MTX2¡§TASK2
180 *      23:     rot_rdq(TPRI_SELF)                              ... (B-1)(B-2)
181 *      //              ¹â¡§TASK2¢ªTASK1¡€Äã¡§TASK4¢ªTASK3¡€MTX1¡§TASK2¡€MTX2¡§TASK2
182 *      24:     slp_tsk()
183 *      //              ¹â¡§TASK1¡€Äã¡§TASK4¢ªTASK3¡€MTX1¡§TASK2¡€MTX2¡§TASK2
184 *      == TASK1¡Ê³€­¡Ë==
185 *      25:     chg_pri(TSK_SELF, TPRI_INI)
186 *      //              Äã¡§TASK4¢ªTASK3¢ªTASK1¡€MTX1¡§TASK2¡€MTX2¡§TASK2
187 *      == TASK4¡ÊÍ¥ÀèÅÙ¡§Äã¡Ë==
188 *      26:     loc_mtx(MTX2)
189 *      //              Äã¡§TASK3¢ªTASK1¡€MTX1¡§TASK2¡€MTX2¡§TASK2¢ªTASK4
190 *      == TASK3¡Ê³€­¡Ë==
191 *      27:     loc_mtx(MTX1)
192 *      //              Äã¡§TASK1¡€MTX1¡§TASK2¢ªTASK3¡€MTX2¡§TASK2¢ªTASK4
193 *      == TASK1¡Ê³€­¡Ë==
194 *      28:     wup_tsk(TASK2)
195 *      //              ¹â¡§TASK2¡€Äã¡§TASK1¡€MTX1¡§TASK2¢ªTASK3¡€MTX2¡§TASK2¢ªTASK4
196 *      == TASK2-4¡Ê³€­¡Ë==
197 *      29:     ext_tsk() -> noreturn                   ... (A-4)
198 *      //              ¹â¡§TASK4¢ªTASK3¡€Äã¡§TASK1¡€MTX1¡§TASK3¡€MTX2¡§TASK4
199 *      == TASK4¡Ê³€­¡Ë==
200 *      30:     ref_mtx(MTX1, &rmtx)
201 *              assert(rmtx.htskid == TASK3)
202 *              assert(rmtx.wtskid == TSK_NONE)
203 *              ref_mtx(MTX2, &rmtx)
204 *              assert(rmtx.htskid == TASK4)
205 *              assert(rmtx.wtskid == TSK_NONE)
206 *              get_pri(TPRI_SELF, &tskpri)
207 *              assert(tskpri == HIGH_PRIORITY)
208 *              ext_tsk() -> noreturn
209 *      //              ¹â¡§TASK3¡€Äã¡§TASK1¡€MTX2¡§TASK4
210 *      == TASK3¡Ê³€­¡Ë==
211 *      31:     get_pri(TPRI_SELF, &tskpri)
212 *              assert(tskpri == HIGH_PRIORITY)
213 *              ext_tsk() -> noreturn
214 *      //              Äã¡§TASK1
215 *      == TASK1¡Ê³€­¡Ë==
216 *      32:     END
217 */
218
219#include <kernel.h>
220#include <t_syslog.h>
221#include "kernel_cfg.h"
222#include "test_lib.h"
223#include "test_mutex6.h"
224
225extern ER       bit_mutex(void);
226
227/* DO NOT DELETE THIS LINE -- gentest depends on it. */
228
229void
230task1(intptr_t exinf)
231{
232        ER_UINT ercd;
233        T_RMTX  rmtx;
234
235        test_start(__FILE__);
236
237        set_bit_func(bit_mutex);
238
239        check_point(1);
240        ercd = act_tsk(TASK2);
241        check_ercd(ercd, E_OK);
242
243        check_point(2);
244        ercd = rot_rdq(TPRI_SELF);
245        check_ercd(ercd, E_OK);
246
247        check_point(5);
248        ercd = ref_mtx(MTX1, &rmtx);
249        check_ercd(ercd, E_OK);
250
251        check_assert(rmtx.htskid == TSK_NONE);
252
253        check_assert(rmtx.wtskid == TSK_NONE);
254
255        check_point(6);
256        ercd = act_tsk(TASK2);
257        check_ercd(ercd, E_OK);
258
259        ercd = act_tsk(TASK3);
260        check_ercd(ercd, E_OK);
261
262        check_point(7);
263        ercd = rot_rdq(TPRI_SELF);
264        check_ercd(ercd, E_OK);
265
266        check_point(11);
267        ercd = wup_tsk(TASK2);
268        check_ercd(ercd, E_OK);
269
270        check_point(14);
271        ercd = act_tsk(TASK2);
272        check_ercd(ercd, E_OK);
273
274        check_point(15);
275        ercd = rot_rdq(TPRI_SELF);
276        check_ercd(ercd, E_OK);
277
278        check_point(18);
279        ercd = ref_mtx(MTX1, &rmtx);
280        check_ercd(ercd, E_OK);
281
282        check_assert(rmtx.htskid == TSK_NONE);
283
284        check_assert(rmtx.wtskid == TSK_NONE);
285
286        ercd = ref_mtx(MTX2, &rmtx);
287        check_ercd(ercd, E_OK);
288
289        check_assert(rmtx.htskid == TSK_NONE);
290
291        check_assert(rmtx.wtskid == TSK_NONE);
292
293        check_point(19);
294        ercd = act_tsk(TASK2);
295        check_ercd(ercd, E_OK);
296
297        ercd = wup_tsk(TASK3);
298        check_ercd(ercd, E_OK);
299
300        ercd = act_tsk(TASK4);
301        check_ercd(ercd, E_OK);
302
303        check_point(20);
304        ercd = rot_rdq(TPRI_SELF);
305        check_ercd(ercd, E_OK);
306
307        check_point(25);
308        ercd = chg_pri(TSK_SELF, TPRI_INI);
309        check_ercd(ercd, E_OK);
310
311        check_point(28);
312        ercd = wup_tsk(TASK2);
313        check_ercd(ercd, E_OK);
314
315        check_finish(32);
316        check_point(0);
317}
318
319static uint_t   task2_count = 0;
320
321void
322task2(intptr_t exinf)
323{
324        ER_UINT ercd;
325
326        switch (++task2_count) {
327        case 1:
328                check_point(3);
329                ercd = loc_mtx(MTX1);
330                check_ercd(ercd, E_OK);
331
332                check_point(4);
333                ercd = ext_tsk();
334
335                check_point(0);
336
337        case 2:
338                check_point(8);
339                ercd = loc_mtx(MTX1);
340                check_ercd(ercd, E_OK);
341
342                check_point(9);
343                ercd = slp_tsk();
344                check_ercd(ercd, E_OK);
345
346                check_point(12);
347                ercd = ext_tsk();
348
349                check_point(0);
350
351        case 3:
352                check_point(16);
353                ercd = loc_mtx(MTX1);
354                check_ercd(ercd, E_OK);
355
356                ercd = loc_mtx(MTX2);
357                check_ercd(ercd, E_OK);
358
359                check_point(17);
360                ercd = ext_tsk();
361
362                check_point(0);
363
364        case 4:
365                check_point(21);
366                ercd = loc_mtx(MTX1);
367                check_ercd(ercd, E_OK);
368
369                ercd = loc_mtx(MTX2);
370                check_ercd(ercd, E_OK);
371
372                check_point(22);
373                ercd = chg_pri(TASK1, HIGH_PRIORITY);
374                check_ercd(ercd, E_OK);
375
376                check_point(23);
377                ercd = rot_rdq(TPRI_SELF);
378                check_ercd(ercd, E_OK);
379
380                check_point(24);
381                ercd = slp_tsk();
382                check_ercd(ercd, E_OK);
383
384                check_point(29);
385                ercd = ext_tsk();
386
387                check_point(0);
388
389        default:
390                check_point(0);
391        }
392        check_point(0);
393}
394
395void
396task3(intptr_t exinf)
397{
398        ER_UINT ercd;
399        PRI             tskpri;
400        T_RMTX  rmtx;
401
402        check_point(10);
403        ercd = loc_mtx(MTX1);
404        check_ercd(ercd, E_OK);
405
406        check_point(13);
407        ercd = ref_mtx(MTX1, &rmtx);
408        check_ercd(ercd, E_OK);
409
410        check_assert(rmtx.htskid == TASK3);
411
412        check_assert(rmtx.wtskid == TSK_NONE);
413
414        ercd = get_pri(TPRI_SELF, &tskpri);
415        check_ercd(ercd, E_OK);
416
417        check_assert(tskpri == HIGH_PRIORITY);
418
419        ercd = unl_mtx(MTX1);
420        check_ercd(ercd, E_OK);
421
422        ercd = slp_tsk();
423        check_ercd(ercd, E_OK);
424
425        check_point(27);
426        ercd = loc_mtx(MTX1);
427        check_ercd(ercd, E_OK);
428
429        check_point(31);
430        ercd = get_pri(TPRI_SELF, &tskpri);
431        check_ercd(ercd, E_OK);
432
433        check_assert(tskpri == HIGH_PRIORITY);
434
435        ercd = ext_tsk();
436
437        check_point(0);
438}
439
440void
441task4(intptr_t exinf)
442{
443        ER_UINT ercd;
444        PRI             tskpri;
445        T_RMTX  rmtx;
446
447        check_point(26);
448        ercd = loc_mtx(MTX2);
449        check_ercd(ercd, E_OK);
450
451        check_point(30);
452        ercd = ref_mtx(MTX1, &rmtx);
453        check_ercd(ercd, E_OK);
454
455        check_assert(rmtx.htskid == TASK3);
456
457        check_assert(rmtx.wtskid == TSK_NONE);
458
459        ercd = ref_mtx(MTX2, &rmtx);
460        check_ercd(ercd, E_OK);
461
462        check_assert(rmtx.htskid == TASK4);
463
464        check_assert(rmtx.wtskid == TSK_NONE);
465
466        ercd = get_pri(TPRI_SELF, &tskpri);
467        check_ercd(ercd, E_OK);
468
469        check_assert(tskpri == HIGH_PRIORITY);
470
471        ercd = ext_tsk();
472
473        check_point(0);
474}
詳しい使い方は TracBrowser を参照してください。