source: mypx/extension/mutex/test/test_mutex7.c @ 7

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

TOPPERS/ASP 1.9.1

ファイルサイズ: 16.3 KB
Rev 
[7]1/*
2 *  TOPPERS Software
3 *      Toyohashi Open Platform for Embedded Real-Time Systems
4 *
5 *  Copyright (C) 2008-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 *              ¥ß¥å¡Œ¥Æ¥Ã¥¯¥¹€Î¥Æ¥¹¥È(7)
42 *
43 * ¡Ú¥Æ¥¹¥È€ÎÌÜŪ¡Û
44 *
45 *  Í¥ÀèÅÙŸåžÂ¥ß¥å¡Œ¥Æ¥Ã¥¯¥¹€ËÂЀ·€Æ¡€¥¿¥¹¥¯€Î¶¯À©œªÎ»»þ€Î¥ß¥å¡Œ¥Æ¥Ã¥¯
46 *  ¥¹ŽØÏ¢€ÎœèÍý€òÌÖÍåŪ€Ë¥Æ¥¹¥È€¹€ë¡¥
47 *
48 * ¡Ú¥Æ¥¹¥È¹àÌÜ¡Û
49 *
50 *      (A) ¥¿¥¹¥¯€Î¶¯À©œªÎ»»þ¡Êter_tsk¡Ë
51 *              (A-1) ¥í¥Ã¥¯€·€Æ€€€¿¥ß¥å¡Œ¥Æ¥Ã¥¯¥¹¡Ê1€Ä¡Ë€¬¥í¥Ã¥¯²òœü€µ€ì€ë€³€È¡¥
52 *              (A-2) ¥í¥Ã¥¯€·€Æ€€€¿¥ß¥å¡Œ¥Æ¥Ã¥¯¥¹¡Ê1€Ä¡Ë€¬¥í¥Ã¥¯²òœü€µ€ì¡€¥í¥Ã
53 *                        ¥¯€òÂԀÀƀ€€¿¥¿¥¹¥¯€¬€œ€ì€ò¥í¥Ã¥¯€·¡€Í¥ÀèÅÙ€¬ÊѲœ€·¡€ÂÔ
54 *                        €Á²òœü€µ€ì€ë€³€È¡¥
55 *              (A-3) (A-2)€Î·ë²Ì¡€¥¿¥¹¥¯¥Ç¥£¥¹¥Ñ¥Ã¥Á€¬µ¯€³€ë€³€È¡¥
56 *              (A-4) ¥í¥Ã¥¯€·€Æ€€€¿¥ß¥å¡Œ¥Æ¥Ã¥¯¥¹¡ÊÊ£¿ô¡Ë€¬€¹€Ù€Æ¥í¥Ã¥¯²òœü€µ
57 *                        €ì€ë€³€È¡¥
58 *              (A-5) ¥í¥Ã¥¯€·€Æ€€€¿¥ß¥å¡Œ¥Æ¥Ã¥¯¥¹¡ÊÊ£¿ô¡Ë€¬¥í¥Ã¥¯²òœü€µ€ì¡€¥í¥Ã
59 *                        ¥¯€òÂԀÀƀ€€¿¥¿¥¹¥¯¡ÊÊ£¿ô¡Ë€¬€œ€ì€ò¥í¥Ã¥¯€·¡€Í¥ÀèÅÙ€¬ÊÑ
60 *                        ²œ€·¡€ÂÔ€Á²òœü€µ€ì€ë€³€È¡¥€œ€Î»þ€Ë¡€žå€Ç¥ß¥å¡Œ¥Æ¥Ã¥¯¥¹€ò
61 *                        ¥í¥Ã¥¯€·€¿¥¿¥¹¥¯¡ÊÀè€Ë¥í¥Ã¥¯€·€Æ€€€¿¥ß¥å¡Œ¥Æ¥Ã¥¯¥¹€òÂÔ€Ã
62 *                        €Æ€€€¿¥¿¥¹¥¯¡Ë€ÎÊý€¬¡€Í¥Àèœç°Ì€¬¹â€¯€Ê€ë€³€È¡¥
63 *              (A-6) (A-5)€Î·ë²Ì¡€¥¿¥¹¥¯¥Ç¥£¥¹¥Ñ¥Ã¥Á€¬µ¯€³€ë€³€È¡¥
64 *
65 * ¡Ú¥Æ¥¹¥È¹àÌ܀ΌžœÊýË¡¡Û
66 *
67 *      (A-1)
68 *              ÄãÍ¥ÀèÅÙ¥¿¥¹¥¯¡ÊTASK2¡Ë€Ë¥ß¥å¡Œ¥Æ¥Ã¥¯¥¹¡ÊMTX1¡Ë€ò¥í¥Ã¥¯€µ€»¡€ÊÌ
69 *              €Î¥¿¥¹¥¯¡ÊTASK1¡Ë€«€éTASK2€òter_tsk€¹€ë€È¡€¥í¥Ã¥¯€¬²òœü€µ€ì€ë€³
70 *              €È€ò³Îǧ€¹€ë¡¥
71 *      (A-2)
72 *              ÄãÍ¥ÀèÅÙ¥¿¥¹¥¯¡ÊTASK2¡Ë€ËÃæÍ¥ÀèÅÙŸåžÂ¥ß¥å¡Œ¥Æ¥Ã¥¯¥¹¡ÊMTX1¡Ë€ò¥í¥Ã
73 *              ¥¯€µ€»¡€ÊÌ€ÎÄãÍ¥ÀèÅÙ¥¿¥¹¥¯¡ÊTASK3¡Ë€ËMTX1€òÂÔ€¿€»€¿ŸõÂրǡ€¹âÍ¥
74 *              ÀèÅÙ¥¿¥¹¥¯¡ÊTASK1¡Ë€«€éTASK2€òter_tsk€¹€ë€È¡€TASK3€¬ÃæÍ¥ÀèÅÙ€Ë
75 *              €Ê€Ã€ÆÂÔ€Á²òœü€µ€ì€ë€³€È€ò³Îǧ€¹€ë¡¥
76 *      (A-3)
77 *              ÄãÍ¥ÀèÅÙ¥¿¥¹¥¯¡ÊTASK2¡Ë€ËÃæÍ¥ÀèÅÙŸåžÂ¥ß¥å¡Œ¥Æ¥Ã¥¯¥¹¡ÊMTX1¡Ë€ò¥í¥Ã
78 *              ¥¯€µ€»¡€ÊÌ€ÎÄãÍ¥ÀèÅÙ¥¿¥¹¥¯¡ÊTASK3¡Ë€ËMTX1€òÂÔ€¿€»€¿ŸõÂրǡ€ÊÌ€Î
79 *              ÄãÍ¥ÀèÅÙ¥¿¥¹¥¯¡ÊTASK1¡Ë€«€éTASK2€òter_tsk€¹€ë€È¡€TASK3€¬ÃæÍ¥Àè
80 *              ÅـˀʀÀÆÂÔ€Á²òœü€µ€ì¡€TASK3€ËÀڀꎹ€ï€ë€³€È€ò³Îǧ€¹€ë¡¥
81 *      (A-4)
82 *              ÄãÍ¥ÀèÅÙ¥¿¥¹¥¯¡ÊTASK2¡Ë€Ë¥ß¥å¡Œ¥Æ¥Ã¥¯¥¹€ò2€Ä¡ÊMTX1¡€MTX2¡Ë¥í¥Ã
83 *              ¥¯€µ€»¡€ỀΥ¿¥¹¥¯¡ÊTASK1¡Ë€«€éTASK2€òter_tsk€¹€ë€È¡€ÎŸÊý€Î¥í¥Ã
84 *              ¥¯€¬²òœü€µ€ì€ë€³€È€ò³Îǧ€¹€ë¡¥
85 *      (A-5)
86 *              ÄãÍ¥ÀèÅÙ¥¿¥¹¥¯¡ÊTASK2¡Ë€Ë¹âÍ¥ÀèÅÙŸåžÂ¥ß¥å¡Œ¥Æ¥Ã¥¯¥¹2€Ä¡ÊMTX1¡€
87 *              MTX2¡Ë€ò€³€Îœç€Ç¥í¥Ã¥¯€µ€»¡€ÊÌ€ÎÄãÍ¥ÀèÅÙ¥¿¥¹¥¯2€Ä¡ÊTASK3¡€
88 *              TASK4¡Ë€Ë€œ€ì€Ÿ€ì€Î¥í¥Ã¥¯€òÂÔ€¿€»€¿ŸõÂրǡ€¹âÍ¥ÀèÅÙ¥¿¥¹¥¯
89 *              ¡ÊTASK1¡Ë€«€éTASK2€òter_tsk€¹€ë€È¡€TASK3€ÈTASK4€¬ÃæÍ¥ÀèÅـˀʀÃ
90 *              €ÆÂÔ€Á²òœü€µ€ì€ë€³€È€ò³Îǧ€¹€ë¡¥€Þ€¿¡€Àè€Ë¥í¥Ã¥¯€·€Æ€€€¿¥ß¥å¡Œ
91 *              ¥Æ¥Ã¥¯¥¹¡ÊMTX1¡Ë€òÂԀÀƀ€€¿¥¿¥¹¥¯¡ÊTASK3¡Ë€¬¡€TASK4€è€ê€âÍ¥Àè
92 *              œç°Ì€¬¹â€¯€Ê€ë€³€È€ò³Îǧ€¹€ë¡¥
93 *      (A-6)
94 *              ÄãÍ¥ÀèÅÙ¥¿¥¹¥¯¡ÊTASK2¡Ë€Ë¹âÍ¥ÀèÅÙŸåžÂ¥ß¥å¡Œ¥Æ¥Ã¥¯¥¹2€Ä¡ÊMTX1¡€
95 *              MTX2¡Ë€ò€³€Îœç€Ç¥í¥Ã¥¯€µ€»¡€ÊÌ€ÎÄãÍ¥ÀèÅÙ¥¿¥¹¥¯2€Ä¡ÊTASK3¡€
96 *              TASK4¡Ë€Ë€œ€ì€Ÿ€ì€Î¥í¥Ã¥¯€òÂÔ€¿€»€¿ŸõÂրǡ€ÊÌ€ÎÄãÍ¥ÀèÅÙ¥¿¥¹¥¯
97 *              ¡ÊTASK1¡Ë€«€éTASK2 €òter_tsk€¹€ë€È¡€TASK3€ÈTASK4€¬ÃæÍ¥ÀèÅـˀʀÃ
98 *              €ÆÂÔ€Á²òœü€µ€ì¡€TASK3€ËÀڀꎹ€ï€ë€³€È€ò³Îǧ€¹€ë¡¥
99 *
100 * ¡Ú»ÈÍѥ꥜¡Œ¥¹¡Û
101 *
102 *      TASK1: ¹âÍ¥ÀèÅÙ¥¿¥¹¥¯¡€¥á¥€¥ó¥¿¥¹¥¯¡€ºÇœé€«€éµ¯Æ°
103 *      TASK2: ÄãÍ¥ÀèÅÙ¥¿¥¹¥¯
104 *      TASK3: ÄãÍ¥ÀèÅÙ¥¿¥¹¥¯
105 *      TASK4: ÄãÍ¥ÀèÅÙ¥¿¥¹¥¯
106 *      MTX1: ¥ß¥å¡Œ¥Æ¥Ã¥¯¥¹¡ÊTA_CEILING°À­¡€ŸåžÂ€ÏÃæÍ¥ÀèÅÙ¡Ë
107 *      MTX2: ¥ß¥å¡Œ¥Æ¥Ã¥¯¥¹¡ÊTA_CEILING°À­¡€ŸåžÂ€ÏÃæÍ¥ÀèÅÙ¡Ë
108 *
109 * ¡Ú¥Æ¥¹¥È¥·¡Œ¥±¥ó¥¹¡Û
110 *
111 *      == TASK1¡ÊÍ¥ÀèÅÙ¡§¹â¡Ë==
112 *              call(set_bit_func(bit_mutex))
113 *      1:      act_tsk(TASK2)
114 *      2:      slp_tsk()
115 *      //              Äã¡§TASK2
116 *      == TASK2-1¡ÊÍ¥ÀèÅÙ¡§Äã¡Ë==
117 *      3:      loc_mtx(MTX1)
118 *      //              Ãæ¡§TASK2¡€MTX1¡§TASK2
119 *      4:      wup_tsk(TASK1)
120 *      //              ¹â¡§TASK1¡€Ãæ¡§TASK2¡€MTX1¡§TASK2
121 *      == TASK1¡Ê³€­¡Ë==
122 *      5:      ter_tsk(TASK2)                  ... (A-1)
123 *      //              ¹â¡§TASK1
124 *      6:      ref_mtx(MTX1, &rmtx)
125 *              assert(rmtx.htskid == TSK_NONE)
126 *              assert(rmtx.wtskid == TSK_NONE)
127 *
128 *      7:      act_tsk(TASK2)
129 *              act_tsk(TASK3)
130 *      8:      slp_tsk()
131 *      //              Äã¡§TASK2¢ªTASK3
132 *      == TASK2-2¡ÊÍ¥ÀèÅÙ¡§Äã¡Ë==
133 *      9:      loc_mtx(MTX1)
134 *      //              Ãæ¡§TASK2¡€Äã¡§TASK3¡€MTX1¡§TASK2
135 *      10:     tslp_tsk(10) -> E_TMOUT
136 *      //              Äã¡§TASK3¡€MTX1¡§TASK2
137 *      == TASK3-1¡ÊÍ¥ÀèÅÙ¡§Äã¡Ë==
138 *      11:     loc_mtx(MTX1)
139 *      //              MTX1¡§TASK2¢ªTASK3
140 *      //              ¥¿¥€¥à¥¢¥Š¥Èžå
141 *      //              Ãæ¡§TASK2¡€MTX1¡§TASK2¢ªTASK3
142 *      == TASK2-2¡Ê³€­¡Ë==
143 *      12:     wup_tsk(TASK1)
144 *      //              ¹â¡§TASK1¡€Ãæ¡§TASK2¡€MTX1¡§TASK2¢ªTASK3
145 *      == TASK1¡Ê³€­¡Ë==
146 *      13:     ter_tsk(TASK2)                  ... (A-2)
147 *      //              ¹â¡§TASK1¡€Ãæ¡§TASK3¡€MTX1¡§TASK3
148 *      14:     ref_mtx(MTX1, &rmtx)
149 *              assert(rmtx.htskid == TASK3)
150 *              assert(rmtx.wtskid == TSK_NONE)
151 *              get_pri(TASK3, &tskpri)
152 *              assert(tskpri == MID_PRIORITY)
153 *      15:     ter_tsk(TASK3)
154 *      //              ¹â¡§TASK1
155 *
156 *      16:     act_tsk(TASK2)
157 *              act_tsk(TASK3)
158 *      17:     chg_pri(TSK_SELF, LOW_PRIORITY)
159 *      //              Äã¡§TASK2¢ªTASK3¢ªTASK1
160 *      == TASK2-3¡ÊÍ¥ÀèÅÙ¡§Äã¡Ë==
161 *      18:     loc_mtx(MTX1)
162 *      //              Ãæ¡§TASK2¡€Äã¡§TASK3¢ªTASK1¡€MTX1¡§TASK2
163 *      19:     slp_tsk()
164 *      //              Äã¡§TASK3¢ªTASK1¡€MTX1¡§TASK2
165 *      == TASK3-2¡ÊÍ¥ÀèÅÙ¡§Äã¡Ë==
166 *      20:     loc_mtx(MTX1)
167 *      //              Äã¡§TASK1¡€MTX1¡§TASK2¢ªTASK3
168 *      == TASK1¡Ê³€­¡Ë==
169 *      21:     ter_tsk(TASK2)                  ... (A-3)
170 *      //              Ãæ¡§TASK3¡€Äã¡§TASK1¡€MTX1¡§TASK3
171 *      == TASK3-2¡Ê³€­¡Ë==
172 *      22:     ref_mtx(MTX1, &rmtx)
173 *              assert(rmtx.htskid == TASK3)
174 *              assert(rmtx.wtskid == TSK_NONE)
175 *              get_pri(TASK3, &tskpri)
176 *              assert(tskpri == MID_PRIORITY)
177 *      23:     ext_tsk() -> noreturn
178 *      //              Äã¡§TASK1
179 *      == TASK1¡Ê³€­¡Ë==
180 *      24:     chg_pri(TSK_SELF, HIGH_PRIORITY)
181 *      //              ¹â¡§TASK1
182 *
183 *      25:     act_tsk(TASK2)
184 *      26:     slp_tsk()
185 *      //              Äã¡§TASK2
186 *      == TASK2-4¡ÊÍ¥ÀèÅÙ¡§Äã¡Ë==
187 *      27:     loc_mtx(MTX1)
188 *              loc_mtx(MTX2)
189 *      //              Ãæ¡§TASK2¡€MTX1¡§TASK2¡€MTX2¡§TASK2
190 *      28:     wup_tsk(TASK1)
191 *      //              ¹â¡§TASK1¡€Ãæ¡§TASK2¡€MTX1¡§TASK2¡€MTX2¡§TASK2
192 *      == TASK1¡Ê³€­¡Ë==
193 *      29:     ter_tsk(TASK2)                  ... (A-4)
194 *      //              ¹â¡§TASK1
195 *      30:     ref_mtx(MTX1, &rmtx)
196 *              assert(rmtx.htskid == TSK_NONE)
197 *              assert(rmtx.wtskid == TSK_NONE)
198 *              ref_mtx(MTX2, &rmtx)
199 *              assert(rmtx.htskid == TSK_NONE)
200 *              assert(rmtx.wtskid == TSK_NONE)
201 *
202 *      31:     act_tsk(TASK2)
203 *              act_tsk(TASK3)
204 *              act_tsk(TASK4)
205 *      32:     slp_tsk()
206 *      //              Äã¡§TASK2¢ªTASK3¢ªTASK4
207 *      == TASK2-5¡ÊÍ¥ÀèÅÙ¡§Äã¡Ë==
208 *      33:     loc_mtx(MTX1)
209 *              loc_mtx(MTX2)
210 *      //              Ãæ¡§TASK2¡€Äã¡§TASK3¢ªTASK4¡€MTX1¡§TASK2¡€MTX2¡§TASK2
211 *      34:     tslp_tsk(10) -> E_TMOUT
212 *      //              Äã¡§TASK3¢ªTASK4¡€MTX1¡§TASK2¡€MTX2¡§TASK2
213 *      == TASK3-3¡ÊÍ¥ÀèÅÙ¡§Äã¡Ë==
214 *      35:     loc_mtx(MTX1)
215 *      //              Äã¡§TASK4¡€MTX1¡§TASK2¢ªTASK3¡€MTX2¡§TASK2
216 *      == TASK4-1¡ÊÍ¥ÀèÅÙ¡§Äã¡Ë==
217 *      36:     loc_mtx(MTX2)
218 *      //              MTX1¡§TASK2¢ªTASK3¡€MTX2¡§TASK2¢ªTASK4
219 *      //              ¥¿¥€¥à¥¢¥Š¥Èžå
220 *      //              Ãæ¡§TASK2¡€MTX1¡§TASK2¢ªTASK3¡€MTX2¡§TASK2¢ªTASK4
221 *      == TASK2-5¡Ê³€­¡Ë==
222 *      37:     wup_tsk(TASK1)
223 *      //              ¹â¡§TASK1¡€Ãæ¡§TASK2¡€MTX1¡§TASK2¢ªTASK3¡€MTX2¡§TASK2¢ªTASK4
224 *      == TASK1¡Ê³€­¡Ë==
225 *      38:     ter_tsk(TASK2)                  ... (A-5)
226 *      //              ¹â¡§TASK1¡€Ãæ¡§TASK4¢ªTASK3¡€MTX1¡§TASK3¡€MTX2¡§TASK4
227 *      39:     ref_mtx(MTX1, &rmtx)
228 *              assert(rmtx.htskid == TASK3)
229 *              assert(rmtx.wtskid == TSK_NONE)
230 *              ref_mtx(MTX2, &rmtx)
231 *              assert(rmtx.htskid == TASK4)
232 *              assert(rmtx.wtskid == TSK_NONE)
233 *              get_pri(TASK3, &tskpri)
234 *              assert(tskpri == MID_PRIORITY)
235 *              get_pri(TASK4, &tskpri)
236 *              assert(tskpri == MID_PRIORITY)
237 *      40:     chg_pri(TSK_SELF, LOW_PRIORITY)
238 *      //              Ãæ¡§TASK4¢ªTASK3¡€Äã¡§TASK1¡€MTX1¡§TASK3¡€MTX2¡§TASK4
239 *      == TASK4-1¡Ê³€­¡Ë==
240 *      41:     ext_tsk() -> noreturn
241 *      //              Ãæ¡§TASK3¡€Äã¡§TASK1¡€MTX1¡§TASK3
242 *      == TASK3-3¡Ê³€­¡Ë==
243 *      42:     ext_tsk() -> noreturn
244 *      //              Äã¡§TASK1
245 *      == TASK1¡Ê³€­¡Ë==
246 *      43:     act_tsk(TASK2)
247 *              act_tsk(TASK3)
248 *              act_tsk(TASK4)
249 *      //              Äã¡§TASK1¢ªTASK2¢ªTASK3¢ªTASK4
250 *      44:     chg_pri(TSK_SELF, LOW_PRIORITY)
251 *      //              Äã¡§TASK2¢ªTASK3¢ªTASK4¢ªTASK1
252 *      == TASK2-6¡ÊÍ¥ÀèÅÙ¡§Äã¡Ë==
253 *      45:     loc_mtx(MTX1)
254 *              loc_mtx(MTX2)
255 *      //              Ãæ¡§TASK2¡€Äã¡§TASK3¢ªTASK4¢ªTASK1¡€MTX1¡§TASK2¡€MTX2¡§TASK2
256 *      46:     slp_tsk()
257 *      //              Äã¡§TASK3¢ªTASK4¢ªTASK1¡€MTX1¡§TASK2¡€MTX2¡§TASK2
258 *      == TASK3-4¡ÊÍ¥ÀèÅÙ¡§Äã¡Ë==
259 *      47:     loc_mtx(MTX1)
260 *      //              Äã¡§TASK4¢ªTASK1¡€MTX1¡§TASK2¢ªTASK3¡€MTX2¡§TASK2
261 *      == TASK4-2¡ÊÍ¥ÀèÅÙ¡§Äã¡Ë==
262 *      48:     loc_mtx(MTX2)
263 *      //              Äã¡§TASK1¡€MTX1¡§TASK2¢ªTASK3¡€MTX2¡§TASK2¢ªTASK4
264 *      == TASK1¡Ê³€­¡Ë==
265 *      49:     ter_tsk(TASK2)                  ... (A-6)
266 *      //              Ãæ¡§TASK4¢ªTASK3¡€Äã¡§TASK1¡€MTX1¡§TASK3¡€MTX2¡§TASK4
267 *      == TASK4-2¡Ê³€­¡Ë==
268 *      50:     ref_mtx(MTX1, &rmtx)
269 *              assert(rmtx.htskid == TASK3)
270 *              assert(rmtx.wtskid == TSK_NONE)
271 *              ref_mtx(MTX2, &rmtx)
272 *              assert(rmtx.htskid == TASK4)
273 *              assert(rmtx.wtskid == TSK_NONE)
274 *              get_pri(TASK3, &tskpri)
275 *              assert(tskpri == MID_PRIORITY)
276 *              get_pri(TASK4, &tskpri)
277 *              assert(tskpri == MID_PRIORITY)
278 *      51:     ext_tsk() -> noreturn
279 *      //              Ãæ¡§TASK3¡€Äã¡§TASK1¡€MTX1¡§TASK3
280 *      == TASK3-4¡Ê³€­¡Ë==
281 *      52:     ext_tsk() -> noreturn
282 *      //              Äã¡§TASK1
283 *      == TASK1¡Ê³€­¡Ë==
284 *      53:     END
285 */
286
287#include <kernel.h>
288#include <t_syslog.h>
289#include "kernel_cfg.h"
290#include "test_lib.h"
291#include "test_mutex7.h"
292
293extern ER       bit_mutex(void);
294
295/* DO NOT DELETE THIS LINE -- gentest depends on it. */
296
297void
298task1(intptr_t exinf)
299{
300        ER_UINT ercd;
301        PRI             tskpri;
302        T_RMTX  rmtx;
303
304        test_start(__FILE__);
305
306        set_bit_func(bit_mutex);
307
308        check_point(1);
309        ercd = act_tsk(TASK2);
310        check_ercd(ercd, E_OK);
311
312        check_point(2);
313        ercd = slp_tsk();
314        check_ercd(ercd, E_OK);
315
316        check_point(5);
317        ercd = ter_tsk(TASK2);
318        check_ercd(ercd, E_OK);
319
320        check_point(6);
321        ercd = ref_mtx(MTX1, &rmtx);
322        check_ercd(ercd, E_OK);
323
324        check_assert(rmtx.htskid == TSK_NONE);
325
326        check_assert(rmtx.wtskid == TSK_NONE);
327
328        check_point(7);
329        ercd = act_tsk(TASK2);
330        check_ercd(ercd, E_OK);
331
332        ercd = act_tsk(TASK3);
333        check_ercd(ercd, E_OK);
334
335        check_point(8);
336        ercd = slp_tsk();
337        check_ercd(ercd, E_OK);
338
339        check_point(13);
340        ercd = ter_tsk(TASK2);
341        check_ercd(ercd, E_OK);
342
343        check_point(14);
344        ercd = ref_mtx(MTX1, &rmtx);
345        check_ercd(ercd, E_OK);
346
347        check_assert(rmtx.htskid == TASK3);
348
349        check_assert(rmtx.wtskid == TSK_NONE);
350
351        ercd = get_pri(TASK3, &tskpri);
352        check_ercd(ercd, E_OK);
353
354        check_assert(tskpri == MID_PRIORITY);
355
356        check_point(15);
357        ercd = ter_tsk(TASK3);
358        check_ercd(ercd, E_OK);
359
360        check_point(16);
361        ercd = act_tsk(TASK2);
362        check_ercd(ercd, E_OK);
363
364        ercd = act_tsk(TASK3);
365        check_ercd(ercd, E_OK);
366
367        check_point(17);
368        ercd = chg_pri(TSK_SELF, LOW_PRIORITY);
369        check_ercd(ercd, E_OK);
370
371        check_point(21);
372        ercd = ter_tsk(TASK2);
373        check_ercd(ercd, E_OK);
374
375        check_point(24);
376        ercd = chg_pri(TSK_SELF, HIGH_PRIORITY);
377        check_ercd(ercd, E_OK);
378
379        check_point(25);
380        ercd = act_tsk(TASK2);
381        check_ercd(ercd, E_OK);
382
383        check_point(26);
384        ercd = slp_tsk();
385        check_ercd(ercd, E_OK);
386
387        check_point(29);
388        ercd = ter_tsk(TASK2);
389        check_ercd(ercd, E_OK);
390
391        check_point(30);
392        ercd = ref_mtx(MTX1, &rmtx);
393        check_ercd(ercd, E_OK);
394
395        check_assert(rmtx.htskid == TSK_NONE);
396
397        check_assert(rmtx.wtskid == TSK_NONE);
398
399        ercd = ref_mtx(MTX2, &rmtx);
400        check_ercd(ercd, E_OK);
401
402        check_assert(rmtx.htskid == TSK_NONE);
403
404        check_assert(rmtx.wtskid == TSK_NONE);
405
406        check_point(31);
407        ercd = act_tsk(TASK2);
408        check_ercd(ercd, E_OK);
409
410        ercd = act_tsk(TASK3);
411        check_ercd(ercd, E_OK);
412
413        ercd = act_tsk(TASK4);
414        check_ercd(ercd, E_OK);
415
416        check_point(32);
417        ercd = slp_tsk();
418        check_ercd(ercd, E_OK);
419
420        check_point(38);
421        ercd = ter_tsk(TASK2);
422        check_ercd(ercd, E_OK);
423
424        check_point(39);
425        ercd = ref_mtx(MTX1, &rmtx);
426        check_ercd(ercd, E_OK);
427
428        check_assert(rmtx.htskid == TASK3);
429
430        check_assert(rmtx.wtskid == TSK_NONE);
431
432        ercd = ref_mtx(MTX2, &rmtx);
433        check_ercd(ercd, E_OK);
434
435        check_assert(rmtx.htskid == TASK4);
436
437        check_assert(rmtx.wtskid == TSK_NONE);
438
439        ercd = get_pri(TASK3, &tskpri);
440        check_ercd(ercd, E_OK);
441
442        check_assert(tskpri == MID_PRIORITY);
443
444        ercd = get_pri(TASK4, &tskpri);
445        check_ercd(ercd, E_OK);
446
447        check_assert(tskpri == MID_PRIORITY);
448
449        check_point(40);
450        ercd = chg_pri(TSK_SELF, LOW_PRIORITY);
451        check_ercd(ercd, E_OK);
452
453        check_point(43);
454        ercd = act_tsk(TASK2);
455        check_ercd(ercd, E_OK);
456
457        ercd = act_tsk(TASK3);
458        check_ercd(ercd, E_OK);
459
460        ercd = act_tsk(TASK4);
461        check_ercd(ercd, E_OK);
462
463        check_point(44);
464        ercd = chg_pri(TSK_SELF, LOW_PRIORITY);
465        check_ercd(ercd, E_OK);
466
467        check_point(49);
468        ercd = ter_tsk(TASK2);
469        check_ercd(ercd, E_OK);
470
471        check_finish(53);
472        check_point(0);
473}
474
475static uint_t   task2_count = 0;
476
477void
478task2(intptr_t exinf)
479{
480        ER_UINT ercd;
481
482        switch (++task2_count) {
483        case 1:
484                check_point(3);
485                ercd = loc_mtx(MTX1);
486                check_ercd(ercd, E_OK);
487
488                check_point(4);
489                ercd = wup_tsk(TASK1);
490                check_ercd(ercd, E_OK);
491
492                check_point(0);
493
494        case 2:
495                check_point(9);
496                ercd = loc_mtx(MTX1);
497                check_ercd(ercd, E_OK);
498
499                check_point(10);
500                ercd = tslp_tsk(10);
501                check_ercd(ercd, E_TMOUT);
502
503                check_point(12);
504                ercd = wup_tsk(TASK1);
505                check_ercd(ercd, E_OK);
506
507                check_point(0);
508
509        case 3:
510                check_point(18);
511                ercd = loc_mtx(MTX1);
512                check_ercd(ercd, E_OK);
513
514                check_point(19);
515                ercd = slp_tsk();
516                check_ercd(ercd, E_OK);
517
518                check_point(0);
519
520        case 4:
521                check_point(27);
522                ercd = loc_mtx(MTX1);
523                check_ercd(ercd, E_OK);
524
525                ercd = loc_mtx(MTX2);
526                check_ercd(ercd, E_OK);
527
528                check_point(28);
529                ercd = wup_tsk(TASK1);
530                check_ercd(ercd, E_OK);
531
532                check_point(0);
533
534        case 5:
535                check_point(33);
536                ercd = loc_mtx(MTX1);
537                check_ercd(ercd, E_OK);
538
539                ercd = loc_mtx(MTX2);
540                check_ercd(ercd, E_OK);
541
542                check_point(34);
543                ercd = tslp_tsk(10);
544                check_ercd(ercd, E_TMOUT);
545
546                check_point(37);
547                ercd = wup_tsk(TASK1);
548                check_ercd(ercd, E_OK);
549
550                check_point(0);
551
552        case 6:
553                check_point(45);
554                ercd = loc_mtx(MTX1);
555                check_ercd(ercd, E_OK);
556
557                ercd = loc_mtx(MTX2);
558                check_ercd(ercd, E_OK);
559
560                check_point(46);
561                ercd = slp_tsk();
562                check_ercd(ercd, E_OK);
563
564                check_point(0);
565
566        default:
567                check_point(0);
568        }
569        check_point(0);
570}
571
572static uint_t   task3_count = 0;
573
574void
575task3(intptr_t exinf)
576{
577        ER_UINT ercd;
578        PRI             tskpri;
579        T_RMTX  rmtx;
580
581        switch (++task3_count) {
582        case 1:
583                check_point(11);
584                ercd = loc_mtx(MTX1);
585                check_ercd(ercd, E_OK);
586
587                check_point(0);
588
589        case 2:
590                check_point(20);
591                ercd = loc_mtx(MTX1);
592                check_ercd(ercd, E_OK);
593
594                check_point(22);
595                ercd = ref_mtx(MTX1, &rmtx);
596                check_ercd(ercd, E_OK);
597
598                check_assert(rmtx.htskid == TASK3);
599
600                check_assert(rmtx.wtskid == TSK_NONE);
601
602                ercd = get_pri(TASK3, &tskpri);
603                check_ercd(ercd, E_OK);
604
605                check_assert(tskpri == MID_PRIORITY);
606
607                check_point(23);
608                ercd = ext_tsk();
609
610                check_point(0);
611
612        case 3:
613                check_point(35);
614                ercd = loc_mtx(MTX1);
615                check_ercd(ercd, E_OK);
616
617                check_point(42);
618                ercd = ext_tsk();
619
620                check_point(0);
621
622        case 4:
623                check_point(47);
624                ercd = loc_mtx(MTX1);
625                check_ercd(ercd, E_OK);
626
627                check_point(52);
628                ercd = ext_tsk();
629
630                check_point(0);
631
632        default:
633                check_point(0);
634        }
635        check_point(0);
636}
637
638static uint_t   task4_count = 0;
639
640void
641task4(intptr_t exinf)
642{
643        ER_UINT ercd;
644        PRI             tskpri;
645        T_RMTX  rmtx;
646
647        switch (++task4_count) {
648        case 1:
649                check_point(36);
650                ercd = loc_mtx(MTX2);
651                check_ercd(ercd, E_OK);
652
653                check_point(41);
654                ercd = ext_tsk();
655
656                check_point(0);
657
658        case 2:
659                check_point(48);
660                ercd = loc_mtx(MTX2);
661                check_ercd(ercd, E_OK);
662
663                check_point(50);
664                ercd = ref_mtx(MTX1, &rmtx);
665                check_ercd(ercd, E_OK);
666
667                check_assert(rmtx.htskid == TASK3);
668
669                check_assert(rmtx.wtskid == TSK_NONE);
670
671                ercd = ref_mtx(MTX2, &rmtx);
672                check_ercd(ercd, E_OK);
673
674                check_assert(rmtx.htskid == TASK4);
675
676                check_assert(rmtx.wtskid == TSK_NONE);
677
678                ercd = get_pri(TASK3, &tskpri);
679                check_ercd(ercd, E_OK);
680
681                check_assert(tskpri == MID_PRIORITY);
682
683                ercd = get_pri(TASK4, &tskpri);
684                check_ercd(ercd, E_OK);
685
686                check_assert(tskpri == MID_PRIORITY);
687
688                check_point(51);
689                ercd = ext_tsk();
690
691                check_point(0);
692
693        default:
694                check_point(0);
695        }
696        check_point(0);
697}
詳しい使い方は TracBrowser を参照してください。