source: asp3_wo_tecs/trunk/test/test_mutex7.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: 18.5 KB
Line 
1/*
2 * TOPPERS Software
3 * Toyohashi Open Platform for Embedded Real-Time Systems
4 *
5 * Copyright (C) 2008-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_mutex7.c 310 2015-02-08 13:46:46Z ertl-hiro $
53 */
54
55/*
56 * ミューテックスのテスト(7)
57 *
58 * 【テストの目的】
59 *
60 * 優å…
61ˆåº¦ä¸Šé™ãƒŸãƒ¥ãƒ¼ãƒ†ãƒƒã‚¯ã‚¹ã«å¯¾ã—て,タスクの強制終了時のミューテック
62 * ス関連の処理を網羅
63的にテストする.
64 *
65 * 【テスト項
66目】
67 *
68 * (A) タスクの強制終了時(ter_tsk)
69 * (A-1) ロックしていたミューテックス(1つ)がロック解除されること.
70 * (A-2) ロックしていたミューテックス(1つ)がロック解除され,ロッ
71 * クを待
72っていたタスクがそれをロックし,優å…
73ˆåº¦ãŒå¤‰åŒ–し,待
74
75 * ち解除されること.
76 * (A-3) (A-2)の結果,タスクディスパッチが起こること.
77 * (A-4) ロックしていたミューテックス(複数)がすべてロック解除さ
78 * れること.
79 * (A-5) ロックしていたミューテックス(複数)がロック解除され,ロッ
80 * クを待
81っていたタスク(複数)がそれをロックし,優å…
82ˆåº¦ãŒå¤‰
83 * 化し,待
84ち解除されること.その時に,後でミューテックスを
85 * ロックしたタスク(å…
86ˆã«ãƒ­ãƒƒã‚¯ã—ていたミューテックスを待
87っ
88 * ていたタスク)の方が,優å…
89ˆé †ä½ãŒé«˜ããªã‚‹ã“と.
90 * (A-6) (A-5)の結果,タスクディスパッチが起こること.
91 *
92 * 【テスト項
93目の実現方法】
94 *
95 * (A-1)
96 * 低優å…
97ˆåº¦ã‚¿ã‚¹ã‚¯ï¼ˆTASK2)にミューテックス(MTX1)をロックさせ,別
98 * のタスク(TASK1)からTASK2をter_tskすると,ロックが解除されるこ
99 * とを確認する.
100 * (A-2)
101 * 低優å…
102ˆåº¦ã‚¿ã‚¹ã‚¯ï¼ˆTASK2)に中優å…
103ˆåº¦ä¸Šé™ãƒŸãƒ¥ãƒ¼ãƒ†ãƒƒã‚¯ã‚¹ï¼ˆMTX1)をロッ
104 * クさせ,別の低優å…
105ˆåº¦ã‚¿ã‚¹ã‚¯ï¼ˆTASK3)にMTX1を待
106たせた状æ…
107‹ã§ï¼Œé«˜å„ª
108 * å…
109ˆåº¦ã‚¿ã‚¹ã‚¯ï¼ˆTASK1)からTASK2をter_tskすると,TASK3が中優å…
110ˆåº¦ã«
111 * なって待
112ち解除されることを確認する.
113 * (A-3)
114 * 低優å…
115ˆåº¦ã‚¿ã‚¹ã‚¯ï¼ˆTASK2)に中優å…
116ˆåº¦ä¸Šé™ãƒŸãƒ¥ãƒ¼ãƒ†ãƒƒã‚¯ã‚¹ï¼ˆMTX1)をロッ
117 * クさせ,別の低優å…
118ˆåº¦ã‚¿ã‚¹ã‚¯ï¼ˆTASK3)にMTX1を待
119たせた状æ…
120‹ã§ï¼Œåˆ¥ã®
121 * 低優å…
122ˆåº¦ã‚¿ã‚¹ã‚¯ï¼ˆTASK1)からTASK2をter_tskすると,TASK3が中優å…
123ˆ
124 * 度になって待
125ち解除され,TASK3に切り換わることを確認する.
126 * (A-4)
127 * 低優å…
128ˆåº¦ã‚¿ã‚¹ã‚¯ï¼ˆTASK2)にミューテックスを2つ(MTX1,MTX2)ロッ
129 * クさせ,別のタスク(TASK1)からTASK2をter_tskすると,両方のロッ
130 * クが解除されることを確認する.
131 * (A-5)
132 * 低優å…
133ˆåº¦ã‚¿ã‚¹ã‚¯ï¼ˆTASK2)に高優å…
134ˆåº¦ä¸Šé™ãƒŸãƒ¥ãƒ¼ãƒ†ãƒƒã‚¯ã‚¹2つ(MTX1,
135 * MTX2)をこの順でロックさせ,別の低優å…
136ˆåº¦ã‚¿ã‚¹ã‚¯2つ(TASK3,
137 * TASK4)にそれぞれのロックを待
138たせた状æ…
139‹ã§ï¼Œé«˜å„ªå…
140ˆåº¦ã‚¿ã‚¹ã‚¯
141 * (TASK1)からTASK2をter_tskすると,TASK3とTASK4が中優å…
142ˆåº¦ã«ãªã£
143 * て待
144ち解除されることを確認する.また,å…
145ˆã«ãƒ­ãƒƒã‚¯ã—ていたミュー
146 * テックス(MTX1)を待
147っていたタスク(TASK3)が,TASK4よりも優å…
148ˆ
149 * 順位が高くなることを確認する.
150 * (A-6)
151 * 低優å…
152ˆåº¦ã‚¿ã‚¹ã‚¯ï¼ˆTASK2)に高優å…
153ˆåº¦ä¸Šé™ãƒŸãƒ¥ãƒ¼ãƒ†ãƒƒã‚¯ã‚¹2つ(MTX1,
154 * MTX2)をこの順でロックさせ,別の低優å…
155ˆåº¦ã‚¿ã‚¹ã‚¯2つ(TASK3,
156 * TASK4)にそれぞれのロックを待
157たせた状æ…
158‹ã§ï¼Œåˆ¥ã®ä½Žå„ªå…
159ˆåº¦ã‚¿ã‚¹ã‚¯
160 * (TASK1)からTASK2 をter_tskすると,TASK3とTASK4が中優å…
161ˆåº¦ã«ãªã£
162 * て待
163ち解除され,TASK3に切り換わることを確認する.
164 *
165 * 【使用リソース】
166 *
167 * TASK1: 高優å…
168ˆåº¦ã‚¿ã‚¹ã‚¯ï¼Œãƒ¡ã‚¤ãƒ³ã‚¿ã‚¹ã‚¯ï¼Œæœ€åˆã‹ã‚‰èµ·å‹•
169 * TASK2: 低優å…
170ˆåº¦ã‚¿ã‚¹ã‚¯
171 * TASK3: 低優å…
172ˆåº¦ã‚¿ã‚¹ã‚¯
173 * TASK4: 低優å…
174ˆåº¦ã‚¿ã‚¹ã‚¯
175 * MTX1: ミューテックス(TA_CEILING属性,上限は中優å…
176ˆåº¦ï¼‰
177 * MTX2: ミューテックス(TA_CEILING属性,上限は中優å…
178ˆåº¦ï¼‰
179 *
180 * 【テストシーケンス】
181 *
182 * == TASK1(優å…
183ˆåº¦ï¼šé«˜ï¼‰==
184 * call(set_bit_func(bit_mutex))
185 * 1: act_tsk(TASK2)
186 * 2: slp_tsk()
187 * // 低:TASK2
188 * == TASK2-1(優å…
189ˆåº¦ï¼šä½Žï¼‰==
190 * 3: loc_mtx(MTX1)
191 * // 中:TASK2,MTX1:TASK2
192 * 4: wup_tsk(TASK1)
193 * // 高:TASK1,中:TASK2,MTX1:TASK2
194 * == TASK1(続き)==
195 * 5: ter_tsk(TASK2) ... (A-1)
196 * // 高:TASK1
197 * 6: ref_mtx(MTX1, &rmtx)
198 * assert(rmtx.htskid == TSK_NONE)
199 * assert(rmtx.wtskid == TSK_NONE)
200 *
201 * 7: act_tsk(TASK2)
202 * act_tsk(TASK3)
203 * 8: slp_tsk()
204 * // 低:TASK2→TASK3
205 * == TASK2-2(優å…
206ˆåº¦ï¼šä½Žï¼‰==
207 * 9: loc_mtx(MTX1)
208 * // 中:TASK2,低:TASK3,MTX1:TASK2
209 * 10: tslp_tsk(10000U) -> E_TMOUT
210 * // 低:TASK3,MTX1:TASK2
211 * == TASK3-1(優å…
212ˆåº¦ï¼šä½Žï¼‰==
213 * 11: loc_mtx(MTX1)
214 * // MTX1:TASK2→TASK3
215 * // タイムアウト後
216 * // 中:TASK2,MTX1:TASK2→TASK3
217 * == TASK2-2(続き)==
218 * 12: wup_tsk(TASK1)
219 * // 高:TASK1,中:TASK2,MTX1:TASK2→TASK3
220 * == TASK1(続き)==
221 * 13: ter_tsk(TASK2) ... (A-2)
222 * // 高:TASK1,中:TASK3,MTX1:TASK3
223 * 14: ref_mtx(MTX1, &rmtx)
224 * assert(rmtx.htskid == TASK3)
225 * assert(rmtx.wtskid == TSK_NONE)
226 * get_pri(TASK3, &tskpri)
227 * assert(tskpri == MID_PRIORITY)
228 * 15: ter_tsk(TASK3)
229 * // 高:TASK1
230 *
231 * 16: act_tsk(TASK2)
232 * act_tsk(TASK3)
233 * 17: chg_pri(TSK_SELF, LOW_PRIORITY)
234 * // 低:TASK2→TASK3→TASK1
235 * == TASK2-3(優å…
236ˆåº¦ï¼šä½Žï¼‰==
237 * 18: loc_mtx(MTX1)
238 * // 中:TASK2,低:TASK3→TASK1,MTX1:TASK2
239 * 19: slp_tsk()
240 * // 低:TASK3→TASK1,MTX1:TASK2
241 * == TASK3-2(優å…
242ˆåº¦ï¼šä½Žï¼‰==
243 * 20: loc_mtx(MTX1)
244 * // 低:TASK1,MTX1:TASK2→TASK3
245 * == TASK1(続き)==
246 * 21: ter_tsk(TASK2) ... (A-3)
247 * // 中:TASK3,低:TASK1,MTX1:TASK3
248 * == TASK3-2(続き)==
249 * 22: ref_mtx(MTX1, &rmtx)
250 * assert(rmtx.htskid == TASK3)
251 * assert(rmtx.wtskid == TSK_NONE)
252 * get_pri(TASK3, &tskpri)
253 * assert(tskpri == MID_PRIORITY)
254 * 23: ext_tsk() -> noreturn
255 * // 低:TASK1
256 * == TASK1(続き)==
257 * 24: chg_pri(TSK_SELF, HIGH_PRIORITY)
258 * // 高:TASK1
259 *
260 * 25: act_tsk(TASK2)
261 * 26: slp_tsk()
262 * // 低:TASK2
263 * == TASK2-4(優å…
264ˆåº¦ï¼šä½Žï¼‰==
265 * 27: loc_mtx(MTX1)
266 * loc_mtx(MTX2)
267 * // 中:TASK2,MTX1:TASK2,MTX2:TASK2
268 * 28: wup_tsk(TASK1)
269 * // 高:TASK1,中:TASK2,MTX1:TASK2,MTX2:TASK2
270 * == TASK1(続き)==
271 * 29: ter_tsk(TASK2) ... (A-4)
272 * // 高:TASK1
273 * 30: ref_mtx(MTX1, &rmtx)
274 * assert(rmtx.htskid == TSK_NONE)
275 * assert(rmtx.wtskid == TSK_NONE)
276 * ref_mtx(MTX2, &rmtx)
277 * assert(rmtx.htskid == TSK_NONE)
278 * assert(rmtx.wtskid == TSK_NONE)
279 *
280 * 31: act_tsk(TASK2)
281 * act_tsk(TASK3)
282 * act_tsk(TASK4)
283 * 32: slp_tsk()
284 * // 低:TASK2→TASK3→TASK4
285 * == TASK2-5(優å…
286ˆåº¦ï¼šä½Žï¼‰==
287 * 33: loc_mtx(MTX1)
288 * loc_mtx(MTX2)
289 * // 中:TASK2,低:TASK3→TASK4,MTX1:TASK2,MTX2:TASK2
290 * 34: tslp_tsk(10000U) -> E_TMOUT
291 * // 低:TASK3→TASK4,MTX1:TASK2,MTX2:TASK2
292 * == TASK3-3(優å…
293ˆåº¦ï¼šä½Žï¼‰==
294 * 35: loc_mtx(MTX1)
295 * // 低:TASK4,MTX1:TASK2→TASK3,MTX2:TASK2
296 * == TASK4-1(優å…
297ˆåº¦ï¼šä½Žï¼‰==
298 * 36: loc_mtx(MTX2)
299 * // MTX1:TASK2→TASK3,MTX2:TASK2→TASK4
300 * // タイムアウト後
301 * // 中:TASK2,MTX1:TASK2→TASK3,MTX2:TASK2→TASK4
302 * == TASK2-5(続き)==
303 * 37: wup_tsk(TASK1)
304 * // 高:TASK1,中:TASK2,MTX1:TASK2→TASK3,MTX2:TASK2→TASK4
305 * == TASK1(続き)==
306 * 38: ter_tsk(TASK2) ... (A-5)
307 * // 高:TASK1,中:TASK4→TASK3,MTX1:TASK3,MTX2:TASK4
308 * 39: ref_mtx(MTX1, &rmtx)
309 * assert(rmtx.htskid == TASK3)
310 * assert(rmtx.wtskid == TSK_NONE)
311 * ref_mtx(MTX2, &rmtx)
312 * assert(rmtx.htskid == TASK4)
313 * assert(rmtx.wtskid == TSK_NONE)
314 * get_pri(TASK3, &tskpri)
315 * assert(tskpri == MID_PRIORITY)
316 * get_pri(TASK4, &tskpri)
317 * assert(tskpri == MID_PRIORITY)
318 * 40: chg_pri(TSK_SELF, LOW_PRIORITY)
319 * // 中:TASK4→TASK3,低:TASK1,MTX1:TASK3,MTX2:TASK4
320 * == TASK4-1(続き)==
321 * 41: ext_tsk() -> noreturn
322 * // 中:TASK3,低:TASK1,MTX1:TASK3
323 * == TASK3-3(続き)==
324 * 42: ext_tsk() -> noreturn
325 * // 低:TASK1
326 * == TASK1(続き)==
327 * 43: act_tsk(TASK2)
328 * act_tsk(TASK3)
329 * act_tsk(TASK4)
330 * // 低:TASK1→TASK2→TASK3→TASK4
331 * 44: chg_pri(TSK_SELF, LOW_PRIORITY)
332 * // 低:TASK2→TASK3→TASK4→TASK1
333 * == TASK2-6(優å…
334ˆåº¦ï¼šä½Žï¼‰==
335 * 45: loc_mtx(MTX1)
336 * loc_mtx(MTX2)
337 * // 中:TASK2,低:TASK3→TASK4→TASK1,MTX1:TASK2,MTX2:TASK2
338 * 46: slp_tsk()
339 * // 低:TASK3→TASK4→TASK1,MTX1:TASK2,MTX2:TASK2
340 * == TASK3-4(優å…
341ˆåº¦ï¼šä½Žï¼‰==
342 * 47: loc_mtx(MTX1)
343 * // 低:TASK4→TASK1,MTX1:TASK2→TASK3,MTX2:TASK2
344 * == TASK4-2(優å…
345ˆåº¦ï¼šä½Žï¼‰==
346 * 48: loc_mtx(MTX2)
347 * // 低:TASK1,MTX1:TASK2→TASK3,MTX2:TASK2→TASK4
348 * == TASK1(続き)==
349 * 49: ter_tsk(TASK2) ... (A-6)
350 * // 中:TASK4→TASK3,低:TASK1,MTX1:TASK3,MTX2:TASK4
351 * == TASK4-2(続き)==
352 * 50: ref_mtx(MTX1, &rmtx)
353 * assert(rmtx.htskid == TASK3)
354 * assert(rmtx.wtskid == TSK_NONE)
355 * ref_mtx(MTX2, &rmtx)
356 * assert(rmtx.htskid == TASK4)
357 * assert(rmtx.wtskid == TSK_NONE)
358 * get_pri(TASK3, &tskpri)
359 * assert(tskpri == MID_PRIORITY)
360 * get_pri(TASK4, &tskpri)
361 * assert(tskpri == MID_PRIORITY)
362 * 51: ext_tsk() -> noreturn
363 * // 中:TASK3,低:TASK1,MTX1:TASK3
364 * == TASK3-4(続き)==
365 * 52: ext_tsk() -> noreturn
366 * // 低:TASK1
367 * == TASK1(続き)==
368 * 53: END
369 */
370
371#include <kernel.h>
372#include <t_syslog.h>
373#include "syssvc/test_svc.h"
374#include "kernel_cfg.h"
375#include "test_mutex7.h"
376
377extern ER bit_mutex(void);
378
379/* DO NOT DELETE THIS LINE -- gentest depends on it. */
380
381void
382task1(intptr_t exinf)
383{
384 ER_UINT ercd;
385 PRI tskpri;
386 T_RMTX rmtx;
387
388 test_start(__FILE__);
389
390 set_bit_func(bit_mutex);
391
392 check_point(1);
393 ercd = act_tsk(TASK2);
394 check_ercd(ercd, E_OK);
395
396 check_point(2);
397 ercd = slp_tsk();
398 check_ercd(ercd, E_OK);
399
400 check_point(5);
401 ercd = ter_tsk(TASK2);
402 check_ercd(ercd, E_OK);
403
404 check_point(6);
405 ercd = ref_mtx(MTX1, &rmtx);
406 check_ercd(ercd, E_OK);
407
408 check_assert(rmtx.htskid == TSK_NONE);
409
410 check_assert(rmtx.wtskid == TSK_NONE);
411
412 check_point(7);
413 ercd = act_tsk(TASK2);
414 check_ercd(ercd, E_OK);
415
416 ercd = act_tsk(TASK3);
417 check_ercd(ercd, E_OK);
418
419 check_point(8);
420 ercd = slp_tsk();
421 check_ercd(ercd, E_OK);
422
423 check_point(13);
424 ercd = ter_tsk(TASK2);
425 check_ercd(ercd, E_OK);
426
427 check_point(14);
428 ercd = ref_mtx(MTX1, &rmtx);
429 check_ercd(ercd, E_OK);
430
431 check_assert(rmtx.htskid == TASK3);
432
433 check_assert(rmtx.wtskid == TSK_NONE);
434
435 ercd = get_pri(TASK3, &tskpri);
436 check_ercd(ercd, E_OK);
437
438 check_assert(tskpri == MID_PRIORITY);
439
440 check_point(15);
441 ercd = ter_tsk(TASK3);
442 check_ercd(ercd, E_OK);
443
444 check_point(16);
445 ercd = act_tsk(TASK2);
446 check_ercd(ercd, E_OK);
447
448 ercd = act_tsk(TASK3);
449 check_ercd(ercd, E_OK);
450
451 check_point(17);
452 ercd = chg_pri(TSK_SELF, LOW_PRIORITY);
453 check_ercd(ercd, E_OK);
454
455 check_point(21);
456 ercd = ter_tsk(TASK2);
457 check_ercd(ercd, E_OK);
458
459 check_point(24);
460 ercd = chg_pri(TSK_SELF, HIGH_PRIORITY);
461 check_ercd(ercd, E_OK);
462
463 check_point(25);
464 ercd = act_tsk(TASK2);
465 check_ercd(ercd, E_OK);
466
467 check_point(26);
468 ercd = slp_tsk();
469 check_ercd(ercd, E_OK);
470
471 check_point(29);
472 ercd = ter_tsk(TASK2);
473 check_ercd(ercd, E_OK);
474
475 check_point(30);
476 ercd = ref_mtx(MTX1, &rmtx);
477 check_ercd(ercd, E_OK);
478
479 check_assert(rmtx.htskid == TSK_NONE);
480
481 check_assert(rmtx.wtskid == TSK_NONE);
482
483 ercd = ref_mtx(MTX2, &rmtx);
484 check_ercd(ercd, E_OK);
485
486 check_assert(rmtx.htskid == TSK_NONE);
487
488 check_assert(rmtx.wtskid == TSK_NONE);
489
490 check_point(31);
491 ercd = act_tsk(TASK2);
492 check_ercd(ercd, E_OK);
493
494 ercd = act_tsk(TASK3);
495 check_ercd(ercd, E_OK);
496
497 ercd = act_tsk(TASK4);
498 check_ercd(ercd, E_OK);
499
500 check_point(32);
501 ercd = slp_tsk();
502 check_ercd(ercd, E_OK);
503
504 check_point(38);
505 ercd = ter_tsk(TASK2);
506 check_ercd(ercd, E_OK);
507
508 check_point(39);
509 ercd = ref_mtx(MTX1, &rmtx);
510 check_ercd(ercd, E_OK);
511
512 check_assert(rmtx.htskid == TASK3);
513
514 check_assert(rmtx.wtskid == TSK_NONE);
515
516 ercd = ref_mtx(MTX2, &rmtx);
517 check_ercd(ercd, E_OK);
518
519 check_assert(rmtx.htskid == TASK4);
520
521 check_assert(rmtx.wtskid == TSK_NONE);
522
523 ercd = get_pri(TASK3, &tskpri);
524 check_ercd(ercd, E_OK);
525
526 check_assert(tskpri == MID_PRIORITY);
527
528 ercd = get_pri(TASK4, &tskpri);
529 check_ercd(ercd, E_OK);
530
531 check_assert(tskpri == MID_PRIORITY);
532
533 check_point(40);
534 ercd = chg_pri(TSK_SELF, LOW_PRIORITY);
535 check_ercd(ercd, E_OK);
536
537 check_point(43);
538 ercd = act_tsk(TASK2);
539 check_ercd(ercd, E_OK);
540
541 ercd = act_tsk(TASK3);
542 check_ercd(ercd, E_OK);
543
544 ercd = act_tsk(TASK4);
545 check_ercd(ercd, E_OK);
546
547 check_point(44);
548 ercd = chg_pri(TSK_SELF, LOW_PRIORITY);
549 check_ercd(ercd, E_OK);
550
551 check_point(49);
552 ercd = ter_tsk(TASK2);
553 check_ercd(ercd, E_OK);
554
555 check_finish(53);
556 check_point(0);
557}
558
559static uint_t task2_count = 0;
560
561void
562task2(intptr_t exinf)
563{
564 ER_UINT ercd;
565
566 switch (++task2_count) {
567 case 1:
568 check_point(3);
569 ercd = loc_mtx(MTX1);
570 check_ercd(ercd, E_OK);
571
572 check_point(4);
573 ercd = wup_tsk(TASK1);
574 check_ercd(ercd, E_OK);
575
576 check_point(0);
577
578 case 2:
579 check_point(9);
580 ercd = loc_mtx(MTX1);
581 check_ercd(ercd, E_OK);
582
583 check_point(10);
584 ercd = tslp_tsk(10000U);
585 check_ercd(ercd, E_TMOUT);
586
587 check_point(12);
588 ercd = wup_tsk(TASK1);
589 check_ercd(ercd, E_OK);
590
591 check_point(0);
592
593 case 3:
594 check_point(18);
595 ercd = loc_mtx(MTX1);
596 check_ercd(ercd, E_OK);
597
598 check_point(19);
599 ercd = slp_tsk();
600 check_ercd(ercd, E_OK);
601
602 check_point(0);
603
604 case 4:
605 check_point(27);
606 ercd = loc_mtx(MTX1);
607 check_ercd(ercd, E_OK);
608
609 ercd = loc_mtx(MTX2);
610 check_ercd(ercd, E_OK);
611
612 check_point(28);
613 ercd = wup_tsk(TASK1);
614 check_ercd(ercd, E_OK);
615
616 check_point(0);
617
618 case 5:
619 check_point(33);
620 ercd = loc_mtx(MTX1);
621 check_ercd(ercd, E_OK);
622
623 ercd = loc_mtx(MTX2);
624 check_ercd(ercd, E_OK);
625
626 check_point(34);
627 ercd = tslp_tsk(10000U);
628 check_ercd(ercd, E_TMOUT);
629
630 check_point(37);
631 ercd = wup_tsk(TASK1);
632 check_ercd(ercd, E_OK);
633
634 check_point(0);
635
636 case 6:
637 check_point(45);
638 ercd = loc_mtx(MTX1);
639 check_ercd(ercd, E_OK);
640
641 ercd = loc_mtx(MTX2);
642 check_ercd(ercd, E_OK);
643
644 check_point(46);
645 ercd = slp_tsk();
646 check_ercd(ercd, E_OK);
647
648 check_point(0);
649
650 default:
651 check_point(0);
652 }
653 check_point(0);
654}
655
656static uint_t task3_count = 0;
657
658void
659task3(intptr_t exinf)
660{
661 ER_UINT ercd;
662 PRI tskpri;
663 T_RMTX rmtx;
664
665 switch (++task3_count) {
666 case 1:
667 check_point(11);
668 ercd = loc_mtx(MTX1);
669 check_ercd(ercd, E_OK);
670
671 check_point(0);
672
673 case 2:
674 check_point(20);
675 ercd = loc_mtx(MTX1);
676 check_ercd(ercd, E_OK);
677
678 check_point(22);
679 ercd = ref_mtx(MTX1, &rmtx);
680 check_ercd(ercd, E_OK);
681
682 check_assert(rmtx.htskid == TASK3);
683
684 check_assert(rmtx.wtskid == TSK_NONE);
685
686 ercd = get_pri(TASK3, &tskpri);
687 check_ercd(ercd, E_OK);
688
689 check_assert(tskpri == MID_PRIORITY);
690
691 check_point(23);
692 ercd = ext_tsk();
693
694 check_point(0);
695
696 case 3:
697 check_point(35);
698 ercd = loc_mtx(MTX1);
699 check_ercd(ercd, E_OK);
700
701 check_point(42);
702 ercd = ext_tsk();
703
704 check_point(0);
705
706 case 4:
707 check_point(47);
708 ercd = loc_mtx(MTX1);
709 check_ercd(ercd, E_OK);
710
711 check_point(52);
712 ercd = ext_tsk();
713
714 check_point(0);
715
716 default:
717 check_point(0);
718 }
719 check_point(0);
720}
721
722static uint_t task4_count = 0;
723
724void
725task4(intptr_t exinf)
726{
727 ER_UINT ercd;
728 PRI tskpri;
729 T_RMTX rmtx;
730
731 switch (++task4_count) {
732 case 1:
733 check_point(36);
734 ercd = loc_mtx(MTX2);
735 check_ercd(ercd, E_OK);
736
737 check_point(41);
738 ercd = ext_tsk();
739
740 check_point(0);
741
742 case 2:
743 check_point(48);
744 ercd = loc_mtx(MTX2);
745 check_ercd(ercd, E_OK);
746
747 check_point(50);
748 ercd = ref_mtx(MTX1, &rmtx);
749 check_ercd(ercd, E_OK);
750
751 check_assert(rmtx.htskid == TASK3);
752
753 check_assert(rmtx.wtskid == TSK_NONE);
754
755 ercd = ref_mtx(MTX2, &rmtx);
756 check_ercd(ercd, E_OK);
757
758 check_assert(rmtx.htskid == TASK4);
759
760 check_assert(rmtx.wtskid == TSK_NONE);
761
762 ercd = get_pri(TASK3, &tskpri);
763 check_ercd(ercd, E_OK);
764
765 check_assert(tskpri == MID_PRIORITY);
766
767 ercd = get_pri(TASK4, &tskpri);
768 check_ercd(ercd, E_OK);
769
770 check_assert(tskpri == MID_PRIORITY);
771
772 check_point(51);
773 ercd = ext_tsk();
774
775 check_point(0);
776
777 default:
778 check_point(0);
779 }
780 check_point(0);
781}
Note: See TracBrowser for help on using the repository browser.