source: rtos_arduino/trunk/asp_1.9.2/test/test_tex1.c@ 136

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

ライブラリとOS及びベーシックなサンプルの追加.

File size: 15.5 KB
Line 
1/*
2 * TOPPERS Software
3 * Toyohashi Open Platform for Embedded Real-Time Systems
4 *
5 * Copyright (C) 2006-2013 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_tex1.c 2596 2014-01-02 12:21:31Z ertl-hiro $
53 */
54
55/*
56 * タスク例外処理に関するテスト(1)
57 *
58 * 【テストの目的】
59 *
60 * タスクからタスク例外処理ルーチンを起動する処理を網羅
61的にテストする.
62 *
63 * 【テスト項
64目】
65 *
66 * (A) ras_texのエラー検出
67 * (A-1) 対象タスクが休止状æ…
68‹ï¼»NGKI1413ï¼½
69 * (A-2) 対象タスクのタスク例外処理ルーチンが定義されていない[NGKI1414]
70 * (B) dis_texのエラー検出
71 * (B-1) 自タスクのタスク例外処理ルーチンが定義されていない[NGKI1421]
72 * (C) ena_texのエラー検出
73 * (C-1) 自タスクのタスク例外処理ルーチンが定義されていない[NGKI1426]
74 * (D) ref_texのエラー検出
75 * (D-1) 対象タスクが休止状æ…
76‹ï¼»NGKI1439ï¼½
77 * (D-2) 対象タスクのタスク例外処理ルーチンが定義されていない[NGKI1440]
78 * (E) ras_texの正常処理[NGKI1415]
79 * (E-1) 対象タスクが自タスク,タスク例外処理許可,かつ割込み優å…
80ˆ
81 * 度マスクå…
82¨è§£é™¤çŠ¶æ…
83‹ã§ï¼Œã™ãã«å®Ÿè¡Œé–‹å§‹
84 * (E-2) 対象タスクが自タスクでない
85 * (E-3) 対象タスクが自タスクだが,タスク例外処理禁止
86 * (E-4) 対象タスクが自タスクでタスク例外処理許可だが,割込み優å…
87ˆ
88 * 度マスクがå…
89¨è§£é™¤ã§ãªã„
90 * (F) ena_texの正常処理[NGKI1427]
91 * (F-1) タスク例外処理要求があり,かつ割込み優å…
92ˆåº¦ãƒžã‚¹ã‚¯å…
93¨è§£é™¤çŠ¶
94 * æ…
95‹ã§ï¼Œã™ãã«å®Ÿè¡Œé–‹å§‹
96 * (F-2) タスク例外処理要求がない
97 * (F-3) タスク例外処理要求があるが,割込み優å…
98ˆåº¦ãƒžã‚¹ã‚¯ãŒå…
99¨è§£é™¤ã§
100 * ない
101 * (G) chg_ipmの正常処理
102 * (G-1) タスク例外処理要求があり,かつタスク例外処理許可で,すぐ
103 * に実行開始
104 * (G-2) タスク例外処理要求がない
105 * (G-3) タスク例外処理要求があるが,タスク例外処理禁止
106 * (G-4) タスク例外処理要求があるが,割込み優å…
107ˆåº¦ãƒžã‚¹ã‚¯ãŒå…
108¨è§£é™¤ã§
109 * ない
110 * (H) タスクディスパッチャによる起動
111 * (H-1) ディスパッチ後のタスクがタスク例外許可でタスク例外処理要
112 * 求あり
113 * (I) タスク例外処理ルーチンからのリターンによる起動(連続起動)
114 * (J) タスク例外処理ルーチンからの戻り時による状æ…
115‹å¾©å¸°
116 * (J-1) タスクに戻ってくる時
117 * (J-2) タスク例外処理ルーチンが連続起動される時
118 * (K) タスク例外処理ルーチンの多重起動
119 * (L) タスク例外処理ルーチンからの戻り時のタスク切換え
120 *
121 * 【使用リソース】
122 *
123 * TASK1: メインのタスク.自タスクに対してタスク例外処理を要求する
124 * TASK2: 他タスクに対してタスク例外処理を要求する対象タスク
125 * TASK3: タスク例外処理ルーチンが定義されていないタスク
126 * TASK4: 休止状æ…
127‹ã®ã‚¿ã‚¹ã‚¯
128 *
129 * 【テストシーケンス】
130 *
131 * == TASK1(優å…
132ˆåº¦ï¼š10)==
133 * 1: state(false, false, TIPM_ENAALL, false, false, true)
134 * ref_tex(TSK_SELF, &rtex)
135 * assert((rtex.texstat & TTEX_DIS) != 0U)
136 * assert(rtex.pndptn == 0U)
137 * ras_tex(TASK3, 0x0001) -> E_OBJ ... (A-2)
138 * ras_tex(TASK4, 0x0001) -> E_OBJ ... (A-1)
139 * ref_tex(TASK3, &rtex) -> E_OBJ ... (D-2)
140 * ref_tex(TASK4, &rtex) -> E_OBJ ... (D-1)
141 * 2: ena_tex() ... (F-2)
142 * state(false, false, TIPM_ENAALL, false, false, false)
143 * ref_tex(TSK_SELF, &rtex)
144 * assert((rtex.texstat & TTEX_ENA) != 0U)
145 * assert(rtex.pndptn == 0U)
146 * 3: ras_tex(TSK_SELF, 0x0001) ... (E-1)
147 * == TASK1-TEX-1(1回目)==
148 * 4: assert(texptn == 0x0001)
149 * state(false, false, TIPM_ENAALL, false, false, true)
150 * 5: dis_dsp() ... 4つの状æ…
151‹ã‚’それぞれ変化させる
152 * chg_ipm(TMAX_INTPRI)
153 * ena_tex()
154 * loc_cpu()
155 * state(false, true, TMAX_INTPRI, true, true, false)
156 * RETURN
157 * == TASK1(続き)==
158 * 6: state(false, false, TIPM_ENAALL, false, false, false) ... (J-1)
159 * 7: dis_dsp() ... ディスパッチ禁止,タスク例外処理禁止
160 * dis_tex()
161 * state(false, false, TIPM_ENAALL, true, true, true)
162 * 8: ras_tex(TASK1, 0x0002) ... (E-3)
163 * ref_tex(TSK_SELF, &rtex)
164 * assert((rtex.texstat & TTEX_DIS) != 0)
165 * assert(rtex.pndptn == 0x0002)
166 * 9: ena_tex() ... (F-1)
167 * == TASK1-TEX-2(2回目)==
168 * 10: assert(texptn == 0x0002)
169 * state(false, false, TIPM_ENAALL, true, true, true)
170 * 11: ras_tex(TASK1, 0x0001) ... (E-3)
171 * ras_tex(TASK1, 0x0002) ... (E-3)
172 * 12: ena_dsp() ... 3つの状æ…
173‹ã‚’それぞれ変化させる
174 * chg_ipm(TMAX_INTPRI)
175 * loc_cpu()
176 * state(false, true, TMAX_INTPRI, false, true, true)
177 * RETURN ... (I)
178 * == TASK1-TEX-3(3回目)==
179 * 13: assert(texptn == 0x0003)
180 * state(false, false, TIPM_ENAALL, true, true, true) ... (J-2)
181 * 14: ena_dsp() ... ディスパッチ許可,タスク例外許可
182 * chg_ipm(TMAX_INTPRI)
183 * ena_tex()
184 * state(false, false, TMAX_INTPRI, false, true, false)
185 * chg_ipm(TIPM_ENAALL) ... (G-2)
186 * chg_ipm(TMAX_INTPRI)
187 * 15: ras_tex(TSK_SELF, 0x0004) ... (E-4)
188 * chg_ipm(TMAX_INTPRI) ... (G-4)
189 * dis_tex()
190 * chg_ipm(TIPM_ENAALL) ... (G-3)
191 * chg_ipm(TMAX_INTPRI)
192 * ena_tex() ... (F-3)
193 * 16: chg_ipm(TIPM_ENAALL) ... (G-1)(K)
194 * == TASK1-TEX-4(4回目)==
195 * 17: assert(texptn == 0x0004)
196 * state(false, false, TIPM_ENAALL, false, false, true)
197 * 18: dis_dsp() ... 3つの状æ…
198‹ã‚’それぞれ変化させる
199 * chg_ipm(TMAX_INTPRI)
200 * loc_cpu()
201 * state(false, true, TMAX_INTPRI, true, true, true)
202 * RETURN
203 * == TASK1-TEX-3(3回目続き)==
204 * 19: state(false, false, TIPM_ENAALL, false, false, false)
205 * RETURN
206 * == TASK1(続き)==
207 * 20: state(false, false, TIPM_ENAALL, true, true, false) ... (J-1)
208 * 21: ena_dsp()
209 * rot_rdq(TPRI_SELF)
210 * == TASK2(優å…
211ˆåº¦ï¼š10) ==
212 * 22: state(false, false, TIPM_ENAALL, false, false, true)
213 * 23: ena_tex()
214 * state(false, false, TIPM_ENAALL, false, false, false)
215 * rot_rdq(TPRI_SELF)
216 * == TASK3(優å…
217ˆåº¦ï¼š10) ==
218 * 24: state(false, false, TIPM_ENAALL, false, false, true)
219 * 25: ena_tex() -> E_OBJ ... (C-1)
220 * state(false, false, TIPM_ENAALL, false, false, true)
221 * 26: dis_tex() -> E_OBJ ... (B-1)
222 * state(false, false, TIPM_ENAALL, false, false, true)
223 * ext_tsk()
224 * == TASK1(続き)==
225 * 27: ras_tex(TASK2, 0x0001) ... (E-2)
226 * ref_tex(TASK2, &rtex)
227 * 28: rot_rdq(TPRI_SELF) ... (H-1)
228 * == TASK2-TEX-1(1回目)==
229 * 29: assert(texptn == 0x0001)
230 * state(false, false, TIPM_ENAALL, false, false, true)
231 * RETURN
232 * == TASK2(続き)==
233 * 30: ras_tex(TSK_SELF, 0x0002)
234 * == TASK2-TEX-2(2回目)==
235 * 31: assert(texptn == 0x0002)
236 * state(false, false, TIPM_ENAALL, false, false, true)
237 * 32: dis_dsp()
238 * rot_rdq(TPRI_SELF)
239 * 33: RETURN
240 * == TASK1(続き)==
241 * 34: RETURN
242 * == TASK2(続き)==
243 * 35: END
244 */
245
246#include <kernel.h>
247#include <test_lib.h>
248#include <t_syslog.h>
249#include "kernel_cfg.h"
250#include "test_tex1.h"
251
252/*
253 * task4とtex_task4は生成されない
254 */
255
256void
257task4(intptr_t exinf)
258{
259 check_point(0);
260}
261
262void
263tex_task4(TEXPTN texptn, intptr_t exinf)
264{
265 check_point(0);
266}
267
268/* DO NOT DELETE THIS LINE -- gentest depends on it. */
269
270void
271task1(intptr_t exinf)
272{
273 ER_UINT ercd;
274 T_RTEX rtex;
275
276 test_start(__FILE__);
277
278 check_point(1);
279 check_state(false, false, TIPM_ENAALL, false, false, true);
280
281 ercd = ref_tex(TSK_SELF, &rtex);
282 check_ercd(ercd, E_OK);
283
284 check_assert((rtex.texstat & TTEX_DIS) != 0U);
285
286 check_assert(rtex.pndptn == 0U);
287
288 ercd = ras_tex(TASK3, 0x0001);
289 check_ercd(ercd, E_OBJ);
290
291 ercd = ras_tex(TASK4, 0x0001);
292 check_ercd(ercd, E_OBJ);
293
294 ercd = ref_tex(TASK3, &rtex);
295 check_ercd(ercd, E_OBJ);
296
297 ercd = ref_tex(TASK4, &rtex);
298 check_ercd(ercd, E_OBJ);
299
300 check_point(2);
301 ercd = ena_tex();
302 check_ercd(ercd, E_OK);
303
304 check_state(false, false, TIPM_ENAALL, false, false, false);
305
306 ercd = ref_tex(TSK_SELF, &rtex);
307 check_ercd(ercd, E_OK);
308
309 check_assert((rtex.texstat & TTEX_ENA) != 0U);
310
311 check_assert(rtex.pndptn == 0U);
312
313 check_point(3);
314 ercd = ras_tex(TSK_SELF, 0x0001);
315 check_ercd(ercd, E_OK);
316
317 check_point(6);
318 check_state(false, false, TIPM_ENAALL, false, false, false);
319
320 check_point(7);
321 ercd = dis_dsp();
322 check_ercd(ercd, E_OK);
323
324 ercd = dis_tex();
325 check_ercd(ercd, E_OK);
326
327 check_state(false, false, TIPM_ENAALL, true, true, true);
328
329 check_point(8);
330 ercd = ras_tex(TASK1, 0x0002);
331 check_ercd(ercd, E_OK);
332
333 ercd = ref_tex(TSK_SELF, &rtex);
334 check_ercd(ercd, E_OK);
335
336 check_assert((rtex.texstat & TTEX_DIS) != 0);
337
338 check_assert(rtex.pndptn == 0x0002);
339
340 check_point(9);
341 ercd = ena_tex();
342 check_ercd(ercd, E_OK);
343
344 check_point(20);
345 check_state(false, false, TIPM_ENAALL, true, true, false);
346
347 check_point(21);
348 ercd = ena_dsp();
349 check_ercd(ercd, E_OK);
350
351 ercd = rot_rdq(TPRI_SELF);
352 check_ercd(ercd, E_OK);
353
354 check_point(27);
355 ercd = ras_tex(TASK2, 0x0001);
356 check_ercd(ercd, E_OK);
357
358 ercd = ref_tex(TASK2, &rtex);
359 check_ercd(ercd, E_OK);
360
361 check_point(28);
362 ercd = rot_rdq(TPRI_SELF);
363 check_ercd(ercd, E_OK);
364
365 check_point(34);
366 return;
367
368 check_point(0);
369}
370
371static uint_t tex_task1_count = 0;
372
373void
374tex_task1(TEXPTN texptn, intptr_t exinf)
375{
376 ER_UINT ercd;
377
378 switch (++tex_task1_count) {
379 case 1:
380 check_point(4);
381 check_assert(texptn == 0x0001);
382
383 check_state(false, false, TIPM_ENAALL, false, false, true);
384
385 check_point(5);
386 ercd = dis_dsp();
387 check_ercd(ercd, E_OK);
388
389 ercd = chg_ipm(TMAX_INTPRI);
390 check_ercd(ercd, E_OK);
391
392 ercd = ena_tex();
393 check_ercd(ercd, E_OK);
394
395 ercd = loc_cpu();
396 check_ercd(ercd, E_OK);
397
398 check_state(false, true, TMAX_INTPRI, true, true, false);
399
400 return;
401
402 check_point(0);
403
404 case 2:
405 check_point(10);
406 check_assert(texptn == 0x0002);
407
408 check_state(false, false, TIPM_ENAALL, true, true, true);
409
410 check_point(11);
411 ercd = ras_tex(TASK1, 0x0001);
412 check_ercd(ercd, E_OK);
413
414 ercd = ras_tex(TASK1, 0x0002);
415 check_ercd(ercd, E_OK);
416
417 check_point(12);
418 ercd = ena_dsp();
419 check_ercd(ercd, E_OK);
420
421 ercd = chg_ipm(TMAX_INTPRI);
422 check_ercd(ercd, E_OK);
423
424 ercd = loc_cpu();
425 check_ercd(ercd, E_OK);
426
427 check_state(false, true, TMAX_INTPRI, false, true, true);
428
429 return;
430
431 check_point(0);
432
433 case 3:
434 check_point(13);
435 check_assert(texptn == 0x0003);
436
437 check_state(false, false, TIPM_ENAALL, true, true, true);
438
439 check_point(14);
440 ercd = ena_dsp();
441 check_ercd(ercd, E_OK);
442
443 ercd = chg_ipm(TMAX_INTPRI);
444 check_ercd(ercd, E_OK);
445
446 ercd = ena_tex();
447 check_ercd(ercd, E_OK);
448
449 check_state(false, false, TMAX_INTPRI, false, true, false);
450
451 ercd = chg_ipm(TIPM_ENAALL);
452 check_ercd(ercd, E_OK);
453
454 ercd = chg_ipm(TMAX_INTPRI);
455 check_ercd(ercd, E_OK);
456
457 check_point(15);
458 ercd = ras_tex(TSK_SELF, 0x0004);
459 check_ercd(ercd, E_OK);
460
461 ercd = chg_ipm(TMAX_INTPRI);
462 check_ercd(ercd, E_OK);
463
464 ercd = dis_tex();
465 check_ercd(ercd, E_OK);
466
467 ercd = chg_ipm(TIPM_ENAALL);
468 check_ercd(ercd, E_OK);
469
470 ercd = chg_ipm(TMAX_INTPRI);
471 check_ercd(ercd, E_OK);
472
473 ercd = ena_tex();
474 check_ercd(ercd, E_OK);
475
476 check_point(16);
477 ercd = chg_ipm(TIPM_ENAALL);
478 check_ercd(ercd, E_OK);
479
480 check_point(19);
481 check_state(false, false, TIPM_ENAALL, false, false, false);
482
483 return;
484
485 check_point(0);
486
487 case 4:
488 check_point(17);
489 check_assert(texptn == 0x0004);
490
491 check_state(false, false, TIPM_ENAALL, false, false, true);
492
493 check_point(18);
494 ercd = dis_dsp();
495 check_ercd(ercd, E_OK);
496
497 ercd = chg_ipm(TMAX_INTPRI);
498 check_ercd(ercd, E_OK);
499
500 ercd = loc_cpu();
501 check_ercd(ercd, E_OK);
502
503 check_state(false, true, TMAX_INTPRI, true, true, true);
504
505 return;
506
507 check_point(0);
508
509 default:
510 check_point(0);
511 }
512 check_point(0);
513}
514
515void
516task2(intptr_t exinf)
517{
518 ER_UINT ercd;
519
520 check_point(22);
521 check_state(false, false, TIPM_ENAALL, false, false, true);
522
523 check_point(23);
524 ercd = ena_tex();
525 check_ercd(ercd, E_OK);
526
527 check_state(false, false, TIPM_ENAALL, false, false, false);
528
529 ercd = rot_rdq(TPRI_SELF);
530 check_ercd(ercd, E_OK);
531
532 check_point(30);
533 ercd = ras_tex(TSK_SELF, 0x0002);
534 check_ercd(ercd, E_OK);
535
536 check_finish(35);
537 check_point(0);
538}
539
540static uint_t tex_task2_count = 0;
541
542void
543tex_task2(TEXPTN texptn, intptr_t exinf)
544{
545 ER_UINT ercd;
546
547 switch (++tex_task2_count) {
548 case 1:
549 check_point(29);
550 check_assert(texptn == 0x0001);
551
552 check_state(false, false, TIPM_ENAALL, false, false, true);
553
554 return;
555
556 check_point(0);
557
558 case 2:
559 check_point(31);
560 check_assert(texptn == 0x0002);
561
562 check_state(false, false, TIPM_ENAALL, false, false, true);
563
564 check_point(32);
565 ercd = dis_dsp();
566 check_ercd(ercd, E_OK);
567
568 ercd = rot_rdq(TPRI_SELF);
569 check_ercd(ercd, E_OK);
570
571 check_point(33);
572 return;
573
574 check_point(0);
575
576 default:
577 check_point(0);
578 }
579 check_point(0);
580}
581
582void
583task3(intptr_t exinf)
584{
585 ER_UINT ercd;
586
587 check_point(24);
588 check_state(false, false, TIPM_ENAALL, false, false, true);
589
590 check_point(25);
591 ercd = ena_tex();
592 check_ercd(ercd, E_OBJ);
593
594 check_state(false, false, TIPM_ENAALL, false, false, true);
595
596 check_point(26);
597 ercd = dis_tex();
598 check_ercd(ercd, E_OBJ);
599
600 check_state(false, false, TIPM_ENAALL, false, false, true);
601
602 ercd = ext_tsk();
603 check_ercd(ercd, E_OK);
604
605 check_point(0);
606}
Note: See TracBrowser for help on using the repository browser.