3 * Toyohashi Open Platform for Embedded Real-Time Systems/
4 * Just Standard Profile Kernel
6 * Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
7 * Toyohashi Univ. of Technology, JAPAN
8 * Copyright (C) 2004 by Embedded and Real-Time Systems Laboratory
9 * Graduate School of Information Science, Nagoya Univ., JAPAN
11 * 上記著作権者は,以下の (1)〜(4) の条件か,Free Software Foundation
12 * によって公表されている GNU General Public License の Version 2 に記
13 * 述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
14 * を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下,
16 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
17 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
19 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
20 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
21 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
23 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
24 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
26 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
27 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
28 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
30 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
31 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
33 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
34 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
35 * 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
36 * 接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
38 * @(#) $Id: t_syslog.h,v 1.1 2009/01/31 05:27:37 suikan Exp $
44 * システムログサービスは,システムのログ情報を出力するためのサービス
45 * である.カーネルからのログ情報の出力にも用いるため,内部で待ち状態
48 * ログ情報は,カーネル内のログバッファに書き込むか,低レベルの文字出
49 * 力関数を用いて出力する.どちらを使うかは,拡張サービスコールで切り
52 * ログバッファ領域がオーバフローした場合には,古いログ情報を消して上
55 * アセンブリ言語のソースファイルやシステムコンフィギュレーションファ
56 * イルからこのファイルをインクルードする時は,_MACRO_ONLY を定義して
57 * おくことで,マクロ定義以外の記述を除くことができる.
59 * このインクルードファイルは,kernel.h と sil.h でインクルードされる.
60 * 他のファイルから直接インクルードされることはない.
62 * このファイルをインクルードする前に,t_stddef.h と itron.h をインク
72 * LOG_TYPE_CYC,LOG_TYPE_ASSERT 以外は,デバッギングインタフェース仕
75 #define LOG_TYPE_INH 0x01u /* 割込みハンドラ */
76 #define LOG_TYPE_ISR 0x02u /* 割込みサービスルーチン */
77 #define LOG_TYPE_CYC 0x03u /* 周期ハンドラ */
78 #define LOG_TYPE_EXC 0x04u /* CPU例外ハンドラ */
79 #define LOG_TYPE_TEX 0x05u /* タスク例外処理ルーチン */
80 #define LOG_TYPE_TSKSTAT 0x06u /* タスク状態変化 */
81 #define LOG_TYPE_DSP 0x07u /* ディスパッチャ */
82 #define LOG_TYPE_SVC 0x08u /* サービスコール */
83 #define LOG_TYPE_COMMENT 0x09u /* コメント */
84 #define LOG_TYPE_ASSERT 0x0au /* アサーションの失敗 */
86 #define LOG_ENTER 0x00u /* 入口/開始 */
87 #define LOG_LEAVE 0x80u /* 出口/終了 */
92 #define LOG_EMERG 0u /* シャットダウンに値するエラー */
95 #define LOG_ERROR 3u /* システムエラー */
96 #define LOG_WARNING 4u /* 警告メッセージ */
99 #define LOG_DEBUG 7u /* デバッグ用メッセージ */
107 #define TMAX_LOGINFO 6
110 UINT logtype; /* ログ情報の種別 */
111 SYSTIM logtim; /* ログ時刻 */
112 VP_INT loginfo[TMAX_LOGINFO]; /* その他のログ情報 */
116 * ログ情報の重要度のビットマップを作るためのマクロ
118 #define LOG_MASK(prio) (1u << (prio))
119 #define LOG_UPTO(prio) ((1u << ((prio) + 1)) - 1)
126 extern ER vwri_log(UINT prio, SYSLOG *p_log) throw();
131 extern ER_UINT vrea_log(SYSLOG *p_log) throw();
136 extern ER vmsk_log(UINT logmask, UINT lowmask) throw();
139 * ログ情報を出力するためのライブラリ関数
143 _syslog_0(UINT prio, UINT type)
148 return(vwri_log(prio, &log));
152 _syslog_1(UINT prio, UINT type, VP_INT arg1)
157 log.loginfo[0] = arg1;
158 return(vwri_log(prio, &log));
162 _syslog_2(UINT prio, UINT type, VP_INT arg1, VP_INT arg2)
167 log.loginfo[0] = arg1;
168 log.loginfo[1] = arg2;
169 return(vwri_log(prio, &log));
173 _syslog_3(UINT prio, UINT type, VP_INT arg1, VP_INT arg2, VP_INT arg3)
178 log.loginfo[0] = arg1;
179 log.loginfo[1] = arg2;
180 log.loginfo[2] = arg3;
181 return(vwri_log(prio, &log));
185 _syslog_4(UINT prio, UINT type, VP_INT arg1, VP_INT arg2,
186 VP_INT arg3, VP_INT arg4)
191 log.loginfo[0] = arg1;
192 log.loginfo[1] = arg2;
193 log.loginfo[2] = arg3;
194 log.loginfo[3] = arg4;
195 return(vwri_log(prio, &log));
199 _syslog_5(UINT prio, UINT type, VP_INT arg1, VP_INT arg2,
200 VP_INT arg3, VP_INT arg4, VP_INT arg5)
205 log.loginfo[0] = arg1;
206 log.loginfo[1] = arg2;
207 log.loginfo[2] = arg3;
208 log.loginfo[3] = arg4;
209 log.loginfo[4] = arg5;
210 return(vwri_log(prio, &log));
214 _syslog_6(UINT prio, UINT type, VP_INT arg1, VP_INT arg2, VP_INT arg3,
215 VP_INT arg4, VP_INT arg5, VP_INT arg6)
220 log.loginfo[0] = arg1;
221 log.loginfo[1] = arg2;
222 log.loginfo[2] = arg3;
223 log.loginfo[3] = arg4;
224 log.loginfo[4] = arg5;
225 log.loginfo[5] = arg6;
226 return(vwri_log(prio, &log));
229 #else /* OMIT_SYSLOG */
231 #define vwri_log(prio, p_log) E_OK
232 #define vrea_log(p_log) E_OK
233 #define vmsk_log(logmask, lowmask) E_OK
235 #define _syslog_0(prio, type) E_OK
236 #define _syslog_1(prio, type, arg1) E_OK
237 #define _syslog_2(prio, type, arg1, arg2) E_OK
238 #define _syslog_3(prio, type, arg1, arg2, arg3) E_OK
239 #define _syslog_4(prio, type, arg1, arg2, arg3, arg4) E_OK
240 #define _syslog_5(prio, type, arg1, arg2, arg3, arg4, arg5) E_OK
241 #define _syslog_6(prio, type, arg1, arg2, arg3, arg4, arg5, arg6) E_OK
243 #endif /* OMIT_SYSLOG */
246 * ログ情報(コメント)を出力するためのマクロ
248 * format および後続の引数から作成したメッセージを,重大度 prio で
249 * ログ情報として出力するためのマクロ.arg1〜argn は VP_INT型にキャ
250 * ストするため,VP_INT型に型変換できる任意の型でよい.
253 #define syslog_0(prio, format) \
254 _syslog_1(prio, LOG_TYPE_COMMENT, (VP_INT) format)
256 #define syslog_1(prio, format, arg1) \
257 _syslog_2(prio, LOG_TYPE_COMMENT, (VP_INT) format, \
260 #define syslog_2(prio, format, arg1, arg2) \
261 _syslog_3(prio, LOG_TYPE_COMMENT, (VP_INT) format, \
262 (VP_INT)(arg1), (VP_INT)(arg2))
264 #define syslog_3(prio, format, arg1, arg2, arg3) \
265 _syslog_4(prio, LOG_TYPE_COMMENT, (VP_INT) format, \
266 (VP_INT)(arg1), (VP_INT)(arg2), (VP_INT)(arg3))
268 #define syslog_4(prio, format, arg1, arg2, arg3, arg4) \
269 _syslog_5(prio, LOG_TYPE_COMMENT, (VP_INT) format, \
270 (VP_INT)(arg1), (VP_INT)(arg2), (VP_INT)(arg3), \
273 #define syslog_5(prio, format, arg1, arg2, arg3, arg4, arg5) \
274 _syslog_6(prio, LOG_TYPE_COMMENT, (VP_INT) format, \
275 (VP_INT)(arg1), (VP_INT)(arg2), (VP_INT)(arg3), \
276 (VP_INT)(arg4), (VP_INT)(arg5))
279 * ログ情報(コメント)を出力するためのライブラリ関数(vasyslog.c)
281 extern ER syslog(UINT prio, const char *format, ...) throw();
284 * ログ情報のフォーマット出力(log_output.c)
286 extern void syslog_printf(const char *format, VP_INT *args,
287 void (*putc)(char)) throw();
288 extern void syslog_print(SYSLOG *p_log, void (*putc)(char)) throw();
289 extern void syslog_output(void (*putc)(char)) throw();
291 #endif /* _MACRO_ONLY */
292 #endif /* _T_SYSLOG_H_ */