source: asp3_wo_tecs/trunk/test/test_mutex8.c@ 302

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

TECSレスのASP3の開発のため以下のtrunkからコピー
http://dev.toppers.jp/svn/asp3/branches/WO_TECS-3.C.0

File size: 20.9 KB
Line 
1/*
2 * TOPPERS Software
3 * Toyohashi Open Platform for Embedded Real-Time Systems
4 *
5 * Copyright (C) 2009-2015 by Embedded and Real-Time Systems Laboratory
6 * Graduate School of Information Science, Nagoya Univ., JAPAN
7 *
8 * 上記著作権者
9は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
10 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
11 * 変・再é…
12å¸ƒï¼ˆä»¥ä¸‹ï¼Œåˆ©ç”¨ã¨å‘¼ã¶ï¼‰ã™ã‚‹ã“とを無償で許諾する.
13 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
14 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
15 * スコード中に含まれていること.
16 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
17 * 用できる形で再é…
18å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é…
19å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
20 * 者
21マニュアルなど)に,上記の著作権表示,この利用条件および下記
22 * の無保証規定を掲載すること.
23 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
24 * 用できない形で再é…
25å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã„ずれかの条件を満たすこ
26 * と.
27 * (a) 再é…
28å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€…
29マニュアルなど)に,上記の著
30 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
31 * (b) 再é…
32å¸ƒã®å½¢æ…
33‹ã‚’,別に定める方法によって,TOPPERSプロジェクトに
34 * 報告すること.
35 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
36 * 害からも,上記著作権者
37およびTOPPERSプロジェクトをå…
38è²¬ã™ã‚‹ã“と.
39 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
40 * 由に基づく請求からも,上記著作権者
41およびTOPPERSプロジェクトを
42 * å…
43è²¬ã™ã‚‹ã“と.
44 *
45 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者
46お
47 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
48 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
49 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
50 * の責任を負わない.
51 *
52 * $Id: test_mutex8.c 310 2015-02-08 13:46:46Z ertl-hiro $
53 */
54
55/*
56 * ミューテックスのテスト(8)
57 *
58 * 【テストの目的】
59 *
60 * 優å…
61ˆåº¦ä¸Šé™ãƒŸãƒ¥ãƒ¼ãƒ†ãƒƒã‚¯ã‚¹ã«å¯¾ã—て,chg_priに伴うミューテックス関連の
62 * 優å…
63ˆåº¦å¤‰æ›´å‡¦ç†ã‚’網羅
64的にテストする.ただし,change_priorityと
65 * mutex_calc_priorityの内
66容には踏み込まない.
67 *
68 * 【テスト項
69目】
70 *
71 * (A) タスクのベース優å…
72ˆåº¦ã®å¤‰æ›´å‡¦ç†ï¼ˆchg_pri)
73 * (A-1) 対象タスクが実行できる状æ…
74‹ã§ï¼ŒãƒŸãƒ¥ãƒ¼ãƒ†ãƒƒã‚¯ã‚¹ã‚’ロックして
75 * いない場合に,同じ優å…
76ˆåº¦å†…
77での優å…
78ˆé †ä½ãŒæœ€ä½Žã«ãªã‚‹ã“と
79 * (A-2) 対象タスクが実行できる状æ…
80‹ã§ï¼Œå„ªå…
81ˆåº¦ä¸Šé™ãƒŸãƒ¥ãƒ¼ãƒ†ãƒƒã‚¯ã‚¹ä»¥
82 * 外のミューテックスのみをロックしている場合に,同じ優å…
83ˆåº¦
84 * 内
85での優å…
86ˆé †ä½ãŒæœ€ä½Žã«ãªã‚‹ã“と
87 * (A-3) 対象タスクが実行できる状æ…
88‹ã§ï¼Œå„ªå…
89ˆåº¦ä¸Šé™ãƒŸãƒ¥ãƒ¼ãƒ†ãƒƒã‚¯ã‚¹ã‚’
90 * ロックしている場合に,同じ優å…
91ˆåº¦å†…
92での優å…
93ˆé †ä½ãŒå¤‰ã‚ã‚‰ãª
94 * いこと
95 * (A-4) 対象タスクが待
96ち状æ…
97‹ã§ï¼Œå„ªå…
98ˆåº¦é †ã®å¾…
99ち行列につながれてお
100 * り,ミューテックスをロックしていない場合に,優å…
101ˆåº¦ãŒæ­£ã—
102 * く変更され,同じ優å…
103ˆåº¦å†…
104での順序が最後になること
105 * (A-5) 対象タスクが待
106ち状æ…
107‹ã§ï¼Œå„ªå…
108ˆåº¦é †ã®å¾…
109ち行列につながれてお
110 * り,優å…
111ˆåº¦ä¸Šé™ãƒŸãƒ¥ãƒ¼ãƒ†ãƒƒã‚¯ã‚¹ä»¥å¤–のミューテックスのみをロッ
112 * クしている場合に,優å…
113ˆåº¦ãŒæ­£ã—く変更され,同じ優å…
114ˆåº¦å†…
115で
116 * の順序が最後になること
117 * (A-6) 対象タスクが待
118ち状æ…
119‹ã§ï¼Œå„ªå…
120ˆåº¦é †ã®å¾…
121ち行列につながれてお
122 * り,優å…
123ˆåº¦ä¸Šé™ãƒŸãƒ¥ãƒ¼ãƒ†ãƒƒã‚¯ã‚¹ã‚’ロックしている場合に,同じ
124 * 優å…
125ˆåº¦å†…
126での順序が変わらないこと
127 * (B) タスクのベース優å…
128ˆåº¦ã®å¤‰æ›´å‡¦ç†ï¼ˆchg_pri)のE_ILUSEエラー
129 * (B-1) 対象タスクがロックしているミューテックスの上限優å…
130ˆåº¦ã‚ˆã‚Š
131 * も,ベース優å…
132ˆåº¦ã‚’高くしようとした時,E_ILUSEエラーになる
133 * こと
134 * (B-2) 対象タスクが優å…
135ˆåº¦ä¸Šé™ãƒŸãƒ¥ãƒ¼ãƒ†ãƒƒã‚¯ã‚¹ã‚’ロックしていても,
136 * ロックしているミューテックスの上限優å…
137ˆåº¦ã‚ˆã‚Šã‚‚,ベース優
138 * å…
139ˆåº¦ã‚’高くしようとしない場合には,E_ILUSEエラーにならない
140 * こと
141 * (B-3) 対象タスクがロックを待
142っているミューテックスの上限優å…
143ˆåº¦
144 * よりも,ベース優å…
145ˆåº¦ã‚’高くしようとした時,E_ILUSEエラーに
146 * なること
147 * (B-4) 対象タスクが優å…
148ˆåº¦ä¸Šé™ãƒŸãƒ¥ãƒ¼ãƒ†ãƒƒã‚¯ã‚¹å¾…
149ちであっても,ロッ
150 * クを待
151っているミューテックスの上限優å…
152ˆåº¦ã‚ˆã‚Šã‚‚,ベース優
153 * å…
154ˆåº¦ã‚’高くしようとしない場合には,E_ILUSEエラーにならない
155 * こと
156 *
157 * 【テスト項
158目の実現方法】
159 *
160 * (A-1)
161 * 中優å…
162ˆåº¦ã‚¿ã‚¹ã‚¯ï¼ˆTASK1)が実行可能状æ…
163‹ã®æ™‚に,高優å…
164ˆåº¦ã‚¿ã‚¹ã‚¯
165 * (TASK5)からTASK1を低優å…
166ˆåº¦ã«chg_priすると,実行可能状æ…
167‹ã®ä»–の
168 * 低優å…
169ˆåº¦ã‚¿ã‚¹ã‚¯ï¼ˆTASK4)よりも,優å…
170ˆé †ä½ãŒä½Žããªã‚‹ã“とを確認する.
171 * (A-2)
172 * 中優å…
173ˆåº¦ã‚¿ã‚¹ã‚¯ï¼ˆTASK1)が優å…
174ˆåº¦é †ãƒŸãƒ¥ãƒ¼ãƒ†ãƒƒã‚¯ã‚¹ï¼ˆMTX3)をロック
175 * し,実行可能状æ…
176‹ã®æ™‚に,高優å…
177ˆåº¦ã‚¿ã‚¹ã‚¯ï¼ˆTASK5)からTASK1を低優
178 * å…
179ˆåº¦ã«chg_priすると,実行可能状æ…
180‹ã®ä»–の低優å…
181ˆåº¦ã‚¿ã‚¹ã‚¯ï¼ˆTASK4)
182 * よりも,優å…
183ˆé †ä½ãŒä½Žããªã‚‹ã“とを確認する.
184 * (A-3)
185 * 中優å…
186ˆåº¦ã‚¿ã‚¹ã‚¯ï¼ˆTASK1)が中優å…
187ˆåº¦ä¸Šé™ãƒŸãƒ¥ãƒ¼ãƒ†ãƒƒã‚¯ã‚¹ï¼ˆMTX1)をロッ
188 * クし,実行可能状æ…
189‹ã®æ™‚に,高優å…
190ˆåº¦ã‚¿ã‚¹ã‚¯ï¼ˆTASK5)からTASK1を低
191 * 優å…
192ˆåº¦ã«chg_priすると,TASK1の優å…
193ˆåº¦ãŒå¤‰åŒ–しないことを確認する.
194 * また,実行可能状æ…
195‹ã®ä¸­å„ªå…
196ˆåº¦ã‚¿ã‚¹ã‚¯ã‚’2つ(TASK2,TASK3)を用意し
197 * ておき,優å…
198ˆé †ä½ãŒå¤‰ã‚ã‚‰ãªã„ことを確認する.
199 * (A-4)
200 * 中優å…
201ˆåº¦ã‚¿ã‚¹ã‚¯ï¼ˆTASK1)が高優å…
202ˆåº¦ä¸Šé™ãƒŸãƒ¥ãƒ¼ãƒ†ãƒƒã‚¯ã‚¹ï¼ˆMTX2)を待
203っ
204 * ている時に,高優å…
205ˆåº¦ã‚¿ã‚¹ã‚¯ï¼ˆTASK5)からTASK1を低優å…
206ˆåº¦ã«
207 * chg_priすると,MTX2を待
208っている他の低優å…
209ˆåº¦ã‚¿ã‚¹ã‚¯ï¼ˆTASK4)より
210 * も,待
211ち行列中での順序が後になることを確認する.
212 * (A-5)
213 * 中優å…
214ˆåº¦ã‚¿ã‚¹ã‚¯ï¼ˆTASK1)が優å…
215ˆåº¦é †ãƒŸãƒ¥ãƒ¼ãƒ†ãƒƒã‚¯ã‚¹ï¼ˆMTX3)をロック
216 * し,高優å…
217ˆåº¦ä¸Šé™ãƒŸãƒ¥ãƒ¼ãƒ†ãƒƒã‚¯ã‚¹ï¼ˆMTX2)を待
218っている時に,高優å…
219ˆåº¦ã‚¿
220 * スク(TASK5)からTASK1を低優å…
221ˆåº¦ã«chg_priすると,MTX2を待
222ってい
223 * る他の低優å…
224ˆåº¦ã‚¿ã‚¹ã‚¯ï¼ˆTASK4)よりも,待
225ち行列中での順序が変わら
226 * ないことを確認する.
227 * (A-6)
228 * 中優å…
229ˆåº¦ã‚¿ã‚¹ã‚¯ï¼ˆTASK1)が中優å…
230ˆåº¦ä¸Šé™ãƒŸãƒ¥ãƒ¼ãƒ†ãƒƒã‚¯ã‚¹ï¼ˆMTX1)をロッ
231 * クし,高優å…
232ˆåº¦ä¸Šé™ãƒŸãƒ¥ãƒ¼ãƒ†ãƒƒã‚¯ã‚¹ï¼ˆMTX2)を待
233っている時に,高優
234 * å…
235ˆåº¦ã‚¿ã‚¹ã‚¯ï¼ˆTASK5)からTASK1を低優å…
236ˆåº¦ã«chg_priすると,TASK1の
237 * 優å…
238ˆåº¦ãŒå¤‰åŒ–しないことを確認する.また,MTX2を待
239っている中優å…
240ˆ
241 * 度タスクを2つ(TASK2,TASK3)を用意しておき,待
242ち行列中での順序
243 * が変わらないことを確認する.
244 * (B-1)
245 * 中優å…
246ˆåº¦ã‚¿ã‚¹ã‚¯ï¼ˆTASK1)が中優å…
247ˆåº¦ä¸Šé™ãƒŸãƒ¥ãƒ¼ãƒ†ãƒƒã‚¯ã‚¹ï¼ˆMTX1)をロッ
248 * クし,実行可能状æ…
249‹ã®æ™‚に,高優å…
250ˆåº¦ã‚¿ã‚¹ã‚¯ï¼ˆTASK5)からTASK1を高
251 * 優å…
252ˆåº¦ã«chg_priすると,E_ILUSEエラーになることを確認する.
253 * (B-2)
254 * (A-3)のテスト項
255目で,chg_priがE_ILUSEエラーにならないことで確認
256 * できている.
257 * (B-3)
258 * 中優å…
259ˆåº¦ã‚¿ã‚¹ã‚¯ï¼ˆTASK2)が中優å…
260ˆåº¦ä¸Šé™ãƒŸãƒ¥ãƒ¼ãƒ†ãƒƒã‚¯ã‚¹ï¼ˆMTX1)のロッ
261 * クを待
262っている時に,高優å…
263ˆåº¦ã‚¿ã‚¹ã‚¯ï¼ˆTASK5)からTASK2を高優å…
264ˆåº¦
265 * にchg_priすると,E_ILUSEエラーになることを確認する.
266 * (B-4)
267 * (A-6)のテスト項
268目で,chg_priがE_ILUSEエラーにならないことで確認
269 * できている.
270 *
271 * 【使用リソース】
272 *
273 * TASK1: 中優å…
274ˆåº¦ã‚¿ã‚¹ã‚¯ï¼Œãƒ¡ã‚¤ãƒ³ã‚¿ã‚¹ã‚¯ï¼Œæœ€åˆã‹ã‚‰èµ·å‹•
275 * TASK2: 中優å…
276ˆåº¦ã‚¿ã‚¹ã‚¯
277 * TASK3: 中優å…
278ˆåº¦ã‚¿ã‚¹ã‚¯
279 * TASK4: 低優å…
280ˆåº¦ã‚¿ã‚¹ã‚¯
281 * TASK5: 高優å…
282ˆåº¦ã‚¿ã‚¹ã‚¯
283 * MTX1: ミューテックス(TA_CEILING属性,上限は中優å…
284ˆåº¦ï¼‰
285 * MTX2: ミューテックス(TA_CEILING属性,上限は高優å…
286ˆåº¦ï¼‰
287 * MTX3: ミューテックス(TA_TPRI属性)
288 *
289 * 【テストシーケンス】
290 *
291 * == TASK1(優å…
292ˆåº¦ï¼šä¸­ï¼‰==
293 * call(set_bit_func(bit_mutex))
294 * 1: act_tsk(TASK4)
295 * 2: act_tsk(TASK5)
296 * // 高:TASK5,中:TASK1,低:TASK4
297 * == TASK5(優å…
298ˆåº¦ï¼šé«˜ï¼‰==
299 * 3: chg_pri(TASK1, LOW_PRIORITY) ... (A-1)
300 * // 高:TASK5,低:TASK4→TASK1
301 * 4: slp_tsk()
302 * == TASK4(優å…
303ˆåº¦ï¼šä½Žï¼‰==
304 * 5: slp_tsk()
305 * == TASK1(続き)==
306 * 6: chg_pri(TSK_SELF, TPRI_INI)
307 *
308 * 7: loc_mtx(MTX3)
309 * 8: wup_tsk(TASK4)
310 * 9: wup_tsk(TASK5)
311 * // 高:TASK5,中:TASK1,低:TASK4,MTX3:TASK1
312 * == TASK5(続き)==
313 * 10: chg_pri(TASK1, LOW_PRIORITY) ... (A-2)
314 * // 高:TASK5,低:TASK4→TASK1,MTX3:TASK1
315 * 11: slp_tsk()
316 * == TASK4(続き)==
317 * 12: slp_tsk()
318 * == TASK1(続き)==
319 * 13: unl_mtx(MTX3)
320 * chg_pri(TSK_SELF, TPRI_INI)
321 *
322 * 14: loc_mtx(MTX1)
323 * 15: act_tsk(TASK2)
324 * 16: dis_dsp()
325 * 17: rot_rdq(MID_PRIORITY)
326 * 18: act_tsk(TASK3)
327 * // 中:TASK2→TASK1→TASK3,MTX1:TASK1
328 * 19: wup_tsk(TASK5)
329 * // 高:TASK5,中:TASK2→TASK1→TASK3,MTX1:TASK1
330 * 20: ena_dsp()
331 * == TASK5(続き)==
332 * 21: chg_pri(TASK1, LOW_PRIORITY) ... (A-3)(B-2)
333 * // 高:TASK5,中:TASK2→TASK1→TASK3,MTX1:TASK1
334 * get_pri(TASK1, &tskpri)
335 * assert(tskpri == MID_PRIORITY)
336 * 22: slp_tsk()
337 * // 中:TASK2→TASK1→TASK3,MTX1:TASK1
338 * == TASK2(続き)==
339 * 23: slp_tsk()
340 * // 中:TASK1→TASK3,MTX1:TASK1
341 * == TASK1(続き)==
342 * 24: unl_mtx(MTX1)
343 * // 中:TASK3,低:TASK1
344 * == TASK3(続き)==
345 * 25: slp_tsk()
346 * == TASK1(続き)==
347 * 26: chg_pri(TSK_SELF, TPRI_INI)
348 *
349 * 27: wup_tsk(TASK5)
350 * == TASK5(続き)==
351 * 28: loc_mtx(MTX2)
352 * 29: tslp_tsk(10000U) -> E_TMOUT
353 * == TASK1(続き)==
354 * 30: wup_tsk(TASK4)
355 * 31: loc_mtx(MTX2)
356 * == TASK4(続き)==
357 * 32: loc_mtx(MTX2)
358 * // MTX2:TASK5→TASK1→TASK4
359 * // タイムアウト待
360ち
361 * // 高:TASK5,MTX2:TASK5→TASK1→TASK4
362 * == TASK5(続き)==
363 * 33: chg_pri(TASK1, LOW_PRIORITY) ... (A-4)
364 * // 高:TASK5,MTX2:TASK5→TASK4→TASK1
365 * 34: unl_mtx(MTX2)
366 * // 高:TASK5→TASK4,MTX2:TASK4→TASK1
367 * 35: slp_tsk()
368 * // 高:TASK4,MTX2:TASK4→TASK1
369 * == TASK4(続き)==
370 * 36: unl_mtx(MTX2)
371 * // 高:TASK1,低:TASK4,MTX2:TASK1
372 * == TASK1(続き)==
373 * 37: unl_mtx(MTX2)
374 * // 低:TASK1→TASK4
375 * 38: chg_pri(TSK_SELF, TPRI_INI)
376 *
377 * 39: loc_mtx(MTX3)
378 * 40: wup_tsk(TASK5)
379 * // 高:TASK5,中:TASK1,低:TASK4,MTX3:TASK1
380 * == TASK5(続き)==
381 * 41: loc_mtx(MTX2)
382 * 42: tslp_tsk(10000U) -> E_TMOUT
383 * == TASK1(続き)==
384 * 43: loc_mtx(MTX2)
385 * == TASK4(続き)==
386 * 44: loc_mtx(MTX2)
387 * // MTX2:TASK5→TASK1→TASK4,MTX3:TASK1
388 * // タイムアウト待
389ち
390 * // 高:TASK5,MTX2:TASK5→TASK1→TASK4,MTX3:TASK1
391 * == TASK5(続き)==
392 * 45: chg_pri(TASK1, LOW_PRIORITY) ... (A-5)
393 * // 高:TASK5,MTX2:TASK5→TASK4→TASK1,MTX3:TASK1
394 * 46: unl_mtx(MTX2)
395 * // 高:TASK5→TASK4,MTX2:TASK4→TASK1,MTX3:TASK1
396 * 47: slp_tsk()
397 * // 高:TASK4,MTX2:TASK4→TASK1,MTX3:TASK1
398 * == TASK4(続き)==
399 * 48: unl_mtx(MTX2)
400 * // 高:TASK1,低:TASK4,MTX2:TASK1,MTX3:TASK1
401 * == TASK1(続き)==
402 * 49: unl_mtx(MTX2)
403 * // 低:TASK1→TASK4,MTX3:TASK1
404 * 50: unl_mtx(MTX3)
405 * // 低:TASK1→TASK4
406 * 51: ter_tsk(TASK4)
407 * 52: chg_pri(TSK_SELF, TPRI_INI)
408 *
409 * 53: loc_mtx(MTX1)
410 * 54: wup_tsk(TASK5)
411 * // 高:TASK5,中:TASK1,MTX1:TASK1
412 * == TASK5(続き)==
413 * 55: loc_mtx(MTX2)
414 * 56: tslp_tsk(10000U) -> E_TMOUT
415 * // 中:TASK1,MTX1:TASK1,MTX2:TASK5
416 * == TASK1(続き)==
417 * 57: wup_tsk(TASK2)
418 * 58: rot_rdq(MID_PRIORITY)
419 * == TASK2(続き)==
420 * 59: loc_mtx(MTX2)
421 * // 中:TASK1,MTX1:TASK1,MTX2:TASK5→TASK2
422 * == TASK1(続き)==
423 * 60: wup_tsk(TASK3)
424 * 61: loc_mtx(MTX2)
425 * // 中:TASK3,MTX1:TASK1,MTX2:TASK5→TASK2→TASK1
426 * == TASK3(続き)==
427 * 62: loc_mtx(MTX2)
428 * // MTX1:TASK1,MTX2:TASK5→TASK2→TASK1→TASK3
429 * // タイムアウト待
430ち
431 * // 高:TASK5,MTX1:TASK1,MTX2:TASK5→TASK2→TASK1→TASK3
432 * == TASK5(続き)==
433 * 63: chg_pri(TASK1, LOW_PRIORITY) ... (A-6)(B-4)
434 * // 高:TASK5,MTX1:TASK1,MTX2:TASK5→TASK2→TASK1→TASK3
435 * get_pri(TASK1, &tskpri)
436 * assert(tskpri == MID_PRIORITY)
437 * 64: unl_mtx(MTX2)
438 * // 高:TASK5→TASK2,MTX1:TASK1,MTX2:TASK2→TASK1→TASK3
439 * 65: slp_tsk()
440 * // 高:TASK2,MTX1:TASK1,MTX2:TASK2→TASK1→TASK3
441 * == TASK2(続き)==
442 * 66: unl_mtx(MTX2)
443 * // 高:TASK1,中:TASK2,MTX1:TASK1,MTX2:TASK1→TASK3
444 * == TASK1(続き)==
445 * 67: unl_mtx(MTX2)
446 * // 高:TASK3,中:TASK1→TASK2,MTX1:TASK1,MTX2:TASK3
447 * == TASK3(続き)==
448 * 68: unl_mtx(MTX2)
449 * // 中:TASK3→TASK1→TASK2,MTX1:TASK1
450 * 69: ext_tsk() -> noreturn
451 * // 中:TASK1→TASK2,MTX1:TASK1
452 * == TASK1(続き)==
453 * 70: chg_pri(TSK_SELF, TPRI_INI)
454 * // 中:TASK1→TASK2,MTX1:TASK1
455 *
456 * 71: rot_rdq(MID_PRIORITY)
457 * // 中:TASK2→TASK1,MTX1:TASK1
458 * == TASK2(続き)==
459 * 72: loc_mtx(MTX1)
460 * // 中:TASK1,MTX1:TASK1→TASK2
461 * == TASK1(続き)==
462 * 73: wup_tsk(TASK5)
463 * // 高:TASK5,中:TASK1,MTX1:TASK1→TASK2
464 * == TASK5(続き)==
465 * 74: chg_pri(TASK1, HIGH_PRIORITY) -> E_ILUSE ... (B-1)
466 * 75: chg_pri(TASK2, HIGH_PRIORITY) -> E_ILUSE ... (B-3)
467 * 76: ext_tsk() -> noreturn
468 * // 中:TASK1,MTX1:TASK1→TASK2
469 * == TASK1(続き)==
470 * 77: unl_mtx(MTX1)
471 * // 中:TASK1→TASK2,MTX1:TASK2
472 * 78: ext_tsk() -> noreturn
473 * == TASK2(続き)==
474 * 79: unl_mtx(MTX1)
475 * 80: END
476 */
477
478#include <kernel.h>
479#include <t_syslog.h>
480#include "syssvc/test_svc.h"
481#include "kernel_cfg.h"
482#include "test_mutex8.h"
483
484extern ER bit_mutex(void);
485
486/* DO NOT DELETE THIS LINE -- gentest depends on it. */
487
488void
489task1(intptr_t exinf)
490{
491 ER_UINT ercd;
492
493 test_start(__FILE__);
494
495 set_bit_func(bit_mutex);
496
497 check_point(1);
498 ercd = act_tsk(TASK4);
499 check_ercd(ercd, E_OK);
500
501 check_point(2);
502 ercd = act_tsk(TASK5);
503 check_ercd(ercd, E_OK);
504
505 check_point(6);
506 ercd = chg_pri(TSK_SELF, TPRI_INI);
507 check_ercd(ercd, E_OK);
508
509 check_point(7);
510 ercd = loc_mtx(MTX3);
511 check_ercd(ercd, E_OK);
512
513 check_point(8);
514 ercd = wup_tsk(TASK4);
515 check_ercd(ercd, E_OK);
516
517 check_point(9);
518 ercd = wup_tsk(TASK5);
519 check_ercd(ercd, E_OK);
520
521 check_point(13);
522 ercd = unl_mtx(MTX3);
523 check_ercd(ercd, E_OK);
524
525 ercd = chg_pri(TSK_SELF, TPRI_INI);
526 check_ercd(ercd, E_OK);
527
528 check_point(14);
529 ercd = loc_mtx(MTX1);
530 check_ercd(ercd, E_OK);
531
532 check_point(15);
533 ercd = act_tsk(TASK2);
534 check_ercd(ercd, E_OK);
535
536 check_point(16);
537 ercd = dis_dsp();
538 check_ercd(ercd, E_OK);
539
540 check_point(17);
541 ercd = rot_rdq(MID_PRIORITY);
542 check_ercd(ercd, E_OK);
543
544 check_point(18);
545 ercd = act_tsk(TASK3);
546 check_ercd(ercd, E_OK);
547
548 check_point(19);
549 ercd = wup_tsk(TASK5);
550 check_ercd(ercd, E_OK);
551
552 check_point(20);
553 ercd = ena_dsp();
554 check_ercd(ercd, E_OK);
555
556 check_point(24);
557 ercd = unl_mtx(MTX1);
558 check_ercd(ercd, E_OK);
559
560 check_point(26);
561 ercd = chg_pri(TSK_SELF, TPRI_INI);
562 check_ercd(ercd, E_OK);
563
564 check_point(27);
565 ercd = wup_tsk(TASK5);
566 check_ercd(ercd, E_OK);
567
568 check_point(30);
569 ercd = wup_tsk(TASK4);
570 check_ercd(ercd, E_OK);
571
572 check_point(31);
573 ercd = loc_mtx(MTX2);
574 check_ercd(ercd, E_OK);
575
576 check_point(37);
577 ercd = unl_mtx(MTX2);
578 check_ercd(ercd, E_OK);
579
580 check_point(38);
581 ercd = chg_pri(TSK_SELF, TPRI_INI);
582 check_ercd(ercd, E_OK);
583
584 check_point(39);
585 ercd = loc_mtx(MTX3);
586 check_ercd(ercd, E_OK);
587
588 check_point(40);
589 ercd = wup_tsk(TASK5);
590 check_ercd(ercd, E_OK);
591
592 check_point(43);
593 ercd = loc_mtx(MTX2);
594 check_ercd(ercd, E_OK);
595
596 check_point(49);
597 ercd = unl_mtx(MTX2);
598 check_ercd(ercd, E_OK);
599
600 check_point(50);
601 ercd = unl_mtx(MTX3);
602 check_ercd(ercd, E_OK);
603
604 check_point(51);
605 ercd = ter_tsk(TASK4);
606 check_ercd(ercd, E_OK);
607
608 check_point(52);
609 ercd = chg_pri(TSK_SELF, TPRI_INI);
610 check_ercd(ercd, E_OK);
611
612 check_point(53);
613 ercd = loc_mtx(MTX1);
614 check_ercd(ercd, E_OK);
615
616 check_point(54);
617 ercd = wup_tsk(TASK5);
618 check_ercd(ercd, E_OK);
619
620 check_point(57);
621 ercd = wup_tsk(TASK2);
622 check_ercd(ercd, E_OK);
623
624 check_point(58);
625 ercd = rot_rdq(MID_PRIORITY);
626 check_ercd(ercd, E_OK);
627
628 check_point(60);
629 ercd = wup_tsk(TASK3);
630 check_ercd(ercd, E_OK);
631
632 check_point(61);
633 ercd = loc_mtx(MTX2);
634 check_ercd(ercd, E_OK);
635
636 check_point(67);
637 ercd = unl_mtx(MTX2);
638 check_ercd(ercd, E_OK);
639
640 check_point(70);
641 ercd = chg_pri(TSK_SELF, TPRI_INI);
642 check_ercd(ercd, E_OK);
643
644 check_point(71);
645 ercd = rot_rdq(MID_PRIORITY);
646 check_ercd(ercd, E_OK);
647
648 check_point(73);
649 ercd = wup_tsk(TASK5);
650 check_ercd(ercd, E_OK);
651
652 check_point(77);
653 ercd = unl_mtx(MTX1);
654 check_ercd(ercd, E_OK);
655
656 check_point(78);
657 ercd = ext_tsk();
658
659 check_point(0);
660}
661
662void
663task2(intptr_t exinf)
664{
665 ER_UINT ercd;
666
667 check_point(23);
668 ercd = slp_tsk();
669 check_ercd(ercd, E_OK);
670
671 check_point(59);
672 ercd = loc_mtx(MTX2);
673 check_ercd(ercd, E_OK);
674
675 check_point(66);
676 ercd = unl_mtx(MTX2);
677 check_ercd(ercd, E_OK);
678
679 check_point(72);
680 ercd = loc_mtx(MTX1);
681 check_ercd(ercd, E_OK);
682
683 check_point(79);
684 ercd = unl_mtx(MTX1);
685 check_ercd(ercd, E_OK);
686
687 check_finish(80);
688 check_point(0);
689}
690
691void
692task3(intptr_t exinf)
693{
694 ER_UINT ercd;
695
696 check_point(25);
697 ercd = slp_tsk();
698 check_ercd(ercd, E_OK);
699
700 check_point(62);
701 ercd = loc_mtx(MTX2);
702 check_ercd(ercd, E_OK);
703
704 check_point(68);
705 ercd = unl_mtx(MTX2);
706 check_ercd(ercd, E_OK);
707
708 check_point(69);
709 ercd = ext_tsk();
710
711 check_point(0);
712}
713
714void
715task4(intptr_t exinf)
716{
717 ER_UINT ercd;
718
719 check_point(5);
720 ercd = slp_tsk();
721 check_ercd(ercd, E_OK);
722
723 check_point(12);
724 ercd = slp_tsk();
725 check_ercd(ercd, E_OK);
726
727 check_point(32);
728 ercd = loc_mtx(MTX2);
729 check_ercd(ercd, E_OK);
730
731 check_point(36);
732 ercd = unl_mtx(MTX2);
733 check_ercd(ercd, E_OK);
734
735 check_point(44);
736 ercd = loc_mtx(MTX2);
737 check_ercd(ercd, E_OK);
738
739 check_point(48);
740 ercd = unl_mtx(MTX2);
741 check_ercd(ercd, E_OK);
742
743 check_point(0);
744}
745
746void
747task5(intptr_t exinf)
748{
749 ER_UINT ercd;
750 PRI tskpri;
751
752 check_point(3);
753 ercd = chg_pri(TASK1, LOW_PRIORITY);
754 check_ercd(ercd, E_OK);
755
756 check_point(4);
757 ercd = slp_tsk();
758 check_ercd(ercd, E_OK);
759
760 check_point(10);
761 ercd = chg_pri(TASK1, LOW_PRIORITY);
762 check_ercd(ercd, E_OK);
763
764 check_point(11);
765 ercd = slp_tsk();
766 check_ercd(ercd, E_OK);
767
768 check_point(21);
769 ercd = chg_pri(TASK1, LOW_PRIORITY);
770 check_ercd(ercd, E_OK);
771
772 ercd = get_pri(TASK1, &tskpri);
773 check_ercd(ercd, E_OK);
774
775 check_assert(tskpri == MID_PRIORITY);
776
777 check_point(22);
778 ercd = slp_tsk();
779 check_ercd(ercd, E_OK);
780
781 check_point(28);
782 ercd = loc_mtx(MTX2);
783 check_ercd(ercd, E_OK);
784
785 check_point(29);
786 ercd = tslp_tsk(10000U);
787 check_ercd(ercd, E_TMOUT);
788
789 check_point(33);
790 ercd = chg_pri(TASK1, LOW_PRIORITY);
791 check_ercd(ercd, E_OK);
792
793 check_point(34);
794 ercd = unl_mtx(MTX2);
795 check_ercd(ercd, E_OK);
796
797 check_point(35);
798 ercd = slp_tsk();
799 check_ercd(ercd, E_OK);
800
801 check_point(41);
802 ercd = loc_mtx(MTX2);
803 check_ercd(ercd, E_OK);
804
805 check_point(42);
806 ercd = tslp_tsk(10000U);
807 check_ercd(ercd, E_TMOUT);
808
809 check_point(45);
810 ercd = chg_pri(TASK1, LOW_PRIORITY);
811 check_ercd(ercd, E_OK);
812
813 check_point(46);
814 ercd = unl_mtx(MTX2);
815 check_ercd(ercd, E_OK);
816
817 check_point(47);
818 ercd = slp_tsk();
819 check_ercd(ercd, E_OK);
820
821 check_point(55);
822 ercd = loc_mtx(MTX2);
823 check_ercd(ercd, E_OK);
824
825 check_point(56);
826 ercd = tslp_tsk(10000U);
827 check_ercd(ercd, E_TMOUT);
828
829 check_point(63);
830 ercd = chg_pri(TASK1, LOW_PRIORITY);
831 check_ercd(ercd, E_OK);
832
833 ercd = get_pri(TASK1, &tskpri);
834 check_ercd(ercd, E_OK);
835
836 check_assert(tskpri == MID_PRIORITY);
837
838 check_point(64);
839 ercd = unl_mtx(MTX2);
840 check_ercd(ercd, E_OK);
841
842 check_point(65);
843 ercd = slp_tsk();
844 check_ercd(ercd, E_OK);
845
846 check_point(74);
847 ercd = chg_pri(TASK1, HIGH_PRIORITY);
848 check_ercd(ercd, E_ILUSE);
849
850 check_point(75);
851 ercd = chg_pri(TASK2, HIGH_PRIORITY);
852 check_ercd(ercd, E_ILUSE);
853
854 check_point(76);
855 ercd = ext_tsk();
856
857 check_point(0);
858}
Note: See TracBrowser for help on using the repository browser.