source: rtos_arduino/trunk/asp_1.9.2/library/test_lib.c@ 136

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

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

File size: 5.3 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 * 上記著作権者
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_lib.c 2673 2015-02-08 10:08:03Z ertl-hiro $
53 */
54
55/*
56 * テストプログラム用ライブラリ
57 */
58
59#include <kernel.h>
60#include <sil.h>
61#include <t_syslog.h>
62#include <t_stdlib.h>
63#include <log_output.h>
64#include "syssvc/syslog.h"
65#include "target_syssvc.h"
66#include <test_lib.h>
67
68/*
69 * チェックポイント
70 */
71static uint_t check_count = 0u;
72
73/*
74 * 自己診断関数
75 */
76static BIT_FUNC check_bit_func = NULL;
77
78/*
79 * 自己診断関数の設定
80 */
81void
82set_bit_func(BIT_FUNC bit_func)
83{
84 check_bit_func = bit_func;
85}
86
87/*
88 * テストプログラムの開始
89 */
90void
91test_start(char *progname)
92{
93 syslog_1(LOG_NOTICE, "Test program: %s", progname);
94}
95
96/*
97 * システムログの出力処理
98 */
99void
100syslog_flush(void)
101{
102 SYSLOG logbuf;
103 ER_UINT rercd;
104
105 /*
106 * ログバッファに記録されたログ情
107報を,低レベル出力機能を用いて出
108 * 力する.
109 */
110 while ((rercd = syslog_rea_log(&logbuf)) >= 0) {
111 if (rercd > 0) {
112 syslog_lostmsg((uint_t) rercd, target_fput_log);
113 }
114 if (logbuf.logtype >= LOG_TYPE_COMMENT) {
115 syslog_print(&logbuf, target_fput_log);
116 target_fput_log('\n');
117 }
118 }
119}
120
121/*
122 * テストプログラムの終了
123 */
124void
125test_finish(void)
126{
127 SIL_PRE_LOC;
128
129 SIL_LOC_INT();
130 syslog_flush();
131 (void) ext_ker();
132
133 /* ここへ来ることはないはず */
134 SIL_UNL_INT();
135}
136
137/*
138 * チェックポイント
139 */
140void
141check_point(uint_t count)
142{
143 bool_t errorflag = false;
144 ER rercd;
145 SIL_PRE_LOC;
146
147 /*
148 * 割込みロック状æ…
149‹ã«
150 */
151 SIL_LOC_INT();
152
153 /*
154 * シーケンスチェック
155 */
156 if (++check_count == count) {
157 syslog_1(LOG_NOTICE, "Check point %d passed.", count);
158 }
159 else {
160 syslog_1(LOG_ERROR, "## Unexpected check point %d.", count);
161 errorflag = true;
162 }
163
164 /*
165 * カーネルの内
166部状æ…
167‹ã®æ¤œæŸ»
168 */
169 if (check_bit_func != NULL) {
170 rercd = (*check_bit_func)();
171 if (rercd < 0) {
172 syslog_2(LOG_ERROR, "## Internal inconsistency detected (%s, %d).",
173 itron_strerror(rercd), SERCD(rercd));
174 errorflag = true;
175 }
176 }
177
178 /*
179 * エラーが検出された場合は,テストプログラムを終了する.
180 */
181 if (errorflag) {
182 test_finish();
183 }
184
185 /*
186 * 割込みロック状æ…
187‹ã‚’解除
188 */
189 SIL_UNL_INT();
190}
191
192/*
193 * 完了チェックポイント
194 */
195void
196check_finish(uint_t count)
197{
198 check_point(count);
199 syslog_0(LOG_NOTICE, "All check points passed.");
200 test_finish();
201}
202
203/*
204 * 条件チェックのエラー処理
205 */
206void
207_check_assert(const char *expr, const char *file, int_t line)
208{
209 syslog_3(LOG_ERROR, "## Assertion `%s' failed at %s:%u.",
210 expr, file, line);
211 test_finish();
212}
213
214/*
215 * エラーコードチェックのエラー処理
216 */
217void
218_check_ercd(ER ercd, const char *file, int_t line)
219{
220 syslog_3(LOG_ERROR, "## Unexpected error %s detected at %s:%u.",
221 itron_strerror(ercd), file, line);
222 test_finish();
223}
Note: See TracBrowser for help on using the repository browser.