source: asp3_wo_tecs/trunk/test/test_raster1.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: 19.4 KB
Line 
1/*
2 * TOPPERS Software
3 * Toyohashi Open Platform for Embedded Real-Time Systems
4 *
5 * Copyright (C) 2014-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_raster1.c 453 2015-08-15 23:05:31Z ertl-hiro $
53 */
54
55/*
56 * タスク終了要求機能に関するテスト(1)
57 *
58 * 【テストの目的】
59 *
60 * ras_terの振舞いのテスト[NGKI3469]
61 * ・ras_terに関するすべての要求をテストする.
62 * ・ras_ter関数のC1カバレッジを達成する.
63 * タスク終了時に行うべき処理に関するテスト
64 * ・タスク終了時に行うべき処理に関するすべての要求をテストする.
65 * ・task_terminate関数のC1カバレッジを達成する(ras_terから呼び出し
66 * た場合に実行されることがないパスを除く).
67 * タスク終了要求機能に関連してタスクが持つ情
68報に関するテスト
69 * ref_tskのタスク終了要求機能に関するテスト
70 *
71 * 【テスト項
72目】
73 *
74 * (A) ras_terのエラー検出
75 * (A-1) 非タスクコンテキストからの呼出し[NGKI3470]
76 * (A-2) CPUロック状æ…
77‹ã‹ã‚‰ã®å‘¼å‡ºã—ï¼»NGKI3471ï¼½
78 * (A-3) tskidが有効範囲外(小さすぎる)[NGKI3472]
79 * (A-4) tskidが有効範囲外(大きすぎる)[NGKI3472]
80 * (A-5) 対象タスクが自タスク[NGKI3475]
81 * (A-6) 対象タスクが休止状æ…
82‹ï¼»NGKI3476ï¼½
83 * (B) ras_terによるタスク終了[NGKI3477]
84 * (B-1) 対象タスクが実行可能状æ…
85‹ã‹ã‚‰ä¼‘止状æ…
86‹ã«ï¼»NGKI1178ï¼½
87 * (B-2) 対象タスクが待
88ち状æ…
89‹ã‹ã‚‰ä¼‘止状æ…
90‹ã«ï¼»NGKI1178ï¼½
91 * (B-3) ロックしているミューテックスのロック解除[NGKI2019]
92 * (B-4) (B-3)の処理により待
93ち解除されたタスクに切換え
94 * (C) ras_terによるタスク終了と再起動[NGKI1179]
95 * (C-1) 対象タスクが実行可能状æ…
96‹ã«
97 * (C-2) (C-1)の時に起動要求キューイング数が1減少[NGKI1180]
98 * (C-3) 対象タスクが実行状æ…
99‹ã«
100 * (D) ras_terによるタスク終了要求
101 * (D-1) タスク終了要求がセットされる[NGKI3478]
102 * (D-2) 対象タスクが待
103ち解除され実行可能状æ…
104‹ã«ï¼»NGKI3479ï¼½
105 * (D-3) 待
106ち解除されたタスクからE_RASTERが返る[NGKI3480]
107 * (D-4) 対象タスクが待
108ち解除され実行状æ…
109‹ã«ï¼»NGKI3479ï¼½
110 * (D-5) 対象タスクが強制待
111ちから再開され実行状æ…
112‹ã«ï¼»NGKI3606ï¼½
113 * (E) タスク起動時の初期化に関連するテスト
114 * (E-1) タスク終了要求フラグがクリアされること[NGKI3451]
115 * (E-2) タスク終了禁止フラグがクリアされること[NGKI3454]
116 * (F) タスク終了要求フラグがセットされた時の振舞い(網羅
117はしない)
118 * (F-1) セットされた場合にタスクが待
119ち解除されること[NGKI3452]
120 * (F-2) セットされたタスクが待
121ち状æ…
122‹ã«é·ç§»ã—ようとするとE_RASTERエ
123 * ラーとなること[NGKI3453]
124 * (F-3) セットされた場合にタスクが強制待
125ちから再開されること[NGKI3452]
126 * (F-4) セットされたタスクを強制待
127ち状æ…
128‹ã«é·ç§»ã—ようとすると
129 * E_RASTERエラーとなること[NGKI3607]
130 * (G) ref_tskのタスク終了要求機能に関連するテスト
131 * (G-1) タスク終了要求フラグがセットされている場合にrasterにtrueが
132 * 返ること[NGKI3467]
133 * (G-2) タスク終了要求フラグがクリアされている場合にrasterにfalseが
134 * 返ること[NGKI3467]
135 * (G-3) タスク終了禁止状æ…
136‹ã®å ´åˆã«disterにtrueが返ること[NGKI3468ï¼½
137 * (G-4) タスク終了許可状æ…
138‹ã®å ´åˆã«disterにfalseが返ること[NGKI3468ï¼½
139 * ASPカーネルに適用されない要求:
140 * [NGKI3473][NGKI3474][NGKI3481]
141 *
142 * 【使用リソース】
143 *
144 * TASK1: 中優å…
145ˆåº¦ã‚¿ã‚¹ã‚¯ï¼ŒTA_ACT属性
146 * TASK2: 低優å…
147ˆåº¦ã‚¿ã‚¹ã‚¯
148 * TASK3: 高優å…
149ˆåº¦ã‚¿ã‚¹ã‚¯
150 * TASK4: 高優å…
151ˆåº¦ã‚¿ã‚¹ã‚¯
152 * ALM1: アラームハンドラ
153 * MTX1: ミューテックス
154 *
155 * 【テストシーケンス】
156 *
157 * == TASK1 ==
158 * call(set_bit_func(bit_kernel))
159 * 1: act_tsk(TASK2)
160 * sta_alm(ALM1, 10000U)
161 * slp_tsk()
162 * == TASK2-1(1回目)==
163 * 2: DO(while(true))
164 * == ALM1 ==
165 * 3: ras_ter(TASK2) -> E_CTX ... (A-1)
166 * wup_tsk(TASK1)
167 * RETURN
168 * == TASK1(続き)==
169 * 4: loc_cpu()
170 * ras_ter(TASK2) -> E_CTX ... (A-2)
171 * unl_cpu()
172 * 5: ras_ter(0U) -> E_ID ... (A-3)
173 * ras_ter(TNUM_TSKID + 1) -> E_ID ... (A-4)
174 * ras_ter(TASK1) -> E_ILUSE ... (A-5)
175 * ras_ter(TASK3) -> E_OBJ ... (A-6)
176 * 6: ref_tsk(TASK2, &rtsk)
177 * assert(rtsk.tskstat == TTS_RDY)
178 * 7: ras_ter(TASK2) ... (B-1)
179 * 8: ref_tsk(TASK2, &rtsk)
180 * assert(rtsk.tskstat == TTS_DMT)
181 * 9: act_tsk(TASK3)
182 * == TASK3-1(1回目)==
183 * 10: tloc_mtx(MTX1, 10000U)
184 * 11: slp_tsk()
185 * == TASK1(続き)==
186 * 12: ref_tsk(TASK3, &rtsk)
187 * assert(rtsk.tskstat == TTS_WAI)
188 * ref_mtx(MTX1, &rmtx)
189 * assert(rmtx.htskid == TASK3)
190 * assert(rmtx.wtskid == TSK_NONE)
191 * 13: ras_ter(TASK3) ... (B-2)
192 * 14: ref_tsk(TASK3, &rtsk)
193 * assert(rtsk.tskstat == TTS_DMT)
194 * ref_mtx(MTX1, &rmtx)
195 * assert(rmtx.htskid == TSK_NONE) ... (B-3)
196 * assert(rmtx.wtskid == TSK_NONE)
197 * 15: act_tsk(TASK3)
198 * == TASK3-2(2回目)==
199 * 16: loc_mtx(MTX1)
200 * 17: slp_tsk()
201 * == TASK1(続き)==
202 * 18: act_tsk(TASK4)
203 * == TASK4 ==
204 * 19: loc_mtx(MTX1)
205 * == TASK1(続き)==
206 * 20: ref_tsk(TASK3, &rtsk)
207 * assert(rtsk.tskstat == TTS_WAI)
208 * ref_mtx(MTX1, &rmtx)
209 * assert(rmtx.htskid == TASK3)
210 * assert(rmtx.wtskid == TASK4)
211 * 21: ras_ter(TASK3) ... (B-4)
212 * == TASK4(続き)==
213 * 22: ref_tsk(TASK3, &rtsk)
214 * assert(rtsk.tskstat == TTS_DMT)
215 * ref_mtx(MTX1, &rmtx)
216 * assert(rmtx.htskid == TASK4)
217 * assert(rmtx.wtskid == TSK_NONE)
218 * 23: slp_tsk()
219 * == TASK1(続き)==
220 * 24: act_tsk(TASK2)
221 * act_tsk(TASK2)
222 * 25: ref_tsk(TASK2, &rtsk)
223 * assert(rtsk.tskstat == TTS_RDY)
224 * assert(rtsk.actcnt == 1U)
225 * 26: ras_ter(TASK2) ... (C-1)
226 * 27: ref_tsk(TASK2, &rtsk)
227 * assert(rtsk.tskstat == TTS_RDY)
228 * assert(rtsk.actcnt == 0U) ... (C-2)
229 * 28: act_tsk(TASK3)
230 * == TASK3-3(3回目)==
231 * 29: slp_tsk()
232 * == TASK1(続き)==
233 * 30: act_tsk(TASK3)
234 * 31: ref_tsk(TASK3, &rtsk)
235 * assert(rtsk.tskstat == TTS_WAI)
236 * assert(rtsk.actcnt == 1U)
237 * 32: ras_ter(TASK3) ... (C-3)
238 * == TASK3-4(4回目)==
239 * 33: ref_tsk(TASK3, &rtsk)
240 * assert(rtsk.tskstat == TTS_RUN)
241 * assert(rtsk.actcnt == 0U)
242 * ext_tsk()
243 * == TASK1(続き)==
244 * 34: act_tsk(TASK2)
245 * slp_tsk()
246 * == TASK2-2(2回目)==
247 * 35: dis_ter()
248 * wup_tsk(TASK1)
249 * == TASK1(続き)==
250 * 36: ref_tsk(TASK2, &rtsk)
251 * assert(rtsk.tskstat == TTS_RDY)
252 * assert(rtsk.raster == false) ... (G-2)
253 * assert(rtsk.dister == true) ... (G-3)
254 * 37: ras_ter(TASK2) ... (D-1)
255 * 38: ref_tsk(TASK2, &rtsk)
256 * assert(rtsk.tskstat == TTS_RDY)
257 * assert(rtsk.raster == true) ... (G-1)
258 * assert(rtsk.dister == true)
259 * 39: ter_tsk(TASK2)
260 * act_tsk(TASK2)
261 * 40: ref_tsk(TASK2, &rtsk)
262 * assert(rtsk.tskstat == TTS_RDY)
263 * assert(rtsk.raster == false) ... (E-1)
264 * assert(rtsk.dister == false) ... (E-2)(G-4)
265 * tslp_tsk(10000U) -> E_TMOUT
266 * == TASK2-3(3回目)==
267 * 41: dis_ter()
268 * slp_tsk() -> E_RASTER ... (D-3)
269 * == TASK1(続き)==
270 * 42: ref_tsk(TASK2, &rtsk)
271 * assert(rtsk.tskstat == TTS_WAI)
272 * assert(rtsk.raster == false)
273 * assert(rtsk.dister == true)
274 * 43: ras_ter(TASK2) ... (D-2)(F-1)
275 * 44: ref_tsk(TASK2, &rtsk)
276 * assert(rtsk.tskstat == TTS_RDY)
277 * assert(rtsk.raster == true)
278 * assert(rtsk.dister == true)
279 * slp_tsk()
280 * == TASK2-3(続き)==
281 * 45: wup_tsk(TASK1)
282 * == TASK1(続き)==
283 * 46: act_tsk(TASK3)
284 * == TASK3-5(5回目)==
285 * 47: dis_ter()
286 * slp_tsk() -> E_RASTER
287 * == TASK1(続き)==
288 * 48: ref_tsk(TASK3, &rtsk)
289 * assert(rtsk.tskstat == TTS_WAI)
290 * assert(rtsk.raster == false)
291 * assert(rtsk.dister == true)
292 * 49: ras_ter(TASK3) ... (D-4)
293 * == TASK3-5(続き)==
294 * 50: ref_tsk(TASK3, &rtsk)
295 * assert(rtsk.tskstat == TTS_RUN)
296 * assert(rtsk.raster == true)
297 * assert(rtsk.dister == true)
298 * 51: slp_tsk() -> E_RASTER ... (F-2)
299 * ena_ter()
300 * == TASK1(続き)==
301 * 52: ref_tsk(TASK3, &rtsk)
302 * assert(rtsk.tskstat == TTS_DMT)
303 * 53: act_tsk(TASK3)
304 * == TASK3-6(6回目)==
305 * 54: dis_ter()
306 * sus_tsk(TSK_SELF)
307 * == TASK1(続き)==
308 * 55: ref_tsk(TASK3, &rtsk)
309 * assert(rtsk.tskstat == TTS_SUS)
310 * 56: ras_ter(TASK3) ... (D-5)(F-3)
311 * == TASK3-6(続き)==
312 * 57: ref_tsk(TASK3, &rtsk)
313 * assert(rtsk.tskstat == TTS_RUN)
314 * assert(rtsk.raster == true)
315 * assert(rtsk.dister == true)
316 * sus_tsk(TSK_SELF) -> E_RASTER ... (F-4)
317 * ena_ter()
318 * == TASK1(続き)==
319 * 58: ref_tsk(TASK3, &rtsk)
320 * assert(rtsk.tskstat == TTS_DMT)
321 * 59: END
322 */
323
324#include <kernel.h>
325#include <t_syslog.h>
326#include "syssvc/test_svc.h"
327#include "kernel_cfg.h"
328#include "test_raster1.h"
329
330extern ER bit_kernel(void);
331
332/* DO NOT DELETE THIS LINE -- gentest depends on it. */
333
334void
335alarm1_handler(intptr_t exinf)
336{
337 ER_UINT ercd;
338
339 check_point(3);
340 ercd = ras_ter(TASK2);
341 check_ercd(ercd, E_CTX);
342
343 ercd = wup_tsk(TASK1);
344 check_ercd(ercd, E_OK);
345
346 return;
347
348 check_point(0);
349}
350
351void
352task1(intptr_t exinf)
353{
354 ER_UINT ercd;
355 T_RTSK rtsk;
356 T_RMTX rmtx;
357
358 test_start(__FILE__);
359
360 set_bit_func(bit_kernel);
361
362 check_point(1);
363 ercd = act_tsk(TASK2);
364 check_ercd(ercd, E_OK);
365
366 ercd = sta_alm(ALM1, 10000U);
367 check_ercd(ercd, E_OK);
368
369 ercd = slp_tsk();
370 check_ercd(ercd, E_OK);
371
372 check_point(4);
373 ercd = loc_cpu();
374 check_ercd(ercd, E_OK);
375
376 ercd = ras_ter(TASK2);
377 check_ercd(ercd, E_CTX);
378
379 ercd = unl_cpu();
380 check_ercd(ercd, E_OK);
381
382 check_point(5);
383 ercd = ras_ter(0U);
384 check_ercd(ercd, E_ID);
385
386 ercd = ras_ter(TNUM_TSKID + 1);
387 check_ercd(ercd, E_ID);
388
389 ercd = ras_ter(TASK1);
390 check_ercd(ercd, E_ILUSE);
391
392 ercd = ras_ter(TASK3);
393 check_ercd(ercd, E_OBJ);
394
395 check_point(6);
396 ercd = ref_tsk(TASK2, &rtsk);
397 check_ercd(ercd, E_OK);
398
399 check_assert(rtsk.tskstat == TTS_RDY);
400
401 check_point(7);
402 ercd = ras_ter(TASK2);
403 check_ercd(ercd, E_OK);
404
405 check_point(8);
406 ercd = ref_tsk(TASK2, &rtsk);
407 check_ercd(ercd, E_OK);
408
409 check_assert(rtsk.tskstat == TTS_DMT);
410
411 check_point(9);
412 ercd = act_tsk(TASK3);
413 check_ercd(ercd, E_OK);
414
415 check_point(12);
416 ercd = ref_tsk(TASK3, &rtsk);
417 check_ercd(ercd, E_OK);
418
419 check_assert(rtsk.tskstat == TTS_WAI);
420
421 ercd = ref_mtx(MTX1, &rmtx);
422 check_ercd(ercd, E_OK);
423
424 check_assert(rmtx.htskid == TASK3);
425
426 check_assert(rmtx.wtskid == TSK_NONE);
427
428 check_point(13);
429 ercd = ras_ter(TASK3);
430 check_ercd(ercd, E_OK);
431
432 check_point(14);
433 ercd = ref_tsk(TASK3, &rtsk);
434 check_ercd(ercd, E_OK);
435
436 check_assert(rtsk.tskstat == TTS_DMT);
437
438 ercd = ref_mtx(MTX1, &rmtx);
439 check_ercd(ercd, E_OK);
440
441 check_assert(rmtx.htskid == TSK_NONE);
442
443 check_assert(rmtx.wtskid == TSK_NONE);
444
445 check_point(15);
446 ercd = act_tsk(TASK3);
447 check_ercd(ercd, E_OK);
448
449 check_point(18);
450 ercd = act_tsk(TASK4);
451 check_ercd(ercd, E_OK);
452
453 check_point(20);
454 ercd = ref_tsk(TASK3, &rtsk);
455 check_ercd(ercd, E_OK);
456
457 check_assert(rtsk.tskstat == TTS_WAI);
458
459 ercd = ref_mtx(MTX1, &rmtx);
460 check_ercd(ercd, E_OK);
461
462 check_assert(rmtx.htskid == TASK3);
463
464 check_assert(rmtx.wtskid == TASK4);
465
466 check_point(21);
467 ercd = ras_ter(TASK3);
468 check_ercd(ercd, E_OK);
469
470 check_point(24);
471 ercd = act_tsk(TASK2);
472 check_ercd(ercd, E_OK);
473
474 ercd = act_tsk(TASK2);
475 check_ercd(ercd, E_OK);
476
477 check_point(25);
478 ercd = ref_tsk(TASK2, &rtsk);
479 check_ercd(ercd, E_OK);
480
481 check_assert(rtsk.tskstat == TTS_RDY);
482
483 check_assert(rtsk.actcnt == 1U);
484
485 check_point(26);
486 ercd = ras_ter(TASK2);
487 check_ercd(ercd, E_OK);
488
489 check_point(27);
490 ercd = ref_tsk(TASK2, &rtsk);
491 check_ercd(ercd, E_OK);
492
493 check_assert(rtsk.tskstat == TTS_RDY);
494
495 check_assert(rtsk.actcnt == 0U);
496
497 check_point(28);
498 ercd = act_tsk(TASK3);
499 check_ercd(ercd, E_OK);
500
501 check_point(30);
502 ercd = act_tsk(TASK3);
503 check_ercd(ercd, E_OK);
504
505 check_point(31);
506 ercd = ref_tsk(TASK3, &rtsk);
507 check_ercd(ercd, E_OK);
508
509 check_assert(rtsk.tskstat == TTS_WAI);
510
511 check_assert(rtsk.actcnt == 1U);
512
513 check_point(32);
514 ercd = ras_ter(TASK3);
515 check_ercd(ercd, E_OK);
516
517 check_point(34);
518 ercd = act_tsk(TASK2);
519 check_ercd(ercd, E_OK);
520
521 ercd = slp_tsk();
522 check_ercd(ercd, E_OK);
523
524 check_point(36);
525 ercd = ref_tsk(TASK2, &rtsk);
526 check_ercd(ercd, E_OK);
527
528 check_assert(rtsk.tskstat == TTS_RDY);
529
530 check_assert(rtsk.raster == false);
531
532 check_assert(rtsk.dister == true);
533
534 check_point(37);
535 ercd = ras_ter(TASK2);
536 check_ercd(ercd, E_OK);
537
538 check_point(38);
539 ercd = ref_tsk(TASK2, &rtsk);
540 check_ercd(ercd, E_OK);
541
542 check_assert(rtsk.tskstat == TTS_RDY);
543
544 check_assert(rtsk.raster == true);
545
546 check_assert(rtsk.dister == true);
547
548 check_point(39);
549 ercd = ter_tsk(TASK2);
550 check_ercd(ercd, E_OK);
551
552 ercd = act_tsk(TASK2);
553 check_ercd(ercd, E_OK);
554
555 check_point(40);
556 ercd = ref_tsk(TASK2, &rtsk);
557 check_ercd(ercd, E_OK);
558
559 check_assert(rtsk.tskstat == TTS_RDY);
560
561 check_assert(rtsk.raster == false);
562
563 check_assert(rtsk.dister == false);
564
565 ercd = tslp_tsk(10000U);
566 check_ercd(ercd, E_TMOUT);
567
568 check_point(42);
569 ercd = ref_tsk(TASK2, &rtsk);
570 check_ercd(ercd, E_OK);
571
572 check_assert(rtsk.tskstat == TTS_WAI);
573
574 check_assert(rtsk.raster == false);
575
576 check_assert(rtsk.dister == true);
577
578 check_point(43);
579 ercd = ras_ter(TASK2);
580 check_ercd(ercd, E_OK);
581
582 check_point(44);
583 ercd = ref_tsk(TASK2, &rtsk);
584 check_ercd(ercd, E_OK);
585
586 check_assert(rtsk.tskstat == TTS_RDY);
587
588 check_assert(rtsk.raster == true);
589
590 check_assert(rtsk.dister == true);
591
592 ercd = slp_tsk();
593 check_ercd(ercd, E_OK);
594
595 check_point(46);
596 ercd = act_tsk(TASK3);
597 check_ercd(ercd, E_OK);
598
599 check_point(48);
600 ercd = ref_tsk(TASK3, &rtsk);
601 check_ercd(ercd, E_OK);
602
603 check_assert(rtsk.tskstat == TTS_WAI);
604
605 check_assert(rtsk.raster == false);
606
607 check_assert(rtsk.dister == true);
608
609 check_point(49);
610 ercd = ras_ter(TASK3);
611 check_ercd(ercd, E_OK);
612
613 check_point(52);
614 ercd = ref_tsk(TASK3, &rtsk);
615 check_ercd(ercd, E_OK);
616
617 check_assert(rtsk.tskstat == TTS_DMT);
618
619 check_point(53);
620 ercd = act_tsk(TASK3);
621 check_ercd(ercd, E_OK);
622
623 check_point(55);
624 ercd = ref_tsk(TASK3, &rtsk);
625 check_ercd(ercd, E_OK);
626
627 check_assert(rtsk.tskstat == TTS_SUS);
628
629 check_point(56);
630 ercd = ras_ter(TASK3);
631 check_ercd(ercd, E_OK);
632
633 check_point(58);
634 ercd = ref_tsk(TASK3, &rtsk);
635 check_ercd(ercd, E_OK);
636
637 check_assert(rtsk.tskstat == TTS_DMT);
638
639 check_finish(59);
640 check_point(0);
641}
642
643static uint_t task2_count = 0;
644
645void
646task2(intptr_t exinf)
647{
648 ER_UINT ercd;
649
650 switch (++task2_count) {
651 case 1:
652 check_point(2);
653 while(true);
654
655 check_point(0);
656
657 case 2:
658 check_point(35);
659 ercd = dis_ter();
660 check_ercd(ercd, E_OK);
661
662 ercd = wup_tsk(TASK1);
663 check_ercd(ercd, E_OK);
664
665 check_point(0);
666
667 case 3:
668 check_point(41);
669 ercd = dis_ter();
670 check_ercd(ercd, E_OK);
671
672 ercd = slp_tsk();
673 check_ercd(ercd, E_RASTER);
674
675 check_point(45);
676 ercd = wup_tsk(TASK1);
677 check_ercd(ercd, E_OK);
678
679 check_point(0);
680
681 default:
682 check_point(0);
683 }
684 check_point(0);
685}
686
687static uint_t task3_count = 0;
688
689void
690task3(intptr_t exinf)
691{
692 ER_UINT ercd;
693 T_RTSK rtsk;
694
695 switch (++task3_count) {
696 case 1:
697 check_point(10);
698 ercd = tloc_mtx(MTX1, 10000U);
699 check_ercd(ercd, E_OK);
700
701 check_point(11);
702 ercd = slp_tsk();
703 check_ercd(ercd, E_OK);
704
705 check_point(0);
706
707 case 2:
708 check_point(16);
709 ercd = loc_mtx(MTX1);
710 check_ercd(ercd, E_OK);
711
712 check_point(17);
713 ercd = slp_tsk();
714 check_ercd(ercd, E_OK);
715
716 check_point(0);
717
718 case 3:
719 check_point(29);
720 ercd = slp_tsk();
721 check_ercd(ercd, E_OK);
722
723 check_point(0);
724
725 case 4:
726 check_point(33);
727 ercd = ref_tsk(TASK3, &rtsk);
728 check_ercd(ercd, E_OK);
729
730 check_assert(rtsk.tskstat == TTS_RUN);
731
732 check_assert(rtsk.actcnt == 0U);
733
734 ercd = ext_tsk();
735 check_ercd(ercd, E_OK);
736
737 check_point(0);
738
739 case 5:
740 check_point(47);
741 ercd = dis_ter();
742 check_ercd(ercd, E_OK);
743
744 ercd = slp_tsk();
745 check_ercd(ercd, E_RASTER);
746
747 check_point(50);
748 ercd = ref_tsk(TASK3, &rtsk);
749 check_ercd(ercd, E_OK);
750
751 check_assert(rtsk.tskstat == TTS_RUN);
752
753 check_assert(rtsk.raster == true);
754
755 check_assert(rtsk.dister == true);
756
757 check_point(51);
758 ercd = slp_tsk();
759 check_ercd(ercd, E_RASTER);
760
761 ercd = ena_ter();
762 check_ercd(ercd, E_OK);
763
764 check_point(0);
765
766 case 6:
767 check_point(54);
768 ercd = dis_ter();
769 check_ercd(ercd, E_OK);
770
771 ercd = sus_tsk(TSK_SELF);
772 check_ercd(ercd, E_OK);
773
774 check_point(57);
775 ercd = ref_tsk(TASK3, &rtsk);
776 check_ercd(ercd, E_OK);
777
778 check_assert(rtsk.tskstat == TTS_RUN);
779
780 check_assert(rtsk.raster == true);
781
782 check_assert(rtsk.dister == true);
783
784 ercd = sus_tsk(TSK_SELF);
785 check_ercd(ercd, E_RASTER);
786
787 ercd = ena_ter();
788 check_ercd(ercd, E_OK);
789
790 check_point(0);
791
792 default:
793 check_point(0);
794 }
795 check_point(0);
796}
797
798void
799task4(intptr_t exinf)
800{
801 ER_UINT ercd;
802 T_RTSK rtsk;
803 T_RMTX rmtx;
804
805 check_point(19);
806 ercd = loc_mtx(MTX1);
807 check_ercd(ercd, E_OK);
808
809 check_point(22);
810 ercd = ref_tsk(TASK3, &rtsk);
811 check_ercd(ercd, E_OK);
812
813 check_assert(rtsk.tskstat == TTS_DMT);
814
815 ercd = ref_mtx(MTX1, &rmtx);
816 check_ercd(ercd, E_OK);
817
818 check_assert(rmtx.htskid == TASK4);
819
820 check_assert(rmtx.wtskid == TSK_NONE);
821
822 check_point(23);
823 ercd = slp_tsk();
824 check_ercd(ercd, E_OK);
825
826 check_point(0);
827}
Note: See TracBrowser for help on using the repository browser.