source: asp_wo_cfg/trunk/library/test_lib.c@ 49

Last change on this file since 49 was 49, checked in by ertl-hiro, 12 years ago

asp_wo_kernelをコミット。

  • Property svn:keywords set to Id
File size: 4.3 KB
Line 
1/*
2 * TOPPERS Software
3 * Toyohashi Open Platform for Embedded Real-Time Systems
4 *
5 * Copyright (C) 2005-2011 by Embedded and Real-Time Systems Laboratory
6 * Graduate School of Information Science, Nagoya Univ., JAPAN
7 *
8 * 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
9 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
10 * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
11 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
12 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
13 * スコード中に含まれていること.
14 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
15 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
16 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
17 * の無保証規定を掲載すること.
18 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
19 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
20 * と.
21 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
22 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
23 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
24 * 報告すること.
25 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
26 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
27 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
28 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
29 * 免責すること.
30 *
31 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
32 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
33 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
34 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
35 * の責任を負わない.
36 *
37 * @(#) $Id: test_lib.c 49 2012-09-06 04:41:53Z ertl-hiro $
38 */
39
40/*
41 * テストプログラム用ライブラリ
42 */
43
44#include <kernel.h>
45#include <sil.h>
46#include <t_syslog.h>
47#include <t_stdlib.h>
48#include <log_output.h>
49#include "syssvc/syslog.h"
50#include "target_syssvc.h"
51#include <test_lib.h>
52
53/*
54 * チェックポイント
55 */
56static uint_t check_count = 0u;
57
58/*
59 * 自己診断関数
60 */
61static BIT_FUNC check_bit_func = NULL;
62
63/*
64 * 自己診断関数の設定
65 */
66void
67set_bit_func(BIT_FUNC bit_func)
68{
69 check_bit_func = bit_func;
70}
71
72/*
73 * システムログの出力処理
74 */
75void
76syslog_flush(void)
77{
78 SYSLOG logbuf;
79 ER_UINT rercd;
80
81 /*
82 * ログバッファに記録されたログ情報を,低レベル出力機能を用いて出
83 * 力する.
84 */
85 while ((rercd = syslog_rea_log(&logbuf)) >= 0) {
86 if (rercd > 0) {
87 syslog_lostmsg((uint_t) rercd, target_fput_log);
88 }
89 if (logbuf.logtype >= LOG_TYPE_COMMENT) {
90 syslog_print(&logbuf, target_fput_log);
91 target_fput_log('\n');
92 }
93 }
94}
95
96/*
97 * テストプログラムの終了
98 */
99void
100test_finish(void)
101{
102 SIL_PRE_LOC;
103
104 SIL_LOC_INT();
105 syslog_flush();
106 (void) ext_ker();
107
108 /* ここへ来ることはないはず */
109 SIL_UNL_INT();
110}
111
112/*
113 * チェックポイント
114 */
115void
116check_point(uint_t count)
117{
118 bool_t errorflag = false;
119 ER rercd;
120 SIL_PRE_LOC;
121
122 /*
123 * 割込みロック状態に
124 */
125 SIL_LOC_INT();
126
127 /*
128 * シーケンスチェック
129 */
130 if (++check_count == count) {
131 syslog_1(LOG_NOTICE, "Check point %d passed.", count);
132 }
133 else {
134 syslog_1(LOG_ERROR, "## Unexpected check point %d.", count);
135 errorflag = true;
136 }
137
138 /*
139 * カーネルの内部状態の検査
140 */
141 if (check_bit_func != NULL) {
142 rercd = (*check_bit_func)();
143 if (rercd < 0) {
144 syslog_2(LOG_ERROR, "## Internal inconsistency detected (%s, %d).",
145 itron_strerror(rercd), SERCD(rercd));
146 errorflag = true;
147 }
148 }
149
150 /*
151 * エラーが検出された場合は,テストプログラムを終了する.
152 */
153 if (errorflag) {
154 test_finish();
155 }
156
157 /*
158 * 割込みロック状態を解除
159 */
160 SIL_UNL_INT();
161}
162
163/*
164 * 完了チェックポイント
165 */
166void
167check_finish(uint_t count)
168{
169 check_point(count);
170 syslog_0(LOG_NOTICE, "All check points passed.");
171 test_finish();
172}
173
174/*
175 * 条件チェックのエラー処理
176 */
177void
178_check_assert(const char *expr, const char *file, int_t line)
179{
180 syslog_3(LOG_ERROR, "## Assertion `%s' failed at %s:%u.",
181 expr, file, line);
182 test_finish();
183}
184
185/*
186 * エラーコードチェックのエラー処理
187 */
188void
189_check_ercd(ER ercd, const char *file, int_t line)
190{
191 syslog_3(LOG_ERROR, "## Unexpected error %s detected at %s:%u.",
192 itron_strerror(ercd), file, line);
193 test_finish();
194}
Note: See TracBrowser for help on using the repository browser.