source: asp3_wo_tecs/trunk/test/test_tmevt1.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: 10.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_tmevt1.c 310 2015-02-08 13:46:46Z ertl-hiro $
53 */
54
55/*
56 * タイムイベント管理モジュールのテスト(1)
57 *
58 * 【テストの目的】
59 *
60 * ・システム時刻が単調増加すること
61 * ・アラームハンドラの実行開始までの時間が単調減少すること
62 * ・adj_timによりシステム時刻を進めた場合の動作の確認
63 * ・adj_timによりシステム時刻を遅
64らせた場合の動作の確認
65 *
66 * 【テスト項
67目】
68 *
69 *
70 *
71 * 【使用リソース】
72 *
73 * TASK1: 中優å…
74ˆåº¦ã‚¿ã‚¹ã‚¯ï¼Œãƒ¡ã‚¤ãƒ³ã‚¿ã‚¹ã‚¯ï¼Œæœ€åˆã‹ã‚‰èµ·å‹•
75 * ALM1: アラームハンドラ
76 * ALM2: アラームハンドラ
77 * ALM3: アラームハンドラ
78 *
79 * 【テストシーケンス】
80 *
81 * == TASK1(優å…
82ˆåº¦ï¼šä¸­ï¼‰==
83 * 1: sta_alm(ALM1, ALM1_RELTIM)
84 * DO(prev_lefttim = UINT32_MAX)
85 * DO(wait_alarm1(&alarm1_flag1))
86 * == ALM1-1(1回目)==
87 * 2: DO(alarm1_flag1 = true)
88 * RETURN
89 * == TASK1(続き)==
90 * 3: sta_alm(ALM1, ALM1_RELTIM)
91 * DO(prev_lefttim = UINT32_MAX)
92 * DO(wait_alarm1(&alarm1_flag2))
93 * == ALM1-2(2回目)==
94 * 4: DO(alarm1_flag2 = true)
95 * 5: sta_alm(ALM1, ALM1_RELTIM)
96 * DO(prev_lefttim = UINT32_MAX)
97 * DO(skip_check = true)
98 * RETURN
99 * == TASK1(続き)==
100 * 6: DO(wait_alarm1(&alarm1_flag3))
101 * == ALM1-3(3回目)==
102 * 7: DO(alarm1_flag3 = true)
103 * RETURN
104 * == TASK1(続き)==
105 * 8: sta_alm(ALM1, ALM1_RELTIM * 4)
106 * DO(prev_lefttim = UINT32_MAX)
107 * DO(refer_alarm1())
108 * 9: dly_tsk(ALM1_RELTIM)
109 * DO(prev_lefttim -= ALM1_RELTIM)
110 * DO(refer_alarm1())
111 * 10: adj_tim(ALM1_RELTIM)
112 * DO(wait_alarm1(&alarm1_flag4))
113 * == ALM1-4(4回目)==
114 * 11: DO(alarm1_flag4 = true)
115 * RETURN
116 * == TASK1(続き)==
117 * 12: sta_alm(ALM1, ALM1_RELTIM * 4)
118 * DO(prev_lefttim = UINT32_MAX)
119 * DO(refer_alarm1())
120 * 13: dly_tsk(ALM1_RELTIM)
121 * DO(prev_lefttim -= ALM1_RELTIM)
122 * DO(refer_alarm1())
123 * 14: adj_tim(-ALM1_RELTIM)
124 * DO(prev_lefttim += ALM1_RELTIM)
125 * 15: DO(wait_alarm1(&alarm1_flag5))
126 * == ALM1-5(5回目)==
127 * 16: DO(alarm1_flag5 = true)
128 * RETURN
129 * == TASK1(続き)==
130 * 17: sta_alm(ALM1, ALM1_RELTIM * 6)
131 * sta_alm(ALM2, ALM1_RELTIM * 4)
132 * DO(prev_lefttim = UINT32_MAX)
133 * DO(refer_alarm1())
134 * 18: dly_tsk(ALM1_RELTIM)
135 * DO(prev_lefttim -= ALM1_RELTIM)
136 * DO(refer_alarm1())
137 * 19: stp_alm(ALM2)
138 * ref_alm(ALM2, &ralm)
139 * assert((ralm.almstat & TALM_STP) != 0U)
140 * DO(refer_alarm1())
141 * 20: DO(wait_alarm1(&alarm1_flag6))
142 * == ALM1-6(6回目)==
143 * 21: DO(alarm1_flag6 = true)
144 * RETURN
145 * == TASK1(続き)==
146 * 22: sta_alm(ALM1, ALM1_RELTIM * 6)
147 * sta_alm(ALM2, ALM1_RELTIM * 4)
148 * sta_alm(ALM3, ALM1_RELTIM)
149 * DO(prev_lefttim = UINT32_MAX)
150 * 23: DO(wait_alarm1(&alarm1_flag7))
151 * == ALM3-1(1回目)==
152 * 24: stp_alm(ALM2)
153 * RETURN
154 * == ALM1-7(7回目)==
155 * 25: DO(alarm1_flag7 = true)
156 * RETURN
157 * == TASK1(続き)==
158 * 26: ref_alm(ALM2, &ralm)
159 * assert((ralm.almstat & TALM_STP) != 0U)
160 * 27: END
161 */
162
163#include <kernel.h>
164#include <t_syslog.h>
165#include "syssvc/test_svc.h"
166#include "kernel_cfg.h"
167#include "test_tmevt1.h"
168
169volatile bool_t alarm1_flag1 = false;
170volatile bool_t alarm1_flag2 = false;
171volatile bool_t alarm1_flag3 = false;
172volatile bool_t alarm1_flag4 = false;
173volatile bool_t alarm1_flag5 = false;
174volatile bool_t alarm1_flag6 = false;
175volatile bool_t alarm1_flag7 = false;
176
177RELTIM prev_lefttim; /* lefttimの増加チェック用の変数 */
178bool_t skip_check = false; /* 増加チェックを1回スキップする */
179
180SYSTIM prev_systim; /* systimの増加チェック用の変数 */
181
182void
183refer_alarm1(void)
184{
185 T_RALM ralm;
186 bool_t skip_check_bak;
187 ER ercd;
188
189 skip_check_bak = skip_check;
190 skip_check = false;
191
192 ercd = ref_alm(ALM1, &ralm);
193 check_ercd(ercd, E_OK);
194
195 if ((ralm.almstat & TALM_STA) != 0U) {
196// syslog(LOG_NOTICE, "lefttim = %tu", ralm.lefttim);
197 if (ralm.lefttim > prev_lefttim && !skip_check_bak) {
198 syslog(LOG_ERROR, "lefttim increases (%tu -> %tu)",
199 prev_lefttim, ralm.lefttim);
200 }
201 prev_lefttim = ralm.lefttim;
202 }
203 else {
204// syslog(LOG_NOTICE, "ALM1 is stopped.");
205 prev_lefttim = 0U;
206 }
207}
208
209void
210refer_systim(void)
211{
212 SYSTIM systim;
213 ER ercd;
214
215 ercd = get_tim(&systim);
216 check_ercd(ercd, E_OK);
217
218// syslog(LOG_NOTICE, "systim = %Tu", systim);
219 if (systim < prev_systim) {
220 syslog(LOG_ERROR, "systim decreases (%tu -> %tu)",
221 (uint_t) prev_systim, (uint_t) systim);
222 }
223 prev_systim = systim;
224}
225
226void
227wait_alarm1(volatile bool_t *p_flag)
228{
229 do {
230 refer_systim();
231 refer_alarm1();
232 } while (!(*p_flag));
233}
234
235void
236alarm2_handler(intptr_t exinf)
237{
238}
239
240/* DO NOT DELETE THIS LINE -- gentest depends on it. */
241
242static uint_t alarm1_count = 0;
243
244void
245alarm1_handler(intptr_t exinf)
246{
247 ER_UINT ercd;
248
249 switch (++alarm1_count) {
250 case 1:
251 check_point(2);
252 alarm1_flag1 = true;
253
254 return;
255
256 check_point(0);
257
258 case 2:
259 check_point(4);
260 alarm1_flag2 = true;
261
262 check_point(5);
263 ercd = sta_alm(ALM1, ALM1_RELTIM);
264 check_ercd(ercd, E_OK);
265
266 prev_lefttim = UINT32_MAX;
267
268 skip_check = true;
269
270 return;
271
272 check_point(0);
273
274 case 3:
275 check_point(7);
276 alarm1_flag3 = true;
277
278 return;
279
280 check_point(0);
281
282 case 4:
283 check_point(11);
284 alarm1_flag4 = true;
285
286 return;
287
288 check_point(0);
289
290 case 5:
291 check_point(16);
292 alarm1_flag5 = true;
293
294 return;
295
296 check_point(0);
297
298 case 6:
299 check_point(21);
300 alarm1_flag6 = true;
301
302 return;
303
304 check_point(0);
305
306 case 7:
307 check_point(25);
308 alarm1_flag7 = true;
309
310 return;
311
312 check_point(0);
313
314 default:
315 check_point(0);
316 }
317 check_point(0);
318}
319
320static uint_t alarm3_count = 0;
321
322void
323alarm3_handler(intptr_t exinf)
324{
325 ER_UINT ercd;
326
327 switch (++alarm3_count) {
328 case 1:
329 check_point(24);
330 ercd = stp_alm(ALM2);
331 check_ercd(ercd, E_OK);
332
333 return;
334
335 check_point(0);
336
337 default:
338 check_point(0);
339 }
340 check_point(0);
341}
342
343void
344task1(intptr_t exinf)
345{
346 ER_UINT ercd;
347 T_RALM ralm;
348
349 test_start(__FILE__);
350
351 check_point(1);
352 ercd = sta_alm(ALM1, ALM1_RELTIM);
353 check_ercd(ercd, E_OK);
354
355 prev_lefttim = UINT32_MAX;
356
357 wait_alarm1(&alarm1_flag1);
358
359 check_point(3);
360 ercd = sta_alm(ALM1, ALM1_RELTIM);
361 check_ercd(ercd, E_OK);
362
363 prev_lefttim = UINT32_MAX;
364
365 wait_alarm1(&alarm1_flag2);
366
367 check_point(6);
368 wait_alarm1(&alarm1_flag3);
369
370 check_point(8);
371 ercd = sta_alm(ALM1, ALM1_RELTIM * 4);
372 check_ercd(ercd, E_OK);
373
374 prev_lefttim = UINT32_MAX;
375
376 refer_alarm1();
377
378 check_point(9);
379 ercd = dly_tsk(ALM1_RELTIM);
380 check_ercd(ercd, E_OK);
381
382 prev_lefttim -= ALM1_RELTIM;
383
384 refer_alarm1();
385
386 check_point(10);
387 ercd = adj_tim(ALM1_RELTIM);
388 check_ercd(ercd, E_OK);
389
390 wait_alarm1(&alarm1_flag4);
391
392 check_point(12);
393 ercd = sta_alm(ALM1, ALM1_RELTIM * 4);
394 check_ercd(ercd, E_OK);
395
396 prev_lefttim = UINT32_MAX;
397
398 refer_alarm1();
399
400 check_point(13);
401 ercd = dly_tsk(ALM1_RELTIM);
402 check_ercd(ercd, E_OK);
403
404 prev_lefttim -= ALM1_RELTIM;
405
406 refer_alarm1();
407
408 check_point(14);
409 ercd = adj_tim(-ALM1_RELTIM);
410 check_ercd(ercd, E_OK);
411
412 prev_lefttim += ALM1_RELTIM;
413
414 check_point(15);
415 wait_alarm1(&alarm1_flag5);
416
417 check_point(17);
418 ercd = sta_alm(ALM1, ALM1_RELTIM * 6);
419 check_ercd(ercd, E_OK);
420
421 ercd = sta_alm(ALM2, ALM1_RELTIM * 4);
422 check_ercd(ercd, E_OK);
423
424 prev_lefttim = UINT32_MAX;
425
426 refer_alarm1();
427
428 check_point(18);
429 ercd = dly_tsk(ALM1_RELTIM);
430 check_ercd(ercd, E_OK);
431
432 prev_lefttim -= ALM1_RELTIM;
433
434 refer_alarm1();
435
436 check_point(19);
437 ercd = stp_alm(ALM2);
438 check_ercd(ercd, E_OK);
439
440 ercd = ref_alm(ALM2, &ralm);
441 check_ercd(ercd, E_OK);
442
443 check_assert((ralm.almstat & TALM_STP) != 0U);
444
445 refer_alarm1();
446
447 check_point(20);
448 wait_alarm1(&alarm1_flag6);
449
450 check_point(22);
451 ercd = sta_alm(ALM1, ALM1_RELTIM * 6);
452 check_ercd(ercd, E_OK);
453
454 ercd = sta_alm(ALM2, ALM1_RELTIM * 4);
455 check_ercd(ercd, E_OK);
456
457 ercd = sta_alm(ALM3, ALM1_RELTIM);
458 check_ercd(ercd, E_OK);
459
460 prev_lefttim = UINT32_MAX;
461
462 check_point(23);
463 wait_alarm1(&alarm1_flag7);
464
465 check_point(26);
466 ercd = ref_alm(ALM2, &ralm);
467 check_ercd(ercd, E_OK);
468
469 check_assert((ralm.almstat & TALM_STP) != 0U);
470
471 check_finish(27);
472 check_point(0);
473}
Note: See TracBrowser for help on using the repository browser.