t_syslog.h

システムログ機能 [詳細]

このグラフは、どのファイルから直接、間接的にインクルードされているかを示しています。

ソースコードを見る。

データ構造

struct  SYSLOG

マクロ定義

#define LOG_TYPE_INH   0x01u
#define LOG_TYPE_ISR   0x02u
#define LOG_TYPE_CYC   0x03u
#define LOG_TYPE_EXC   0x04u
#define LOG_TYPE_TEX   0x05u
#define LOG_TYPE_TSKSTAT   0x06u
#define LOG_TYPE_DSP   0x07u
#define LOG_TYPE_SVC   0x08u
#define LOG_TYPE_COMMENT   0x09u
#define LOG_TYPE_ASSERT   0x0au
#define LOG_ENTER   0x00u
#define LOG_LEAVE   0x80u
#define LOG_EMERG   0u
#define LOG_ALERT   1u
#define LOG_CRIT   2u
#define LOG_ERROR   3u
#define LOG_WARNING   4u
#define LOG_NOTICE   5u
#define LOG_INFO   6u
#define LOG_DEBUG   7u
#define TMAX_LOGINFO   6
#define LOG_MASK(prio)   (1u << (prio))
#define LOG_UPTO(prio)   ((1u << ((prio) + 1)) - 1)
#define syslog_0(prio, format)   _syslog_1(prio, LOG_TYPE_COMMENT, (VP_INT) format)
#define syslog_1(prio, format, arg1)
#define syslog_2(prio, format, arg1, arg2)
#define syslog_3(prio, format, arg1, arg2, arg3)
#define syslog_4(prio, format, arg1, arg2, arg3, arg4)
#define syslog_5(prio, format, arg1, arg2, arg3, arg4, arg5)

関数

ER vwri_log (UINT prio, SYSLOG *p_log) throw ()
ER_UINT vrea_log (SYSLOG *p_log) throw ()
ER vmsk_log (UINT logmask, UINT lowmask) throw ()
Inline ER _syslog_0 (UINT prio, UINT type)
Inline ER _syslog_1 (UINT prio, UINT type, VP_INT arg1)
Inline ER _syslog_2 (UINT prio, UINT type, VP_INT arg1, VP_INT arg2)
Inline ER _syslog_3 (UINT prio, UINT type, VP_INT arg1, VP_INT arg2, VP_INT arg3)
Inline ER _syslog_4 (UINT prio, UINT type, VP_INT arg1, VP_INT arg2, VP_INT arg3, VP_INT arg4)
Inline ER _syslog_5 (UINT prio, UINT type, VP_INT arg1, VP_INT arg2, VP_INT arg3, VP_INT arg4, VP_INT arg5)
Inline ER _syslog_6 (UINT prio, UINT type, VP_INT arg1, VP_INT arg2, VP_INT arg3, VP_INT arg4, VP_INT arg5, VP_INT arg6)
ER syslog (UINT prio, const char *format,...) throw ()
void syslog_printf (const char *format, VP_INT *args, void(*putc)(char)) throw ()
void syslog_print (SYSLOG *p_log, void(*putc)(char)) throw ()
void syslog_output (void(*putc)(char)) throw ()


説明

システムログ機能

システムログサービスは,システムのログ情報を出力するためのサービス である.カーネルからのログ情報の出力にも用いるため,内部で待ち状態 にはいることはない.

ログ情報は,カーネル内のログバッファに書き込むか,低レベルの文字出 力関数を用いて出力する.どちらを使うかは,拡張サービスコールで切り 換えることができる.

ログバッファ領域がオーバフローした場合には,古いログ情報を消して上 書きする.

アセンブリ言語のソースファイルやシステムコンフィギュレーションファ イルからこのファイルをインクルードする時は,_MACRO_ONLY を定義して おくことで,マクロ定義以外の記述を除くことができる.

このインクルードファイルは,kernel.h と sil.h でインクルードされる. 他のファイルから直接インクルードされることはない.

このファイルをインクルードする前に,t_stddef.h と itron.h をインク ルードしておくことが必要である.

t_syslog.h で定義されています。


マクロ定義

#define LOG_ALERT   1u
 

t_syslog.h93 行で定義されています。

#define LOG_CRIT   2u
 

t_syslog.h94 行で定義されています。

#define LOG_DEBUG   7u
 

t_syslog.h99 行で定義されています。

#define LOG_EMERG   0u
 

t_syslog.h92 行で定義されています。

参照元 _t_panic()logtask()main_task()no_reg_exception()no_reg_interrupt().

#define LOG_ENTER   0x00u
 

t_syslog.h86 行で定義されています。

#define LOG_ERROR   3u
 

t_syslog.h95 行で定義されています。

参照元 _t_perror().

#define LOG_INFO   6u
 

t_syslog.h98 行で定義されています。

参照元 main_task()task()tex_routine().

#define LOG_LEAVE   0x80u
 

t_syslog.h87 行で定義されています。

#define LOG_MASK prio   )     (1u << (prio))
 

t_syslog.h118 行で定義されています。

#define LOG_NOTICE   5u
 

t_syslog.h97 行で定義されています。

参照元 cyclic_handler()kernel_start()logtask()main_task()print_banner()task()tex_routine().

#define LOG_TYPE_ASSERT   0x0au
 

t_syslog.h84 行で定義されています。

参照元 syslog_print().

#define LOG_TYPE_COMMENT   0x09u
 

t_syslog.h83 行で定義されています。

参照元 syslog()syslog_output()syslog_print().

#define LOG_TYPE_CYC   0x03u
 

t_syslog.h77 行で定義されています。

#define LOG_TYPE_DSP   0x07u
 

t_syslog.h81 行で定義されています。

#define LOG_TYPE_EXC   0x04u
 

t_syslog.h78 行で定義されています。

#define LOG_TYPE_INH   0x01u
 

t_syslog.h75 行で定義されています。

#define LOG_TYPE_ISR   0x02u
 

t_syslog.h76 行で定義されています。

#define LOG_TYPE_SVC   0x08u
 

t_syslog.h82 行で定義されています。

#define LOG_TYPE_TEX   0x05u
 

t_syslog.h79 行で定義されています。

#define LOG_TYPE_TSKSTAT   0x06u
 

t_syslog.h80 行で定義されています。

#define LOG_UPTO prio   )     ((1u << ((prio) + 1)) - 1)
 

t_syslog.h119 行で定義されています。

参照元 logtask()main_task().

#define LOG_WARNING   4u
 

t_syslog.h96 行で定義されています。

#define syslog_0 prio,
format   )     _syslog_1(prio, LOG_TYPE_COMMENT, (VP_INT) format)
 

t_syslog.h253 行で定義されています。

#define syslog_1 prio,
format,
arg1   ) 
 

値:

_syslog_2(prio, LOG_TYPE_COMMENT, (VP_INT) format, \
                            (VP_INT)(arg1))

t_syslog.h256 行で定義されています。

参照元 logtask().

#define syslog_2 prio,
format,
arg1,
arg2   ) 
 

値:

_syslog_3(prio, LOG_TYPE_COMMENT, (VP_INT) format, \
                    (VP_INT)(arg1), (VP_INT)(arg2))

t_syslog.h260 行で定義されています。

#define syslog_3 prio,
format,
arg1,
arg2,
arg3   ) 
 

値:

_syslog_4(prio, LOG_TYPE_COMMENT, (VP_INT) format, \
            (VP_INT)(arg1), (VP_INT)(arg2), (VP_INT)(arg3))

t_syslog.h264 行で定義されています。

参照元 print_banner().

#define syslog_4 prio,
format,
arg1,
arg2,
arg3,
arg4   ) 
 

値:

_syslog_5(prio, LOG_TYPE_COMMENT, (VP_INT) format, \
            (VP_INT)(arg1), (VP_INT)(arg2), (VP_INT)(arg3), \
                            (VP_INT)(arg4))

t_syslog.h268 行で定義されています。

参照元 t_perror().

#define syslog_5 prio,
format,
arg1,
arg2,
arg3,
arg4,
arg5   ) 
 

値:

_syslog_6(prio, LOG_TYPE_COMMENT, (VP_INT) format, \
            (VP_INT)(arg1), (VP_INT)(arg2), (VP_INT)(arg3), \
                    (VP_INT)(arg4), (VP_INT)(arg5))

t_syslog.h273 行で定義されています。

#define TMAX_LOGINFO   6
 

t_syslog.h107 行で定義されています。

参照元 syslog().


関数

Inline ER _syslog_0 UINT  prio,
UINT  type
 

t_syslog.h143 行で定義されています。

参照先 SYSLOG::logtypevwri_log().

00144 {
00145     SYSLOG  log;
00146 
00147     log.logtype = type;
00148     return(vwri_log(prio, &log));
00149 }

関数の呼び出しグラフ:

Inline ER _syslog_1 UINT  prio,
UINT  type,
VP_INT  arg1
 

t_syslog.h152 行で定義されています。

参照先 SYSLOG::loginfoSYSLOG::logtypevwri_log().

00153 {
00154     SYSLOG  log;
00155 
00156     log.logtype = type;
00157     log.loginfo[0] = arg1;
00158     return(vwri_log(prio, &log));
00159 }

関数の呼び出しグラフ:

Inline ER _syslog_2 UINT  prio,
UINT  type,
VP_INT  arg1,
VP_INT  arg2
 

t_syslog.h162 行で定義されています。

参照先 SYSLOG::loginfoSYSLOG::logtypevwri_log().

00163 {
00164     SYSLOG  log;
00165 
00166     log.logtype = type;
00167     log.loginfo[0] = arg1;
00168     log.loginfo[1] = arg2;
00169     return(vwri_log(prio, &log));
00170 }

関数の呼び出しグラフ:

Inline ER _syslog_3 UINT  prio,
UINT  type,
VP_INT  arg1,
VP_INT  arg2,
VP_INT  arg3
 

t_syslog.h173 行で定義されています。

参照先 SYSLOG::loginfoSYSLOG::logtypevwri_log().

00174 {
00175     SYSLOG  log;
00176 
00177     log.logtype = type;
00178     log.loginfo[0] = arg1;
00179     log.loginfo[1] = arg2;
00180     log.loginfo[2] = arg3;
00181     return(vwri_log(prio, &log));
00182 }

関数の呼び出しグラフ:

Inline ER _syslog_4 UINT  prio,
UINT  type,
VP_INT  arg1,
VP_INT  arg2,
VP_INT  arg3,
VP_INT  arg4
 

t_syslog.h185 行で定義されています。

参照先 SYSLOG::loginfoSYSLOG::logtypevwri_log().

00187 {
00188     SYSLOG  log;
00189 
00190     log.logtype = type;
00191     log.loginfo[0] = arg1;
00192     log.loginfo[1] = arg2;
00193     log.loginfo[2] = arg3;
00194     log.loginfo[3] = arg4;
00195     return(vwri_log(prio, &log));
00196 }

関数の呼び出しグラフ:

Inline ER _syslog_5 UINT  prio,
UINT  type,
VP_INT  arg1,
VP_INT  arg2,
VP_INT  arg3,
VP_INT  arg4,
VP_INT  arg5
 

t_syslog.h199 行で定義されています。

参照先 SYSLOG::loginfoSYSLOG::logtypevwri_log().

00201 {
00202     SYSLOG  log;
00203 
00204     log.logtype = type;
00205     log.loginfo[0] = arg1;
00206     log.loginfo[1] = arg2;
00207     log.loginfo[2] = arg3;
00208     log.loginfo[3] = arg4;
00209     log.loginfo[4] = arg5;
00210     return(vwri_log(prio, &log));
00211 }

関数の呼び出しグラフ:

Inline ER _syslog_6 UINT  prio,
UINT  type,
VP_INT  arg1,
VP_INT  arg2,
VP_INT  arg3,
VP_INT  arg4,
VP_INT  arg5,
VP_INT  arg6
 

t_syslog.h214 行で定義されています。

参照先 SYSLOG::loginfoSYSLOG::logtypevwri_log().

00216 {
00217     SYSLOG  log;
00218 
00219     log.logtype = type;
00220     log.loginfo[0] = arg1;
00221     log.loginfo[1] = arg2;
00222     log.loginfo[2] = arg3;
00223     log.loginfo[3] = arg4;
00224     log.loginfo[4] = arg5;
00225     log.loginfo[5] = arg6;
00226     return(vwri_log(prio, &log));
00227 }

関数の呼び出しグラフ:

ER syslog UINT  prio,
const char *  format,
  ...
throw ()
 

vasyslog.c49 行で定義されています。

参照先 LOG_TYPE_COMMENTSYSLOG::loginfoSYSLOG::logtypeTMAX_LOGINFOvwri_log().

参照元 cyclic_handler()kernel_start()main_task()no_reg_exception()no_reg_interrupt()task()tex_routine().

00050 {
00051     SYSLOG  log;
00052     va_list ap;
00053     int i;
00054     int c;
00055 
00056     log.logtype = LOG_TYPE_COMMENT;
00057     log.loginfo[0] = (VP_INT) format;
00058     i = 1;
00059     va_start(ap, format);
00060 
00061     while ((c = *format++) != '\0' && i < TMAX_LOGINFO) {
00062         if (c != '%') {
00063             continue;
00064         }
00065 
00066         c = *format++;
00067         while ('0' <= c && c <= '9') {
00068             c = *format++;
00069         }
00070         switch (c) {
00071         case 'd':
00072             log.loginfo[i++] = (VP_INT) va_arg(ap, int);
00073             break;
00074         case 'u':
00075         case 'x':
00076         case 'X':
00077             log.loginfo[i++] = (VP_INT) va_arg(ap, unsigned int);
00078             break;
00079         case 'p':
00080             log.loginfo[i++] = (VP_INT) va_arg(ap, void *);
00081             break;
00082         case 'c':
00083             log.loginfo[i++] = (VP_INT) va_arg(ap, int);
00084             break;
00085         case 's':
00086             log.loginfo[i++] = (VP_INT) va_arg(ap, const char *);
00087             break;
00088         case '\0':
00089             format--;
00090             break;
00091         default:
00092             break;
00093         }
00094     }
00095     va_end(ap);
00096     return(vwri_log(prio, &log));
00097 }

関数の呼び出しグラフ:

void syslog_output void(*)(char)  putc  )  throw ()
 

log_output.c182 行で定義されています。

参照先 LOG_TYPE_COMMENTSYSLOG::logtypesyslog_print()syslog_printf()vrea_log().

参照元 logtask().

00183 {
00184     static const char   lostmsg[] = "%d messages are lost.";
00185     SYSLOG  log;
00186     INT lostnum, n;
00187 
00188     lostnum = 0;
00189     while ((n = vrea_log(&log)) >= 0) {
00190         lostnum += n;
00191         if (log.logtype < LOG_TYPE_COMMENT) {
00192             continue;
00193         }
00194         if (lostnum > 0) {
00195             syslog_printf(lostmsg, (VP_INT *) &lostnum, putc);
00196             lostnum = 0;
00197         }
00198         syslog_print(&log, putc);
00199     }
00200     if (lostnum > 0) {
00201         syslog_printf(lostmsg, (VP_INT *) &lostnum, putc);
00202     }
00203 }

関数の呼び出しグラフ:

void syslog_print SYSLOG p_log,
void(*)(char)  putc
throw ()
 

log_output.c167 行で定義されています。

参照先 LOG_TYPE_ASSERTLOG_TYPE_COMMENTSYSLOG::loginfoSYSLOG::logtypesyslog_printf().

参照元 syslog_output().

00168 {
00169     switch (p_log->logtype) {
00170     case LOG_TYPE_COMMENT:
00171         syslog_printf((const char *)(p_log->loginfo[0]),
00172                     &(p_log->loginfo[1]), putc);
00173         break;
00174     case LOG_TYPE_ASSERT:
00175         syslog_printf("%s:%u: Assertion `%s' failed.",
00176                     &(p_log->loginfo[0]), putc);
00177         break;
00178     }
00179 }

関数の呼び出しグラフ:

void syslog_printf const char *  format,
VP_INT args,
void(*)(char)  putc
throw ()
 

log_output.c93 行で定義されています。

参照先 _intptr_convert().

参照元 syslog_output()syslog_print().

00094 {
00095     int     c;
00096     int     width;
00097     int     padzero;
00098     _intptr_    val;
00099     const char  *str;
00100 
00101     while ((c = *format++) != '\0') {
00102         if (c != '%') {
00103             (*putc)((char) c);
00104             continue;
00105         }
00106 
00107         width = padzero = 0;
00108         if ((c = *format++) == '0') {
00109             padzero = 1;
00110             c = *format++;
00111         }
00112         while ('0' <= c && c <= '9') {
00113             width = width * 10 + c - '0';
00114             c = *format++;
00115         }
00116         switch (c) {
00117         case 'd':
00118             val = (_intptr_)(*args++);
00119             if (val >= 0) {
00120                 convert((unsigned _intptr_) val, 10, raddec,
00121                         width, 0, padzero, putc);
00122             }
00123             else {
00124                 convert((unsigned _intptr_)(-val), 10, raddec,
00125                         width, 1, padzero, putc);
00126             }
00127             break;
00128         case 'u':
00129             val = (_intptr_)(*args++);
00130             convert((unsigned _intptr_) val, 10, raddec,
00131                         width, 0, padzero, putc);
00132             break;
00133         case 'x':
00134         case 'p':
00135             val = (_intptr_)(*args++);
00136             convert((unsigned _intptr_) val, 16, radhex,
00137                         width, 0, padzero, putc);
00138             break;
00139         case 'X':
00140             val = (_intptr_)(*args++);
00141             convert((unsigned _intptr_) val, 16, radHEX,
00142                         width, 0, padzero, putc);
00143             break;
00144         case 'c':
00145             (*putc)((char)(_intptr_)(*args++));
00146             break;
00147         case 's':
00148             str = (const char *)(*args++);
00149             while ((c = *str++) != '\0') {
00150                 (*putc)((char) c);
00151             }
00152             break;
00153         case '%':
00154             (*putc)('%');
00155             break;
00156         case '\0':
00157             format--;
00158             break;
00159         default:
00160             break;
00161         }
00162     }
00163     (*putc)('\n');
00164 }

関数の呼び出しグラフ:

ER vmsk_log UINT  logmask,
UINT  lowmask
throw ()
 

参照元 logtask()main_task().

ER_UINT vrea_log SYSLOG p_log  )  throw ()
 

参照元 syslog_output().

ER vwri_log UINT  prio,
SYSLOG p_log
throw ()
 

参照元 _syslog_0()_syslog_1()_syslog_2()_syslog_3()_syslog_4()_syslog_5()_syslog_6()syslog().


Copyright © 2006 by TAKAGI Nobuhisa.
このページは Mon Apr 3 23:49:18 2006 に Doxygen によって生成されました。