source: asp_ewarm/asp-1.7.0/extension/mutex/test/test_mutex8.c@ 61

Last change on this file since 61 was 61, checked in by ertl-honda, 11 years ago

ASP for EWARM のコミット.

File size: 18.5 KB
Line 
1/*
2 * TOPPERS Software
3 * Toyohashi Open Platform for Embedded Real-Time Systems
4 *
5 * Copyright (C) 2009 by Embedded and Real-Time Systems Laboratory
6 * Graduate School of Information Science, Nagoya Univ., JAPAN
7 *
8 * ã‹L’˜ìŒ ŽÒ‚́CˆÈ‰º‚Ì(1)`(4)‚ÌðŒ‚ð–ž‚½‚·ê‡‚ÉŒÀ‚èC–{ƒ\ƒtƒgƒEƒF
9 * ƒAi–{ƒ\ƒtƒgƒEƒFƒA‚ð‰ü•Ï‚µ‚½‚à‚Ì‚ðŠÜ‚ށDˆÈ‰º“¯‚¶j‚ðŽg—pE•¡»E‰ü
10 * •ÏEÄ”z•ziˆÈ‰ºC—˜—p‚ƌĂԁj‚·‚邱‚Ƃ𖳏ž‚Å‹–‘ø‚·‚éD
11 * (1) –{ƒ\ƒtƒgƒEƒFƒA‚ðƒ\[ƒXƒR[ƒh‚ÌŒ`‚Å—˜—p‚·‚éê‡‚ɂ́Cã‹L‚Ì’˜ì
12 * Œ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’肪C‚»‚Ì‚Ü‚Ü‚ÌŒ`‚Ń\[
13 * ƒXƒR[ƒh’†‚ÉŠÜ‚Ü‚ê‚Ä‚¢‚邱‚ƁD
14 * (2) –{ƒ\ƒtƒgƒEƒFƒA‚ðCƒ‰ƒCƒuƒ‰ƒŠŒ`Ž®‚ȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg
15 * —p‚Å‚«‚éŒ`‚ōĔz•z‚·‚éê‡‚ɂ́CÄ”z•z‚É”º‚¤ƒhƒLƒ…
16ƒƒ“ƒgi—˜—p
17 * ŽÒƒ}ƒjƒ…
18ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜ìŒ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L
19 * ‚Ì–³•ÛØ‹K’è‚ðŒfÚ‚·‚邱‚ƁD
20 * (3) –{ƒ\ƒtƒgƒEƒFƒA‚ðC‹@Ší‚É‘g‚ݍž‚ނȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg
21 * —p‚Å‚«‚È‚¢Œ`‚ōĔz•z‚·‚éê‡‚ɂ́CŽŸ‚Ì‚¢‚¸‚ê‚©‚ÌðŒ‚ð–ž‚½‚·‚±
22 * ‚ƁD
23 * (a) Ä”z•z‚É”º‚¤ƒhƒLƒ…
24ƒƒ“ƒgi—˜—pŽÒƒ}ƒjƒ…
25ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜
26 * ìŒ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’è‚ðŒfÚ‚·‚邱‚ƁD
27 * (b) Ä”z•z‚ÌŒ`‘Ô‚ðC•Ê‚É’è‚ß‚é•û–@‚É‚æ‚Á‚āCTOPPERSƒvƒƒWƒFƒNƒg‚É
28 * •ñ‚·‚邱‚ƁD
29 * (4) –{ƒ\ƒtƒgƒEƒFƒA‚Ì—˜—p‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚é‚¢‚©‚Ȃ鑹
30 * ŠQ‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð–Ɛӂ·‚邱‚ƁD
31 * ‚Ü‚½C–{ƒ\ƒtƒgƒEƒFƒA‚̃†[ƒU‚Ü‚½‚̓Gƒ“ƒhƒ†[ƒU‚©‚ç‚Ì‚¢‚©‚Ȃ闝
32 * —R‚ÉŠî‚­¿‹‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð
33 * –Ɛӂ·‚邱‚ƁD
34 *
35 * –{ƒ\ƒtƒgƒEƒFƒA‚́C–³•ÛØ‚Å’ñ‹Ÿ‚³‚ê‚Ä‚¢‚é‚à‚Ì‚Å‚ ‚éDã‹L’˜ìŒ ŽÒ‚¨
36 * ‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚́C–{ƒ\ƒtƒgƒEƒFƒA‚ÉŠÖ‚µ‚āC“Á’è‚ÌŽg—p–Ú“I
37 * ‚ɑ΂·‚é“K‡«‚àŠÜ‚߂āC‚¢‚©‚È‚é•ÛØ‚às‚í‚È‚¢D‚Ü‚½C–{ƒ\ƒtƒgƒEƒF
38 * ƒA‚Ì—˜—p‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚½‚¢‚©‚Ȃ鑹ŠQ‚ÉŠÖ‚µ‚Ä‚àC‚»
39 * ‚̐ӔC‚𕉂í‚È‚¢D
40 *
41 * @(#) $Id: test_mutex8.c 1696 2010-01-01 16:01:25Z ertl-hiro $
42 */
43
44/*
45 * ƒ~ƒ…
46[ƒeƒbƒNƒX‚̃eƒXƒg(8)
47 *
48 * yƒeƒXƒg‚Ì–Ú“Iz
49 *
50 * —Dæ“xãŒÀƒ~ƒ…
51[ƒeƒbƒNƒX‚ɑ΂µ‚āCchg_pri‚É”º‚¤ƒ~ƒ…
52[ƒeƒbƒNƒXŠÖ˜A‚Ì
53 * —Dæ“x•ÏXˆ—‚ð–Ô—…
54“I‚ɃeƒXƒg‚·‚éD‚½‚¾‚µCchange_priority‚Æ
55 * mutex_calc_priority‚Ì“à—e‚É‚Í“¥‚ݍž‚Ü‚È‚¢D
56 *
57 * yƒeƒXƒg€–ځz
58 *
59 * (A) ƒ^ƒXƒN‚̃x[ƒX—Dæ“x‚̕ύXˆ—ichg_prij
60 * (A-1) ‘Ώۃ^ƒXƒN‚ªŽÀs‚Å‚«‚éó‘ԂŁCƒ~ƒ…
61[ƒeƒbƒNƒX‚ðƒƒbƒN‚µ‚Ä
62 * ‚¢‚È‚¢ê‡‚ɁC“¯‚¶—Dæ“x“à‚Å‚Ì—Dæ‡ˆÊ‚ªÅ’á‚ɂȂ邱‚Æ
63 * (A-2) ‘Ώۃ^ƒXƒN‚ªŽÀs‚Å‚«‚éó‘ԂŁC—Dæ“xãŒÀƒ~ƒ…
64[ƒeƒbƒNƒXˆÈ
65 * ŠO‚̃~ƒ…
66[ƒeƒbƒNƒX‚Ì‚Ý‚ðƒƒbƒN‚µ‚Ä‚¢‚éê‡‚ɁC“¯‚¶—Dæ“x
67 * “à‚Å‚Ì—Dæ‡ˆÊ‚ªÅ’á‚ɂȂ邱‚Æ
68 * (A-3) ‘Ώۃ^ƒXƒN‚ªŽÀs‚Å‚«‚éó‘ԂŁC—Dæ“xãŒÀƒ~ƒ…
69[ƒeƒbƒNƒX‚ð
70 * ƒƒbƒN‚µ‚Ä‚¢‚éê‡‚ɁC“¯‚¶—Dæ“x“à‚Å‚Ì—Dæ‡ˆÊ‚ª•Ï‚í‚ç‚È
71 * ‚¢‚±‚Æ
72 * (A-4) ‘Ώۃ^ƒXƒN‚ª‘Ò‚¿ó‘ԂŁC—Dæ“x‡‚Ì‘Ò‚¿s—ñ‚ɂ‚Ȃª‚ê‚Ä‚¨
73 * ‚èCƒ~ƒ…
74[ƒeƒbƒNƒX‚ðƒƒbƒN‚µ‚Ä‚¢‚È‚¢ê‡‚ɁC—Dæ“x‚ª³‚µ
75 * ‚­•ÏX‚³‚êC“¯‚¶—Dæ“x“à‚ł̏‡˜‚ªÅŒã‚ɂȂ邱‚Æ
76 * (A-5) ‘Ώۃ^ƒXƒN‚ª‘Ò‚¿ó‘ԂŁC—Dæ“x‡‚Ì‘Ò‚¿s—ñ‚ɂ‚Ȃª‚ê‚Ä‚¨
77 * ‚èC—Dæ“xãŒÀƒ~ƒ…
78[ƒeƒbƒNƒXˆÈŠO‚̃~ƒ…
79[ƒeƒbƒNƒX‚Ì‚Ý‚ðƒƒb
80 * ƒN‚µ‚Ä‚¢‚éê‡‚ɁC—Dæ“x‚ª³‚µ‚­•ÏX‚³‚êC“¯‚¶—Dæ“x“à‚Å
81 * ‚̏‡˜‚ªÅŒã‚ɂȂ邱‚Æ
82 * (A-6) ‘Ώۃ^ƒXƒN‚ª‘Ò‚¿ó‘ԂŁC—Dæ“x‡‚Ì‘Ò‚¿s—ñ‚ɂ‚Ȃª‚ê‚Ä‚¨
83 * ‚èC—Dæ“xãŒÀƒ~ƒ…
84[ƒeƒbƒNƒX‚ðƒƒbƒN‚µ‚Ä‚¢‚éê‡‚ɁC“¯‚¶
85 * —Dæ“x“à‚ł̏‡˜‚ª•Ï‚í‚ç‚È‚¢‚±‚Æ
86 * (B) ƒ^ƒXƒN‚̃x[ƒX—Dæ“x‚̕ύXˆ—ichg_prij‚ÌE_ILUSEƒGƒ‰[
87 * (B-1) ‘Ώۃ^ƒXƒN‚ªƒƒbƒN‚µ‚Ä‚¢‚éƒ~ƒ…
88[ƒeƒbƒNƒX‚̏ãŒÀ—Dæ“x‚æ‚è
89 * ‚àCƒx[ƒX—Dæ“x‚ð‚‚­‚µ‚悤‚Æ‚µ‚½ŽžCE_ILUSEƒGƒ‰[‚É‚È‚é
90 * ‚±‚Æ
91 * (B-2) ‘Ώۃ^ƒXƒN‚ª—Dæ“xãŒÀƒ~ƒ…
92[ƒeƒbƒNƒX‚ðƒƒbƒN‚µ‚Ä‚¢‚Ä‚àC
93 * ƒƒbƒN‚µ‚Ä‚¢‚éƒ~ƒ…
94[ƒeƒbƒNƒX‚̏ãŒÀ—Dæ“x‚æ‚è‚àCƒx[ƒX—D
95 * æ“x‚ð‚‚­‚µ‚悤‚Æ‚µ‚È‚¢ê‡‚ɂ́CE_ILUSEƒGƒ‰[‚É‚È‚ç‚È‚¢
96 * ‚±‚Æ
97 * (B-3) ‘Ώۃ^ƒXƒN‚ªƒƒbƒN‚ð‘Ò‚Á‚Ä‚¢‚éƒ~ƒ…
98[ƒeƒbƒNƒX‚̏ãŒÀ—Dæ“x
99 * ‚æ‚è‚àCƒx[ƒX—Dæ“x‚ð‚‚­‚µ‚悤‚Æ‚µ‚½ŽžCE_ILUSEƒGƒ‰[‚É
100 * ‚Ȃ邱‚Æ
101 * (B-4) ‘Ώۃ^ƒXƒN‚ª—Dæ“xãŒÀƒ~ƒ…
102[ƒeƒbƒNƒX‘Ò‚¿‚Å‚ ‚Á‚Ä‚àCƒƒb
103 * ƒN‚ð‘Ò‚Á‚Ä‚¢‚éƒ~ƒ…
104[ƒeƒbƒNƒX‚̏ãŒÀ—Dæ“x‚æ‚è‚àCƒx[ƒX—D
105 * æ“x‚ð‚‚­‚µ‚悤‚Æ‚µ‚È‚¢ê‡‚ɂ́CE_ILUSEƒGƒ‰[‚É‚È‚ç‚È‚¢
106 * ‚±‚Æ
107 *
108 * yƒeƒXƒg€–Ú‚ÌŽÀŒ»•û–@z
109 *
110 * (A-1)
111 * ’†—Dæ“xƒ^ƒXƒNiTASK1j‚ªŽÀs‰Â”\ó‘Ô‚ÌŽž‚ɁC‚—Dæ“xƒ^ƒXƒN
112 * iTASK5j‚©‚çTASK1‚ð’á—Dæ“x‚Échg_pri‚·‚é‚ƁCŽÀs‰Â”\ó‘Ô‚Ì‘¼‚Ì
113 * ’á—Dæ“xƒ^ƒXƒNiTASK4j‚æ‚è‚àC—Dæ‡ˆÊ‚ª’á‚­‚Ȃ邱‚Æ‚ðŠm”F‚·‚éD
114 * (A-2)
115 * ’†—Dæ“xƒ^ƒXƒNiTASK1j‚ª—Dæ“x‡ƒ~ƒ…
116[ƒeƒbƒNƒXiMTX3j‚ðƒƒbƒN
117 * ‚µCŽÀs‰Â”\ó‘Ô‚ÌŽž‚ɁC‚—Dæ“xƒ^ƒXƒNiTASK5j‚©‚çTASK1‚ð’á—D
118 * æ“x‚Échg_pri‚·‚é‚ƁCŽÀs‰Â”\ó‘Ô‚Ì‘¼‚Ì’á—Dæ“xƒ^ƒXƒNiTASK4j
119 * ‚æ‚è‚àC—Dæ‡ˆÊ‚ª’á‚­‚Ȃ邱‚Æ‚ðŠm”F‚·‚éD
120 * (A-3)
121 * ’†—Dæ“xƒ^ƒXƒNiTASK1j‚ª’†—Dæ“xãŒÀƒ~ƒ…
122[ƒeƒbƒNƒXiMTX1j‚ðƒƒb
123 * ƒN‚µCŽÀs‰Â”\ó‘Ô‚ÌŽž‚ɁC‚—Dæ“xƒ^ƒXƒNiTASK5j‚©‚çTASK1‚ð’á
124 * —Dæ“x‚Échg_pri‚·‚é‚ƁCTASK1‚Ì—Dæ“x‚ª•Ï‰»‚µ‚È‚¢‚±‚Æ‚ðŠm”F‚·‚éD
125 * ‚Ü‚½CŽÀs‰Â”\ó‘Ô‚Ì’†—Dæ“xƒ^ƒXƒN‚ð2‚iTASK2CTASK3j‚ð—pˆÓ‚µ
126 * ‚Ä‚¨‚«C—Dæ‡ˆÊ‚ª•Ï‚í‚ç‚È‚¢‚±‚Æ‚ðŠm”F‚·‚éD
127 * (A-4)
128 * ’†—Dæ“xƒ^ƒXƒNiTASK1j‚ª‚—Dæ“xãŒÀƒ~ƒ…
129[ƒeƒbƒNƒXiMTX2j‚ð‘Ò‚Á
130 * ‚Ä‚¢‚鎞‚ɁC‚—Dæ“xƒ^ƒXƒNiTASK5j‚©‚çTASK1‚ð’á—Dæ“x‚É
131 * chg_pri‚·‚é‚ƁCMTX2‚ð‘Ò‚Á‚Ä‚¢‚鑼‚Ì’á—Dæ“xƒ^ƒXƒNiTASK4j‚æ‚è
132 * ‚àC‘Ò‚¿s—ñ’†‚ł̏‡˜‚ªŒã‚ɂȂ邱‚Æ‚ðŠm”F‚·‚éD
133 * (A-5)
134 * ’†—Dæ“xƒ^ƒXƒNiTASK1j‚ª—Dæ“x‡ƒ~ƒ…
135[ƒeƒbƒNƒXiMTX3j‚ðƒƒbƒN
136 * ‚µC‚—Dæ“xãŒÀƒ~ƒ…
137[ƒeƒbƒNƒXiMTX2j‚ð‘Ò‚Á‚Ä‚¢‚鎞‚ɁC‚—Dæ“xƒ^
138 * ƒXƒNiTASK5j‚©‚çTASK1‚ð’á—Dæ“x‚Échg_pri‚·‚é‚ƁCMTX2‚ð‘Ò‚Á‚Ä‚¢
139 * ‚鑼‚Ì’á—Dæ“xƒ^ƒXƒNiTASK4j‚æ‚è‚àC‘Ò‚¿s—ñ’†‚ł̏‡˜‚ª•Ï‚í‚ç
140 * ‚È‚¢‚±‚Æ‚ðŠm”F‚·‚éD
141 * (A-6)
142 * ’†—Dæ“xƒ^ƒXƒNiTASK1j‚ª’†—Dæ“xãŒÀƒ~ƒ…
143[ƒeƒbƒNƒXiMTX1j‚ðƒƒb
144 * ƒN‚µC‚—Dæ“xãŒÀƒ~ƒ…
145[ƒeƒbƒNƒXiMTX2j‚ð‘Ò‚Á‚Ä‚¢‚鎞‚ɁC‚—D
146 * æ“xƒ^ƒXƒNiTASK5j‚©‚çTASK1‚ð’á—Dæ“x‚Échg_pri‚·‚é‚ƁCTASK1‚Ì
147 * —Dæ“x‚ª•Ï‰»‚µ‚È‚¢‚±‚Æ‚ðŠm”F‚·‚éD‚Ü‚½CMTX2‚ð‘Ò‚Á‚Ä‚¢‚é’†—Dæ
148 * “xƒ^ƒXƒN‚ð2‚iTASK2CTASK3j‚ð—pˆÓ‚µ‚Ä‚¨‚«C‘Ò‚¿s—ñ’†‚ł̏‡˜
149 * ‚ª•Ï‚í‚ç‚È‚¢‚±‚Æ‚ðŠm”F‚·‚éD
150 * (B-1)
151 * ’†—Dæ“xƒ^ƒXƒNiTASK1j‚ª’†—Dæ“xãŒÀƒ~ƒ…
152[ƒeƒbƒNƒXiMTX1j‚ðƒƒb
153 * ƒN‚µCŽÀs‰Â”\ó‘Ô‚ÌŽž‚ɁC‚—Dæ“xƒ^ƒXƒNiTASK5j‚©‚çTASK1‚ð‚
154 * —Dæ“x‚Échg_pri‚·‚é‚ƁCE_ILUSEƒGƒ‰[‚ɂȂ邱‚Æ‚ðŠm”F‚·‚éD
155 * (B-2)
156 * (A-3)‚̃eƒXƒg€–ڂŁCchg_pri‚ªE_ILUSEƒGƒ‰[‚É‚È‚ç‚È‚¢‚±‚Æ‚ÅŠm”F
157 * ‚Å‚«‚Ä‚¢‚éD
158 * (B-3)
159 * ’†—Dæ“xƒ^ƒXƒNiTASK2j‚ª’†—Dæ“xãŒÀƒ~ƒ…
160[ƒeƒbƒNƒXiMTX1j‚̃ƒb
161 * ƒN‚ð‘Ò‚Á‚Ä‚¢‚鎞‚ɁC‚—Dæ“xƒ^ƒXƒNiTASK5j‚©‚çTASK2‚ð‚—Dæ“x
162 * ‚Échg_pri‚·‚é‚ƁCE_ILUSEƒGƒ‰[‚ɂȂ邱‚Æ‚ðŠm”F‚·‚éD
163 * (B-4)
164 * (A-6)‚̃eƒXƒg€–ڂŁCchg_pri‚ªE_ILUSEƒGƒ‰[‚É‚È‚ç‚È‚¢‚±‚Æ‚ÅŠm”F
165 * ‚Å‚«‚Ä‚¢‚éD
166 *
167 * yŽg—pƒŠƒ\[ƒXz
168 *
169 * TASK1: ’†—Dæ“xƒ^ƒXƒNCƒƒCƒ“ƒ^ƒXƒNCÅ‰‚©‚ç‹N“®
170 * TASK2: ’†—Dæ“xƒ^ƒXƒN
171 * TASK3: ’†—Dæ“xƒ^ƒXƒN
172 * TASK4: ’á—Dæ“xƒ^ƒXƒN
173 * TASK5: ‚—Dæ“xƒ^ƒXƒN
174 * MTX1: ƒ~ƒ…
175[ƒeƒbƒNƒXiTA_CEILING‘®«CãŒÀ‚Í’†—Dæ“xj
176 * MTX2: ƒ~ƒ…
177[ƒeƒbƒNƒXiTA_CEILING‘®«CãŒÀ‚͍‚—Dæ“xj
178 * MTX3: ƒ~ƒ…
179[ƒeƒbƒNƒXiTA_TPRI‘®«j
180 *
181 * yƒeƒXƒgƒV[ƒPƒ“ƒXz
182 *
183 * == TASK1i—Dæ“xF’†j==
184 * call(set_bit_func(bit_mutex))
185 * 1: act_tsk(TASK4)
186 * 2: act_tsk(TASK5)
187 * // ‚FTASK5C’†FTASK1C’áFTASK4
188 * == TASK5i—Dæ“xF‚j==
189 * 3: chg_pri(TASK1, LOW_PRIORITY) ... (A-1)
190 * // ‚FTASK5C’áFTASK4¨TASK1
191 * 4: slp_tsk()
192 * == TASK4i—Dæ“xF’áj==
193 * 5: slp_tsk()
194 * == TASK1i‘±‚«j==
195 * 6: chg_pri(TSK_SELF, TPRI_INI)
196 *
197 * 7: loc_mtx(MTX3)
198 * 8: wup_tsk(TASK4)
199 * 9: wup_tsk(TASK5)
200 * // ‚FTASK5C’†FTASK1C’áFTASK4CMTX3FTASK1
201 * == TASK5i‘±‚«j==
202 * 10: chg_pri(TASK1, LOW_PRIORITY) ... (A-2)
203 * // ‚FTASK5C’áFTASK4¨TASK1CMTX3FTASK1
204 * 11: slp_tsk()
205 * == TASK4i‘±‚«j==
206 * 12: slp_tsk()
207 * == TASK1i‘±‚«j==
208 * 13: unl_mtx(MTX3)
209 * chg_pri(TSK_SELF, TPRI_INI)
210 *
211 * 14: loc_mtx(MTX1)
212 * 15: act_tsk(TASK2)
213 * 16: dis_dsp()
214 * 17: rot_rdq(MID_PRIORITY)
215 * 18: act_tsk(TASK3)
216 * // ’†FTASK2¨TASK1¨TASK3CMTX1FTASK1
217 * 19: wup_tsk(TASK5)
218 * // ‚FTASK5C’†FTASK2¨TASK1¨TASK3CMTX1FTASK1
219 * 20: ena_dsp()
220 * == TASK5i‘±‚«j==
221 * 21: chg_pri(TASK1, LOW_PRIORITY) ... (A-3)(B-2)
222 * // ‚FTASK5C’†FTASK2¨TASK1¨TASK3CMTX1FTASK1
223 * get_pri(TASK1, &tskpri)
224 * assert(tskpri == MID_PRIORITY)
225 * 22: slp_tsk()
226 * // ’†FTASK2¨TASK1¨TASK3CMTX1FTASK1
227 * == TASK2i‘±‚«j==
228 * 23: slp_tsk()
229 * // ’†FTASK1¨TASK3CMTX1FTASK1
230 * == TASK1i‘±‚«j==
231 * 24: unl_mtx(MTX1)
232 * // ’†FTASK3C’áFTASK1
233 * == TASK3i‘±‚«j==
234 * 25: slp_tsk()
235 * == TASK1i‘±‚«j==
236 * 26: chg_pri(TSK_SELF, TPRI_INI)
237 *
238 * 27: wup_tsk(TASK5)
239 * == TASK5i‘±‚«j==
240 * 28: loc_mtx(MTX2)
241 * 29: tslp_tsk(10) -> E_TMOUT
242 * == TASK1i‘±‚«j==
243 * 30: wup_tsk(TASK4)
244 * 31: loc_mtx(MTX2)
245 * == TASK4i‘±‚«j==
246 * 32: loc_mtx(MTX2)
247 * // MTX2FTASK5¨TASK1¨TASK4
248 * // ƒ^ƒCƒ€ƒAƒEƒg‘Ò‚¿
249 * // ‚FTASK5CMTX2FTASK5¨TASK1¨TASK4
250 * == TASK5i‘±‚«j==
251 * 33: chg_pri(TASK1, LOW_PRIORITY) ... (A-4)
252 * // ‚FTASK5CMTX2FTASK5¨TASK4¨TASK1
253 * 34: unl_mtx(MTX2)
254 * // ‚FTASK5¨TASK4CMTX2FTASK4¨TASK1
255 * 35: slp_tsk()
256 * // ‚FTASK4CMTX2FTASK4¨TASK1
257 * == TASK4i‘±‚«j==
258 * 36: unl_mtx(MTX2)
259 * // ‚FTASK1C’áFTASK4CMTX2FTASK1
260 * == TASK1i‘±‚«j==
261 * 37: unl_mtx(MTX2)
262 * // ’áFTASK1¨TASK4
263 * 38: chg_pri(TSK_SELF, TPRI_INI)
264 *
265 * 39: loc_mtx(MTX3)
266 * 40: wup_tsk(TASK5)
267 * // ‚FTASK5C’†FTASK1C’áFTASK4CMTX3FTASK1
268 * == TASK5i‘±‚«j==
269 * 41: loc_mtx(MTX2)
270 * 42: tslp_tsk(10) -> E_TMOUT
271 * == TASK1i‘±‚«j==
272 * 43: loc_mtx(MTX2)
273 * == TASK4i‘±‚«j==
274 * 44: loc_mtx(MTX2)
275 * // MTX2FTASK5¨TASK1¨TASK4CMTX3FTASK1
276 * // ƒ^ƒCƒ€ƒAƒEƒg‘Ò‚¿
277 * // ‚FTASK5CMTX2FTASK5¨TASK1¨TASK4CMTX3FTASK1
278 * == TASK5i‘±‚«j==
279 * 45: chg_pri(TASK1, LOW_PRIORITY) ... (A-5)
280 * // ‚FTASK5CMTX2FTASK5¨TASK4¨TASK1CMTX3FTASK1
281 * 46: unl_mtx(MTX2)
282 * // ‚FTASK5¨TASK4CMTX2FTASK4¨TASK1CMTX3FTASK1
283 * 47: slp_tsk()
284 * // ‚FTASK4CMTX2FTASK4¨TASK1CMTX3FTASK1
285 * == TASK4i‘±‚«j==
286 * 48: unl_mtx(MTX2)
287 * // ‚FTASK1C’áFTASK4CMTX2FTASK1CMTX3FTASK1
288 * == TASK1i‘±‚«j==
289 * 49: unl_mtx(MTX2)
290 * // ’áFTASK1¨TASK4CMTX3FTASK1
291 * 50: unl_mtx(MTX3)
292 * // ’áFTASK1¨TASK4
293 * 51: ter_tsk(TASK4)
294 * 52: chg_pri(TSK_SELF, TPRI_INI)
295 *
296 * 53: loc_mtx(MTX1)
297 * 54: wup_tsk(TASK5)
298 * // ‚FTASK5C’†FTASK1CMTX1FTASK1
299 * == TASK5i‘±‚«j==
300 * 55: loc_mtx(MTX2)
301 * 56: tslp_tsk(10) -> E_TMOUT
302 * // ’†FTASK1CMTX1FTASK1CMTX2FTASK5
303 * == TASK1i‘±‚«j==
304 * 57: wup_tsk(TASK2)
305 * 58: rot_rdq(MID_PRIORITY)
306 * == TASK2i‘±‚«j==
307 * 59: loc_mtx(MTX2)
308 * // ’†FTASK1CMTX1FTASK1CMTX2FTASK5¨TASK2
309 * == TASK1i‘±‚«j==
310 * 60: wup_tsk(TASK3)
311 * 61: loc_mtx(MTX2)
312 * // ’†FTASK3CMTX1FTASK1CMTX2FTASK5¨TASK2¨TASK1
313 * == TASK3i‘±‚«j==
314 * 62: loc_mtx(MTX2)
315 * // MTX1FTASK1CMTX2FTASK5¨TASK2¨TASK1¨TASK3
316 * // ƒ^ƒCƒ€ƒAƒEƒg‘Ò‚¿
317 * // ‚FTASK5CMTX1FTASK1CMTX2FTASK5¨TASK2¨TASK1¨TASK3
318 * == TASK5i‘±‚«j==
319 * 63: chg_pri(TASK1, LOW_PRIORITY) ... (A-6)(B-4)
320 * // ‚FTASK5CMTX1FTASK1CMTX2FTASK5¨TASK2¨TASK1¨TASK3
321 * get_pri(TASK1, &tskpri)
322 * assert(tskpri == MID_PRIORITY)
323 * 64: unl_mtx(MTX2)
324 * // ‚FTASK5¨TASK2CMTX1FTASK1CMTX2FTASK2¨TASK1¨TASK3
325 * 65: slp_tsk()
326 * // ‚FTASK2CMTX1FTASK1CMTX2FTASK2¨TASK1¨TASK3
327 * == TASK2i‘±‚«j==
328 * 66: unl_mtx(MTX2)
329 * // ‚FTASK1C’†FTASK2CMTX1FTASK1CMTX2FTASK1¨TASK3
330 * == TASK1i‘±‚«j==
331 * 67: unl_mtx(MTX2)
332 * // ‚FTASK3C’†FTASK1¨TASK2CMTX1FTASK1CMTX2FTASK3
333 * == TASK3i‘±‚«j==
334 * 68: unl_mtx(MTX2)
335 * // ’†FTASK3¨TASK1¨TASK2CMTX1FTASK1
336 * 69: ext_tsk() -> noreturn
337 * // ’†FTASK1¨TASK2CMTX1FTASK1
338 * == TASK1i‘±‚«j==
339 * 70: chg_pri(TSK_SELF, TPRI_INI)
340 * // ’†FTASK1¨TASK2CMTX1FTASK1
341 *
342 * 71: rot_rdq(MID_PRIORITY)
343 * // ’†FTASK2¨TASK1CMTX1FTASK1
344 * == TASK2i‘±‚«j==
345 * 72: loc_mtx(MTX1)
346 * // ’†FTASK1CMTX1FTASK1¨TASK2
347 * == TASK1i‘±‚«j==
348 * 73: wup_tsk(TASK5)
349 * // ‚FTASK5C’†FTASK1CMTX1FTASK1¨TASK2
350 * == TASK5i‘±‚«j==
351 * 74: chg_pri(TASK1, HIGH_PRIORITY) -> E_ILUSE ... (B-1)
352 * 75: chg_pri(TASK2, HIGH_PRIORITY) -> E_ILUSE ... (B-3)
353 * 76: ext_tsk() -> noreturn
354 * // ’†FTASK1CMTX1FTASK1¨TASK2
355 * == TASK1i‘±‚«j==
356 * 77: unl_mtx(MTX1)
357 * // ’†FTASK1¨TASK2CMTX1FTASK2
358 * 78: ext_tsk() -> noreturn
359 * == TASK2i‘±‚«j==
360 * 79: unl_mtx(MTX1)
361 * 80: END
362 */
363
364#include <kernel.h>
365#include <t_syslog.h>
366#include "syssvc/logtask.h"
367#include "kernel_cfg.h"
368#include "test_lib.h"
369#include "test_mutex8.h"
370
371extern ER bit_mutex(void);
372
373void
374task1(intptr_t exinf)
375{
376 ER ercd;
377
378 set_bit_func(bit_mutex);
379
380 check_point(1);
381 ercd = act_tsk(TASK4);
382 check_ercd(ercd, E_OK);
383
384 check_point(2);
385 ercd = act_tsk(TASK5);
386 check_ercd(ercd, E_OK);
387
388 check_point(6);
389 ercd = chg_pri(TSK_SELF, TPRI_INI);
390 check_ercd(ercd, E_OK);
391
392 check_point(7);
393 ercd = loc_mtx(MTX3);
394 check_ercd(ercd, E_OK);
395
396 check_point(8);
397 ercd = wup_tsk(TASK4);
398 check_ercd(ercd, E_OK);
399
400 check_point(9);
401 ercd = wup_tsk(TASK5);
402 check_ercd(ercd, E_OK);
403
404 check_point(13);
405 ercd = unl_mtx(MTX3);
406 check_ercd(ercd, E_OK);
407
408 ercd = chg_pri(TSK_SELF, TPRI_INI);
409 check_ercd(ercd, E_OK);
410
411 check_point(14);
412 ercd = loc_mtx(MTX1);
413 check_ercd(ercd, E_OK);
414
415 check_point(15);
416 ercd = act_tsk(TASK2);
417 check_ercd(ercd, E_OK);
418
419 check_point(16);
420 ercd = dis_dsp();
421 check_ercd(ercd, E_OK);
422
423 check_point(17);
424 ercd = rot_rdq(MID_PRIORITY);
425 check_ercd(ercd, E_OK);
426
427 check_point(18);
428 ercd = act_tsk(TASK3);
429 check_ercd(ercd, E_OK);
430
431 check_point(19);
432 ercd = wup_tsk(TASK5);
433 check_ercd(ercd, E_OK);
434
435 check_point(20);
436 ercd = ena_dsp();
437 check_ercd(ercd, E_OK);
438
439 check_point(24);
440 ercd = unl_mtx(MTX1);
441 check_ercd(ercd, E_OK);
442
443 check_point(26);
444 ercd = chg_pri(TSK_SELF, TPRI_INI);
445 check_ercd(ercd, E_OK);
446
447 check_point(27);
448 ercd = wup_tsk(TASK5);
449 check_ercd(ercd, E_OK);
450
451 check_point(30);
452 ercd = wup_tsk(TASK4);
453 check_ercd(ercd, E_OK);
454
455 check_point(31);
456 ercd = loc_mtx(MTX2);
457 check_ercd(ercd, E_OK);
458
459 check_point(37);
460 ercd = unl_mtx(MTX2);
461 check_ercd(ercd, E_OK);
462
463 check_point(38);
464 ercd = chg_pri(TSK_SELF, TPRI_INI);
465 check_ercd(ercd, E_OK);
466
467 check_point(39);
468 ercd = loc_mtx(MTX3);
469 check_ercd(ercd, E_OK);
470
471 check_point(40);
472 ercd = wup_tsk(TASK5);
473 check_ercd(ercd, E_OK);
474
475 check_point(43);
476 ercd = loc_mtx(MTX2);
477 check_ercd(ercd, E_OK);
478
479 check_point(49);
480 ercd = unl_mtx(MTX2);
481 check_ercd(ercd, E_OK);
482
483 check_point(50);
484 ercd = unl_mtx(MTX3);
485 check_ercd(ercd, E_OK);
486
487 check_point(51);
488 ercd = ter_tsk(TASK4);
489 check_ercd(ercd, E_OK);
490
491 check_point(52);
492 ercd = chg_pri(TSK_SELF, TPRI_INI);
493 check_ercd(ercd, E_OK);
494
495 check_point(53);
496 ercd = loc_mtx(MTX1);
497 check_ercd(ercd, E_OK);
498
499 check_point(54);
500 ercd = wup_tsk(TASK5);
501 check_ercd(ercd, E_OK);
502
503 check_point(57);
504 ercd = wup_tsk(TASK2);
505 check_ercd(ercd, E_OK);
506
507 check_point(58);
508 ercd = rot_rdq(MID_PRIORITY);
509 check_ercd(ercd, E_OK);
510
511 check_point(60);
512 ercd = wup_tsk(TASK3);
513 check_ercd(ercd, E_OK);
514
515 check_point(61);
516 ercd = loc_mtx(MTX2);
517 check_ercd(ercd, E_OK);
518
519 check_point(67);
520 ercd = unl_mtx(MTX2);
521 check_ercd(ercd, E_OK);
522
523 check_point(70);
524 ercd = chg_pri(TSK_SELF, TPRI_INI);
525 check_ercd(ercd, E_OK);
526
527 check_point(71);
528 ercd = rot_rdq(MID_PRIORITY);
529 check_ercd(ercd, E_OK);
530
531 check_point(73);
532 ercd = wup_tsk(TASK5);
533 check_ercd(ercd, E_OK);
534
535 check_point(77);
536 ercd = unl_mtx(MTX1);
537 check_ercd(ercd, E_OK);
538
539 check_point(78);
540 ercd = ext_tsk();
541
542 check_point(0);
543}
544
545void
546task2(intptr_t exinf)
547{
548 ER ercd;
549
550 check_point(23);
551 ercd = slp_tsk();
552 check_ercd(ercd, E_OK);
553
554 check_point(59);
555 ercd = loc_mtx(MTX2);
556 check_ercd(ercd, E_OK);
557
558 check_point(66);
559 ercd = unl_mtx(MTX2);
560 check_ercd(ercd, E_OK);
561
562 check_point(72);
563 ercd = loc_mtx(MTX1);
564 check_ercd(ercd, E_OK);
565
566 check_point(79);
567 ercd = unl_mtx(MTX1);
568 check_ercd(ercd, E_OK);
569
570 check_finish(80);
571
572 check_point(0);
573}
574
575void
576task3(intptr_t exinf)
577{
578 ER ercd;
579
580 check_point(25);
581 ercd = slp_tsk();
582 check_ercd(ercd, E_OK);
583
584 check_point(62);
585 ercd = loc_mtx(MTX2);
586 check_ercd(ercd, E_OK);
587
588 check_point(68);
589 ercd = unl_mtx(MTX2);
590 check_ercd(ercd, E_OK);
591
592 check_point(69);
593 ercd = ext_tsk();
594
595 check_point(0);
596}
597
598void
599task4(intptr_t exinf)
600{
601 ER ercd;
602
603 check_point(5);
604 ercd = slp_tsk();
605 check_ercd(ercd, E_OK);
606
607 check_point(12);
608 ercd = slp_tsk();
609 check_ercd(ercd, E_OK);
610
611 check_point(32);
612 ercd = loc_mtx(MTX2);
613 check_ercd(ercd, E_OK);
614
615 check_point(36);
616 ercd = unl_mtx(MTX2);
617 check_ercd(ercd, E_OK);
618
619 check_point(44);
620 ercd = loc_mtx(MTX2);
621 check_ercd(ercd, E_OK);
622
623 check_point(48);
624 ercd = unl_mtx(MTX2);
625 check_ercd(ercd, E_OK);
626
627 check_point(0);
628}
629
630void
631task5(intptr_t exinf)
632{
633 ER ercd;
634 PRI tskpri;
635
636 check_point(3);
637 ercd = chg_pri(TASK1, LOW_PRIORITY);
638 check_ercd(ercd, E_OK);
639
640 check_point(4);
641 ercd = slp_tsk();
642 check_ercd(ercd, E_OK);
643
644 check_point(10);
645 ercd = chg_pri(TASK1, LOW_PRIORITY);
646 check_ercd(ercd, E_OK);
647
648 check_point(11);
649 ercd = slp_tsk();
650 check_ercd(ercd, E_OK);
651
652 check_point(21);
653 ercd = chg_pri(TASK1, LOW_PRIORITY);
654 check_ercd(ercd, E_OK);
655
656 ercd = get_pri(TASK1, &tskpri);
657 check_ercd(ercd, E_OK);
658 check_assert(tskpri == MID_PRIORITY);
659
660 check_point(22);
661 ercd = slp_tsk();
662 check_ercd(ercd, E_OK);
663
664 check_point(28);
665 ercd = loc_mtx(MTX2);
666 check_ercd(ercd, E_OK);
667
668 check_point(29);
669 ercd = tslp_tsk(10);
670 check_ercd(ercd, E_TMOUT);
671
672 check_point(33);
673 ercd = chg_pri(TASK1, LOW_PRIORITY);
674 check_ercd(ercd, E_OK);
675
676 check_point(34);
677 ercd = unl_mtx(MTX2);
678 check_ercd(ercd, E_OK);
679
680 check_point(35);
681 ercd = slp_tsk();
682 check_ercd(ercd, E_OK);
683
684 check_point(41);
685 ercd = loc_mtx(MTX2);
686 check_ercd(ercd, E_OK);
687
688 check_point(42);
689 ercd = tslp_tsk(10);
690 check_ercd(ercd, E_TMOUT);
691
692 check_point(45);
693 ercd = chg_pri(TASK1, LOW_PRIORITY);
694 check_ercd(ercd, E_OK);
695
696 check_point(46);
697 ercd = unl_mtx(MTX2);
698 check_ercd(ercd, E_OK);
699
700 check_point(47);
701 ercd = slp_tsk();
702 check_ercd(ercd, E_OK);
703
704 check_point(55);
705 ercd = loc_mtx(MTX2);
706 check_ercd(ercd, E_OK);
707
708 check_point(56);
709 ercd = tslp_tsk(10);
710 check_ercd(ercd, E_TMOUT);
711
712 check_point(63);
713 ercd = chg_pri(TASK1, LOW_PRIORITY);
714 check_ercd(ercd, E_OK);
715
716 ercd = get_pri(TASK1, &tskpri);
717 check_ercd(ercd, E_OK);
718 check_assert(tskpri == MID_PRIORITY);
719
720 check_point(64);
721 ercd = unl_mtx(MTX2);
722 check_ercd(ercd, E_OK);
723
724 check_point(65);
725 ercd = slp_tsk();
726 check_ercd(ercd, E_OK);
727
728 check_point(74);
729 ercd = chg_pri(TASK1, HIGH_PRIORITY);
730 check_ercd(ercd, E_ILUSE);
731
732 check_point(75);
733 ercd = chg_pri(TASK2, HIGH_PRIORITY);
734 check_ercd(ercd, E_ILUSE);
735
736 check_point(76);
737 ercd = ext_tsk();
738
739 check_point(0);
740}
Note: See TracBrowser for help on using the repository browser.