source: test/test_sem1.c @ 7

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

TOPPERS/ASP 1.9.1

ファイルサイズ: 13.8 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 *              ¥»¥Þ¥Õ¥©µ¡Çœ€Î¥Æ¥¹¥È(1)
42 *
43 * ¡Ú¥Æ¥¹¥È€ÎÌÜŪ¡Û
44 *
45 *  sig_sem¡€wai_sem¡€CRE_SEM€òÌÖÍåŪ€Ë¥Æ¥¹¥È€¹€ë¡¥
46 *  €¿€À€·¡€CRE_SEM€Î¥š¥é¡Œ€Î¥Æ¥¹¥È€Ïœü€¯¡¥
47 *
48 * ¡Ú¥Æ¥¹¥È¹àÌÜ¡Û
49 *
50 *      (A) sig_sem€ÎÀÅŪ¥š¥é¡Œ€Î¥Æ¥¹¥È
51 *              (A-1) È󥿥¹¥¯¥³¥ó¥Æ¥­¥¹¥È€«€é€ÎžÆœÐ€·
52 *              (A-2) CPU¥í¥Ã¥¯ŸõÂÖ€«€é€ÎžÆœÐ€·
53 *              (A-3) semid€¬ÉÔÀµ¡ÊŸ®€µ€¹€®€ë¡Ë
54 *              (A-4) semid€¬ÉÔÀµ¡ÊÂ瀭€¹€®€ë¡Ë
55 *      (B) sig_sem€Ë€è€ê¥»¥Þ¥Õ¥©ÂÔ€ÁŸõÂրΥ¿¥¹¥¯€¬ÂÔ€Á²òœü€µ€ì€ë
56 *              (B-1) ÂÔ€Á²òœü€µ€ì€¿¥¿¥¹¥¯€ËÀڀꎹ€ï€ë
57 *              (B-2) ¥Ç¥£¥¹¥Ñ¥Ã¥ÁÊÝαŸõÂրǡ€Àڀꎹ€ï€é€Ê€€
58 *              (B-3) ÂÔ€Á²òœü€µ€ì€¿¥¿¥¹¥¯€¬¶¯À©ÂÔ€ÁŸõÂրǡ€Àڀꎹ€ï€é€Ê€€
59 *              (B-4) ÂÔ€Á²òœü€µ€ì€¿¥¿¥¹¥¯€¬Í¥ÀèÅÙ€¬Ä〯¡€Àڀꎹ€ï€é€Ê€€
60 *      (C) sig_sem€Ë€è€ê¥»¥Þ¥Õ¥©€Î»ñž»¿ô€¬1Áý€š€ë
61 *              (C-1) ¥»¥Þ¥Õ¥©€Î»ñž»¿ô€¬0€«€é1€Ë€Ê€ë
62 *              (C-2) ¥»¥Þ¥Õ¥©€Î»ñž»¿ô€¬1€«€é2€Ë€Ê€ë
63 *      (D) sig_sem€¬E_QOVR¥š¥é¡Œ€È€Ê€ë
64 *              (D-1) ¥»¥Þ¥Õ¥©€ÎºÇÂç»ñž»¿ô€¬1€Î»þ
65 *              (D-2) ¥»¥Þ¥Õ¥©€ÎºÇÂç»ñž»¿ô€¬2€Î»þ
66 *      (E) wai_sem€ÎÀÅŪ¥š¥é¡Œ€Î¥Æ¥¹¥È
67 *              (E-1) È󥿥¹¥¯¥³¥ó¥Æ¥­¥¹¥È€«€é€ÎžÆœÐ€·
68 *              (E-2) CPU¥í¥Ã¥¯ŸõÂÖ€«€é€ÎžÆœÐ€·
69 *              (E-3) ¥Ç¥£¥¹¥Ñ¥Ã¥Á¶Ø»ßŸõÂÖ€«€é€ÎžÆœÐ€·
70 *              (E-4) ³ä¹þ€ßÍ¥ÀèÅÙ¥Þ¥¹¥¯Á޲òœü€Ç€Ê€€ŸõÂÖ€«€é€ÎžÆœÐ€·
71 *              (E-5) semid€¬ÉÔÀµ¡ÊŸ®€µ€¹€®€ë¡Ë
72 *              (E-6) semid€¬ÉÔÀµ¡ÊÂ瀭€¹€®€ë¡Ë
73 *      (F) wai_sem€Ë€è€ê¥»¥Þ¥Õ¥©€Î»ñž»¿ô€¬1žº€ë
74 *              (F-1) ¥»¥Þ¥Õ¥©€Î»ñž»¿ô€¬1€«€é0€Ë€Ê€ë
75 *              (F-2) ¥»¥Þ¥Õ¥©€Î»ñž»¿ô€¬2€«€é1€Ë€Ê€ë
76 *      (G) wai_sem€Ë€è€ê¥»¥Þ¥Õ¥©ÂÔ€ÁŸõÂրˀʀë
77 *              (G-1) TA_TNULL°À­€Î¥»¥Þ¥Õ¥©€Ç¡€ÂԀÀƀ€€ë¥¿¥¹¥¯€¬€Ê€«€Ã€¿Ÿì¹ç
78 *              (G-2) TA_TNULL°À­€Î¥»¥Þ¥Õ¥©€Ç¡€ÂԀÀƀ€€ë¥¿¥¹¥¯€¬€¢€Ã€¿Ÿì¹ç
79 *              (G-3) TA_TPRI°À­€Î¥»¥Þ¥Õ¥©€Ç¡€ÂԀÀƀ€€ë¥¿¥¹¥¯€¬€Ê€«€Ã€¿Ÿì¹ç
80 *              (G-4) TA_TPRI°À­€Î¥»¥Þ¥Õ¥©€Ç¡€Í¥ÀèÅÙ€¬¹â€€¥¿¥¹¥¯€¬ÂԀÀƀ€€ëŸì¹ç
81 *              (G-5) TA_TPRI°À­€Î¥»¥Þ¥Õ¥©€Ç¡€Í¥ÀèÅÙ€¬Æ±€ž¥¿¥¹¥¯€¬ÂԀÀƀ€€ëŸì¹ç
82 *              (G-6) TA_TPRI°À­€Î¥»¥Þ¥Õ¥©€Ç¡€Í¥ÀèÅÙ€¬Ä ¥¿¥¹¥¯€¬ÂԀÀƀ€€ëŸì¹ç
83 *      (H) ¥»¥Þ¥Õ¥©ÂÔ€ÁŸõÂÖ€¬¶¯À©²òœü€µ€ì€ë
84 *      (I) ¥»¥Þ¥Õ¥©ÂÔ€ÁŸõÂրΎր˥»¥Þ¥Õ¥©€¬œéŽü²œ€µ€ì€ë
85 *      (J) ¥»¥Þ¥Õ¥©€Î»ñž»¿ô€ÎœéŽüÃÍ€¬Àµ€·€¯ÀßÄꀵ€ì€ë
86 *              (J-1) ¥»¥Þ¥Õ¥©€Î»ñž»¿ô€ÎœéŽüÃÍ€¬0
87 *              (J-2) ¥»¥Þ¥Õ¥©€Î»ñž»¿ô€ÎœéŽüÃÍ€¬1
88 *              (J-3) ¥»¥Þ¥Õ¥©€Î»ñž»¿ô€ÎœéŽüÃÍ€¬2
89 *
90 * ¡Ú»ÈÍѥ꥜¡Œ¥¹¡Û
91 *
92 *      TASK1: ÃæÍ¥ÀèÅÙ¥¿¥¹¥¯¡€TA_ACT°À­
93 *      TASK2: ¹âÍ¥ÀèÅÙ¥¿¥¹¥¯
94 *      TASK3: ÄãÍ¥ÀèÅÙ¥¿¥¹¥¯
95 *      TASK4: ÃæÍ¥ÀèÅÙ¥¿¥¹¥¯
96 *      TASK5: ÃæÍ¥ÀèÅÙ¥¿¥¹¥¯
97 *      ALM1:  ¥¢¥é¡Œ¥à¥Ï¥ó¥É¥é
98 *  SEM1:  TA_NULL°À­¡€œéŽü»ñž»¿ô1¡€ºÇÂç»ñž»¿ô1
99 *  SEM2:  TA_NULL°À­¡€œéŽü»ñž»¿ô2¡€ºÇÂç»ñž»¿ô2
100 *  SEM3:  TA_TPRI°À­¡€œéŽü»ñž»¿ô0¡€ºÇÂç»ñž»¿ô1
101 *
102 * ¡Ú¥Æ¥¹¥È¥·¡Œ¥±¥ó¥¹¡Û
103 *
104 *      == TASK1¡ÊÍ¥ÀèÅÙ¡§Ãæ¡Ë==
105 *  1:  ref_sem(SEM1, &rsem)
106 *              assert(rsem.wtskid == TSK_NONE)
107 *              assert(rsem.semcnt == 1)                        ... (J-2)
108 *      ref_sem(SEM2, &rsem)
109 *              assert(rsem.wtskid == TSK_NONE)
110 *              assert(rsem.semcnt == 2)                        ... (J-3)
111 *      ref_sem(SEM3, &rsem)
112 *              assert(rsem.wtskid == TSK_NONE)
113 *              assert(rsem.semcnt == 0)                        ... (J-1)
114 *      2:      loc_cpu()
115 *              sig_sem(SEM1) -> E_CTX                          ... (A-2)
116 *              wai_sem(SEM1) -> E_CTX                          ... (E-2)
117 *              unl_cpu()
118 *              dis_dsp()
119 *              wai_sem(SEM1) -> E_CTX                          ... (E-3)
120 *              ena_dsp()
121 *              chg_ipm(TMAX_INTPRI)
122 *              wai_sem(SEM1) -> E_CTX                          ... (E-4)
123 *              chg_ipm(TIPM_ENAALL)
124 *              sig_sem(0) -> E_ID                                      ... (A-3)
125 *              wai_sem(0) -> E_ID                                      ... (E-5)
126 *              sig_sem(TNUM_SEMID+1) -> E_ID           ... (A-4)
127 *              wai_sem(TNUM_SEMID+1) -> E_ID           ... (E-6)
128 *      3:      act_tsk(TASK3)
129 *      4:      slp_tsk()
130 *      == TASK3¡ÊÍ¥ÀèÅÙ¡§Äã¡Ë==
131 *      5:      wai_sem(SEM1)                                           ... (F-1)
132 *  6:  ref_sem(SEM1, &rsem)
133 *              assert(rsem.wtskid == TSK_NONE)
134 *              assert(rsem.semcnt == 0)
135 *      7:      sta_alm(ALM1, 10)
136 *      8:      wai_sem(SEM1)                                           ... (G-1)
137 *      == ALM1 ==
138 *      9:      sig_sem(SEM1) -> E_CTX                          ... (A-1)
139 *              wai_sem(SEM1) -> E_CTX                          ... (E-1)
140 *      10:     iwup_tsk(TASK1)
141 *      11:     RETURN
142 *      == TASK1¡Ê³€­¡Ë==
143 *      12:     act_tsk(TASK2)
144 *      == TASK2¡ÊÍ¥ÀèÅÙ¡§¹â¡Ë==
145 *      13:     wai_sem(SEM1)                                           ... (G-2)
146 *      == TASK1¡Ê³€­¡Ë==
147 *  14: ref_sem(SEM1, &rsem)
148 *              assert(rsem.wtskid == TASK3)
149 *              assert(rsem.semcnt == 0)
150 *      15:     sig_sem(SEM1)                                           ... (B-4)
151 *      16:     sig_sem(SEM1)                                           ... (B-1)
152 *      == TASK2¡Ê³€­¡Ë==
153 *      17:     wai_sem(SEM1)                                           ... (G-1)
154 *      == TASK1¡Ê³€­¡Ë==
155 *      18: dis_dsp()
156 *      19:     sig_sem(SEM1)                                           ... (B-2)
157 *      20:     ena_dsp()
158 *      == TASK2¡Ê³€­¡Ë==
159 *      21:     wai_sem(SEM1)                                           ... (G-1)
160 *      == TASK1¡Ê³€­¡Ë==
161 *      22: sus_tsk(TASK2)
162 *      23:     sig_sem(SEM1)                                           ... (B-3)
163 *      24: sig_sem(SEM1)                                               ... (C-1)
164 *      25: sig_sem(SEM1) -> E_QOVR                             ... (D-1)
165 *  26: ref_sem(SEM1, &rsem)
166 *              assert(rsem.wtskid == TSK_NONE)
167 *              assert(rsem.semcnt == 1)
168 *      27:     rsm_tsk(TASK2)
169 *      == TASK2¡Ê³€­¡Ë==
170 *      28:     wai_sem(SEM2)                                           ... (F-2)
171 *  29: ref_sem(SEM2, &rsem)
172 *              assert(rsem.wtskid == TSK_NONE)
173 *              assert(rsem.semcnt == 1)
174 *      30:     wai_sem(SEM2)                                           ... (F-1)
175 *      31: wai_sem(SEM2)                                               ... (G-1)
176 *      == TASK1¡Ê³€­¡Ë==
177 *      32:     sig_sem(SEM2)                                           ... (B-1)
178 *      == TASK2¡Ê³€­¡Ë==
179 *      33:     wai_sem(SEM3)                                           ... (G-3)
180 *      == TASK1¡Ê³€­¡Ë==
181 *      34:     sig_sem(SEM2)                                           ... (C-1)
182 *      35:     sig_sem(SEM2)                                           ... (C-2)
183 *  36: ref_sem(SEM2, &rsem)
184 *              assert(rsem.wtskid == TSK_NONE)
185 *              assert(rsem.semcnt == 2)
186 *      37:     sig_sem(SEM2) -> E_QOVR                         ... (D-2)
187 *  38: ref_sem(SEM2, &rsem)
188 *              assert(rsem.wtskid == TSK_NONE)
189 *              assert(rsem.semcnt == 2)
190 *      39:     tslp_tsk(10) -> E_TMOUT
191 *      == TASK3¡Ê³€­¡Ë==
192 *      40:     wai_sem(SEM3)                                           ... (G-4)
193 *      == TASK1¡Ê³€­¡Ë==
194 *      41:     act_tsk(TASK4)
195 *      42:     act_tsk(TASK5)
196 *      43:     rot_rdq(TPRI_SELF)
197 *      == TASK4¡ÊÍ¥ÀèÅÙ¡§Ãæ¡Ë==
198 *      44:     wai_sem(SEM3)                                           ... (G-6)
199 *      == TASK5¡ÊÍ¥ÀèÅÙ¡§Ãæ¡Ë==
200 *      45:     wai_sem(SEM3)                                           ... (G-5)
201 *      == TASK1¡Ê³€­¡Ë==
202 *      46:     sig_sem(SEM3)                                           ... (B-1)
203 *      == TASK2¡Ê³€­¡Ë==
204 *      47:     wai_sem(SEM1)
205 *              wai_sem(SEM1) -> E_RLWAI
206 *      == TASK1¡Ê³€­¡Ë==
207 *      48:     sig_sem(SEM3)                                           ... (B-4)
208 *      49:     tslp_tsk(10) -> E_TMOUT
209 *      == TASK4¡Ê³€­¡Ë==
210 *      50:     ext_tsk() -> noreturn
211 *      == TASK1¡Ê³€­¡Ë==
212 *      51:     sig_sem(SEM3)                                           ... (B-4)
213 *      52:     tslp_tsk(10) -> E_TMOUT
214 *      == TASK5¡Ê³€­¡Ë==
215 *      53:     ext_tsk() -> noreturn
216 *      == TASK1¡Ê³€­¡Ë==
217 *      54:     sig_sem(SEM3)                                           ... (B-4)
218 *      55:     tslp_tsk(10) -> E_TMOUT
219 *      == TASK3¡Ê³€­¡Ë==
220 *      56:     ext_tsk() -> noreturn
221 *      == TASK1¡Ê³€­¡Ë==
222 *      57: rel_wai(TASK2)                                              ... (H)
223 *      == TASK2¡Ê³€­¡Ë==
224 *      58:     wai_sem(SEM1) -> E_DLT
225 *      == TASK1¡Ê³€­¡Ë==
226 *      59: ini_sem(SEM1)                                               ... (I)
227 *      == TASK2¡Ê³€­¡Ë==
228 *      60: ext_tsk() -> noreturn
229 *      == TASK1¡Ê³€­¡Ë==
230 *      61: END
231 */
232
233#include <kernel.h>
234#include <test_lib.h>
235#include <t_syslog.h>
236#include "kernel_cfg.h"
237#include "test_sem1.h"
238
239/* DO NOT DELETE THIS LINE -- gentest depends on it. */
240
241void
242alarm1_handler(intptr_t exinf)
243{
244        ER_UINT ercd;
245
246        check_point(9);
247        ercd = sig_sem(SEM1);
248        check_ercd(ercd, E_CTX);
249
250        ercd = wai_sem(SEM1);
251        check_ercd(ercd, E_CTX);
252
253        check_point(10);
254        ercd = iwup_tsk(TASK1);
255        check_ercd(ercd, E_OK);
256
257        check_point(11);
258        return;
259
260        check_point(0);
261}
262
263void
264task1(intptr_t exinf)
265{
266        ER_UINT ercd;
267        T_RSEM  rsem;
268
269        test_start(__FILE__);
270
271        check_point(1);
272        ercd = ref_sem(SEM1, &rsem);
273        check_ercd(ercd, E_OK);
274
275        check_assert(rsem.wtskid == TSK_NONE);
276
277        check_assert(rsem.semcnt == 1);
278
279        ercd = ref_sem(SEM2, &rsem);
280        check_ercd(ercd, E_OK);
281
282        check_assert(rsem.wtskid == TSK_NONE);
283
284        check_assert(rsem.semcnt == 2);
285
286        ercd = ref_sem(SEM3, &rsem);
287        check_ercd(ercd, E_OK);
288
289        check_assert(rsem.wtskid == TSK_NONE);
290
291        check_assert(rsem.semcnt == 0);
292
293        check_point(2);
294        ercd = loc_cpu();
295        check_ercd(ercd, E_OK);
296
297        ercd = sig_sem(SEM1);
298        check_ercd(ercd, E_CTX);
299
300        ercd = wai_sem(SEM1);
301        check_ercd(ercd, E_CTX);
302
303        ercd = unl_cpu();
304        check_ercd(ercd, E_OK);
305
306        ercd = dis_dsp();
307        check_ercd(ercd, E_OK);
308
309        ercd = wai_sem(SEM1);
310        check_ercd(ercd, E_CTX);
311
312        ercd = ena_dsp();
313        check_ercd(ercd, E_OK);
314
315        ercd = chg_ipm(TMAX_INTPRI);
316        check_ercd(ercd, E_OK);
317
318        ercd = wai_sem(SEM1);
319        check_ercd(ercd, E_CTX);
320
321        ercd = chg_ipm(TIPM_ENAALL);
322        check_ercd(ercd, E_OK);
323
324        ercd = sig_sem(0);
325        check_ercd(ercd, E_ID);
326
327        ercd = wai_sem(0);
328        check_ercd(ercd, E_ID);
329
330        ercd = sig_sem(TNUM_SEMID+1);
331        check_ercd(ercd, E_ID);
332
333        ercd = wai_sem(TNUM_SEMID+1);
334        check_ercd(ercd, E_ID);
335
336        check_point(3);
337        ercd = act_tsk(TASK3);
338        check_ercd(ercd, E_OK);
339
340        check_point(4);
341        ercd = slp_tsk();
342        check_ercd(ercd, E_OK);
343
344        check_point(12);
345        ercd = act_tsk(TASK2);
346        check_ercd(ercd, E_OK);
347
348        check_point(14);
349        ercd = ref_sem(SEM1, &rsem);
350        check_ercd(ercd, E_OK);
351
352        check_assert(rsem.wtskid == TASK3);
353
354        check_assert(rsem.semcnt == 0);
355
356        check_point(15);
357        ercd = sig_sem(SEM1);
358        check_ercd(ercd, E_OK);
359
360        check_point(16);
361        ercd = sig_sem(SEM1);
362        check_ercd(ercd, E_OK);
363
364        check_point(18);
365        ercd = dis_dsp();
366        check_ercd(ercd, E_OK);
367
368        check_point(19);
369        ercd = sig_sem(SEM1);
370        check_ercd(ercd, E_OK);
371
372        check_point(20);
373        ercd = ena_dsp();
374        check_ercd(ercd, E_OK);
375
376        check_point(22);
377        ercd = sus_tsk(TASK2);
378        check_ercd(ercd, E_OK);
379
380        check_point(23);
381        ercd = sig_sem(SEM1);
382        check_ercd(ercd, E_OK);
383
384        check_point(24);
385        ercd = sig_sem(SEM1);
386        check_ercd(ercd, E_OK);
387
388        check_point(25);
389        ercd = sig_sem(SEM1);
390        check_ercd(ercd, E_QOVR);
391
392        check_point(26);
393        ercd = ref_sem(SEM1, &rsem);
394        check_ercd(ercd, E_OK);
395
396        check_assert(rsem.wtskid == TSK_NONE);
397
398        check_assert(rsem.semcnt == 1);
399
400        check_point(27);
401        ercd = rsm_tsk(TASK2);
402        check_ercd(ercd, E_OK);
403
404        check_point(32);
405        ercd = sig_sem(SEM2);
406        check_ercd(ercd, E_OK);
407
408        check_point(34);
409        ercd = sig_sem(SEM2);
410        check_ercd(ercd, E_OK);
411
412        check_point(35);
413        ercd = sig_sem(SEM2);
414        check_ercd(ercd, E_OK);
415
416        check_point(36);
417        ercd = ref_sem(SEM2, &rsem);
418        check_ercd(ercd, E_OK);
419
420        check_assert(rsem.wtskid == TSK_NONE);
421
422        check_assert(rsem.semcnt == 2);
423
424        check_point(37);
425        ercd = sig_sem(SEM2);
426        check_ercd(ercd, E_QOVR);
427
428        check_point(38);
429        ercd = ref_sem(SEM2, &rsem);
430        check_ercd(ercd, E_OK);
431
432        check_assert(rsem.wtskid == TSK_NONE);
433
434        check_assert(rsem.semcnt == 2);
435
436        check_point(39);
437        ercd = tslp_tsk(10);
438        check_ercd(ercd, E_TMOUT);
439
440        check_point(41);
441        ercd = act_tsk(TASK4);
442        check_ercd(ercd, E_OK);
443
444        check_point(42);
445        ercd = act_tsk(TASK5);
446        check_ercd(ercd, E_OK);
447
448        check_point(43);
449        ercd = rot_rdq(TPRI_SELF);
450        check_ercd(ercd, E_OK);
451
452        check_point(46);
453        ercd = sig_sem(SEM3);
454        check_ercd(ercd, E_OK);
455
456        check_point(48);
457        ercd = sig_sem(SEM3);
458        check_ercd(ercd, E_OK);
459
460        check_point(49);
461        ercd = tslp_tsk(10);
462        check_ercd(ercd, E_TMOUT);
463
464        check_point(51);
465        ercd = sig_sem(SEM3);
466        check_ercd(ercd, E_OK);
467
468        check_point(52);
469        ercd = tslp_tsk(10);
470        check_ercd(ercd, E_TMOUT);
471
472        check_point(54);
473        ercd = sig_sem(SEM3);
474        check_ercd(ercd, E_OK);
475
476        check_point(55);
477        ercd = tslp_tsk(10);
478        check_ercd(ercd, E_TMOUT);
479
480        check_point(57);
481        ercd = rel_wai(TASK2);
482        check_ercd(ercd, E_OK);
483
484        check_point(59);
485        ercd = ini_sem(SEM1);
486        check_ercd(ercd, E_OK);
487
488        check_finish(61);
489        check_point(0);
490}
491
492void
493task2(intptr_t exinf)
494{
495        ER_UINT ercd;
496        T_RSEM  rsem;
497
498        check_point(13);
499        ercd = wai_sem(SEM1);
500        check_ercd(ercd, E_OK);
501
502        check_point(17);
503        ercd = wai_sem(SEM1);
504        check_ercd(ercd, E_OK);
505
506        check_point(21);
507        ercd = wai_sem(SEM1);
508        check_ercd(ercd, E_OK);
509
510        check_point(28);
511        ercd = wai_sem(SEM2);
512        check_ercd(ercd, E_OK);
513
514        check_point(29);
515        ercd = ref_sem(SEM2, &rsem);
516        check_ercd(ercd, E_OK);
517
518        check_assert(rsem.wtskid == TSK_NONE);
519
520        check_assert(rsem.semcnt == 1);
521
522        check_point(30);
523        ercd = wai_sem(SEM2);
524        check_ercd(ercd, E_OK);
525
526        check_point(31);
527        ercd = wai_sem(SEM2);
528        check_ercd(ercd, E_OK);
529
530        check_point(33);
531        ercd = wai_sem(SEM3);
532        check_ercd(ercd, E_OK);
533
534        check_point(47);
535        ercd = wai_sem(SEM1);
536        check_ercd(ercd, E_OK);
537
538        ercd = wai_sem(SEM1);
539        check_ercd(ercd, E_RLWAI);
540
541        check_point(58);
542        ercd = wai_sem(SEM1);
543        check_ercd(ercd, E_DLT);
544
545        check_point(60);
546        ercd = ext_tsk();
547
548        check_point(0);
549}
550
551void
552task3(intptr_t exinf)
553{
554        ER_UINT ercd;
555        T_RSEM  rsem;
556
557        check_point(5);
558        ercd = wai_sem(SEM1);
559        check_ercd(ercd, E_OK);
560
561        check_point(6);
562        ercd = ref_sem(SEM1, &rsem);
563        check_ercd(ercd, E_OK);
564
565        check_assert(rsem.wtskid == TSK_NONE);
566
567        check_assert(rsem.semcnt == 0);
568
569        check_point(7);
570        ercd = sta_alm(ALM1, 10);
571        check_ercd(ercd, E_OK);
572
573        check_point(8);
574        ercd = wai_sem(SEM1);
575        check_ercd(ercd, E_OK);
576
577        check_point(40);
578        ercd = wai_sem(SEM3);
579        check_ercd(ercd, E_OK);
580
581        check_point(56);
582        ercd = ext_tsk();
583
584        check_point(0);
585}
586
587void
588task4(intptr_t exinf)
589{
590        ER_UINT ercd;
591
592        check_point(44);
593        ercd = wai_sem(SEM3);
594        check_ercd(ercd, E_OK);
595
596        check_point(50);
597        ercd = ext_tsk();
598
599        check_point(0);
600}
601
602void
603task5(intptr_t exinf)
604{
605        ER_UINT ercd;
606
607        check_point(45);
608        ercd = wai_sem(SEM3);
609        check_ercd(ercd, E_OK);
610
611        check_point(53);
612        ercd = ext_tsk();
613
614        check_point(0);
615}
詳しい使い方は TracBrowser を参照してください。