source: UsbWattMeter/trunk/asp_dcre/library/test_lib.c

Last change on this file was 167, checked in by coas-nagasima, 8 years ago

MIMEにSJISを設定

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
  • Property svn:mime-type set to text/x-csrc; charset=SHIFT_JIS
File size: 4.4 KB
Line 
1/*
2 * TOPPERS Software
3 * Toyohashi Open Platform for Embedded Real-Time Systems
4 *
5 * Copyright (C) 2005-2013 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 167 2016-03-08 11:37:45Z coas-nagasima $
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
76test_start(char *progname)
77{
78 syslog_1(LOG_NOTICE, "Test program: %s", progname);
79}
80
81/*
82 * システムログの出力処理
83 */
84void
85syslog_flush(void)
86{
87 SYSLOG logbuf;
88 ER_UINT rercd;
89
90 /*
91 * ログバッファに記録されたログ情報を,低レベル出力機能を用いて出
92 * 力する.
93 */
94 while ((rercd = syslog_rea_log(&logbuf)) >= 0) {
95 if (rercd > 0) {
96 syslog_lostmsg((uint_t) rercd, target_fput_log);
97 }
98 if (logbuf.logtype >= LOG_TYPE_COMMENT) {
99 syslog_print(&logbuf, target_fput_log);
100 target_fput_log('\n');
101 }
102 }
103}
104
105/*
106 * テストプログラムの終了
107 */
108void
109test_finish(void)
110{
111 SIL_PRE_LOC;
112
113 SIL_LOC_INT();
114 syslog_flush();
115 (void) ext_ker();
116
117 /* ここへ来ることはないはず */
118 SIL_UNL_INT();
119}
120
121/*
122 * チェックポイント
123 */
124void
125check_point(uint_t count)
126{
127 bool_t errorflag = false;
128 ER rercd;
129 SIL_PRE_LOC;
130
131 /*
132 * 割込みロック状態に
133 */
134 SIL_LOC_INT();
135
136 /*
137 * シーケンスチェック
138 */
139 if (++check_count == count) {
140 syslog_1(LOG_NOTICE, "Check point %d passed.", count);
141 }
142 else {
143 syslog_1(LOG_ERROR, "## Unexpected check point %d.", count);
144 errorflag = true;
145 }
146
147 /*
148 * カーネルの内部状態の検査
149 */
150 if (check_bit_func != NULL) {
151 rercd = (*check_bit_func)();
152 if (rercd < 0) {
153 syslog_2(LOG_ERROR, "## Internal inconsistency detected (%s, %d).",
154 itron_strerror(rercd), SERCD(rercd));
155 errorflag = true;
156 }
157 }
158
159 /*
160 * エラーが検出された場合は,テストプログラムを終了する.
161 */
162 if (errorflag) {
163 test_finish();
164 }
165
166 /*
167 * 割込みロック状態を解除
168 */
169 SIL_UNL_INT();
170}
171
172/*
173 * 完了チェックポイント
174 */
175void
176check_finish(uint_t count)
177{
178 check_point(count);
179 syslog_0(LOG_NOTICE, "All check points passed.");
180 test_finish();
181}
182
183/*
184 * 条件チェックのエラー処理
185 */
186void
187_check_assert(const char *expr, const char *file, int_t line)
188{
189 syslog_3(LOG_ERROR, "## Assertion `%s' failed at %s:%u.",
190 expr, file, line);
191 test_finish();
192}
193
194/*
195 * エラーコードチェックのエラー処理
196 */
197void
198_check_ercd(ER ercd, const char *file, int_t line)
199{
200 syslog_3(LOG_ERROR, "## Unexpected error %s detected at %s:%u.",
201 itron_strerror(ercd), file, line);
202 test_finish();
203}
Note: See TracBrowser for help on using the repository browser.