|
|
syslog.c説明を見る。00001 /* 00002 * TOPPERS/FDMP Kernel 00003 * Toyohashi Open Platform for Embedded Real-Time Systems/ 00004 * Function Distributed Multiprocessor Kernel 00005 * 00006 * Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory 00007 * Toyohashi Univ. of Technology, JAPAN 00008 * Copyright (C) 2006 by Embedded and Real-Time Systems Laboratory 00009 * Graduate School of Information Science, Nagoya Univ., JAPAN 00010 * 00011 * 上記著作権者は,以下の (1)〜(4) の条件か,Free Software Foundation 00012 * によって公表されている GNU General Public License の Version 2 に記 00013 * 述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア 00014 * を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下, 00015 * 利用と呼ぶ)することを無償で許諾する. 00016 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 00017 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー 00018 * スコード中に含まれていること. 00019 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使 00020 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用 00021 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記 00022 * の無保証規定を掲載すること. 00023 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使 00024 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ 00025 * と. 00026 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著 00027 * 作権表示,この利用条件および下記の無保証規定を掲載すること. 00028 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに 00029 * 報告すること. 00030 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 00031 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること. 00032 * 00033 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 00034 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も 00035 * 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直 00036 * 接的または間接的に生じたいかなる損害に関しても,その責任を負わない. 00037 * 00038 * @(#) $Id: syslog.c,v 1.3 2006/03/14 04:37:54 honda Exp $ 00039 */ 00040 00045 #undef OMIT_SYSLOG 00046 #include "fdmp_kernel.h" 00047 #include "time_event.h" 00048 #include "syslog.h" 00049 00050 /* 00051 * コンテキストに依らないCPUロック/ロック解除 00052 */ 00053 #define lock_cpu() (sense_context() ? i_lock_cpu() : t_lock_cpu()) 00054 #define unlock_cpu() (sense_context() ? i_unlock_cpu() : t_unlock_cpu()) 00055 00056 #ifdef __logini 00057 00058 /* 00059 * ログバッファとそれにアクセスするためのポインタ 00060 */ 00061 SYSLOG syslog_buffer[TCNT_SYSLOG_BUFFER]; /* ログバッファ */ 00062 UINT syslog_count; /* ログバッファ中のログの数 */ 00063 UINT syslog_head; /* 先頭のログの格納位置 */ 00064 UINT syslog_tail; /* 次のログの格納位置 */ 00065 UINT syslog_lost; /* 失われたログの数 */ 00066 00067 /* 00068 * 出力すべきログ情報の重要度(ビットマップ) 00069 */ 00070 UINT syslog_logmask; /* ログバッファに記録すべき重要度 */ 00071 UINT syslog_lowmask; /* 低レベル出力すべき重要度 */ 00072 00077 void 00078 syslog_initialize() 00079 { 00080 syslog_count = 0; 00081 syslog_head = syslog_tail = 0; 00082 syslog_lost = 0; 00083 00084 syslog_logmask = 0; 00085 syslog_lowmask = LOG_UPTO(LOG_NOTICE); 00086 } 00087 00088 #endif /* __logini */ 00089 00095 #ifdef __vwri_log 00096 00097 SYSCALL ER 00098 vwri_log(UINT prio, SYSLOG *p_log) 00099 { 00100 BOOL locked; 00101 00102 locked = sense_lock(); 00103 if (!locked) { 00104 lock_cpu(); 00105 } 00106 00107 /* 00108 * ログ時刻の設定 00109 */ 00110 p_log->logtim = systim_offset + current_time; 00111 00112 /* 00113 * ログバッファに記録 00114 */ 00115 if ((syslog_logmask & LOG_MASK(prio)) != 0) { 00116 syslog_buffer[syslog_tail] = *p_log; 00117 syslog_tail++; 00118 if (syslog_tail >= TCNT_SYSLOG_BUFFER) { 00119 syslog_tail = 0; 00120 } 00121 if (syslog_count < TCNT_SYSLOG_BUFFER) { 00122 syslog_count++; 00123 } 00124 else { 00125 syslog_head = syslog_tail; 00126 syslog_lost++; 00127 } 00128 } 00129 00130 /* 00131 * 低レベル出力 00132 */ 00133 if ((syslog_lowmask & LOG_MASK(prio)) != 0) { 00134 syslog_print(p_log, sys_putc); 00135 } 00136 00137 if (!locked) { 00138 unlock_cpu(); 00139 } 00140 return(E_OK); 00141 } 00142 00143 #endif /* __vwri_log */ 00144 00150 #ifdef __vrea_log 00151 00152 SYSCALL ER_UINT 00153 vrea_log(SYSLOG *p_log) 00154 { 00155 BOOL locked; 00156 ER_UINT ercd; 00157 00158 locked = sense_lock(); 00159 if (!locked) { 00160 lock_cpu(); 00161 } 00162 if (syslog_count > 0) { 00163 *p_log = syslog_buffer[syslog_head]; 00164 syslog_count--; 00165 syslog_head++; 00166 if (syslog_head >= TCNT_SYSLOG_BUFFER) { 00167 syslog_head = 0; 00168 } 00169 ercd = (ER_UINT) syslog_lost; 00170 syslog_lost = 0; 00171 } 00172 else { 00173 ercd = E_OBJ; 00174 } 00175 if (!locked) { 00176 unlock_cpu(); 00177 } 00178 return(ercd); 00179 } 00180 00181 #endif /* __vrea_log */ 00182 00186 #ifdef __vmsk_log 00187 00188 SYSCALL ER 00189 vmsk_log(UINT logmask, UINT lowmask) 00190 { 00191 syslog_logmask = logmask; 00192 syslog_lowmask = lowmask; 00193 return(E_OK); 00194 } 00195 00196 #endif /* __vmsk_log */ 00197 00204 #ifdef __logter 00205 00206 void 00207 syslog_terminate() 00208 { 00209 syslog_printf("-- buffered messages --", NULL, sys_putc); 00210 syslog_output(sys_putc); 00211 } 00212 00213 #endif /* __logter */ Copyright © 2006 by TAKAGI Nobuhisa. このページは Mon Apr 3 23:49:13 2006 に Doxygen によって生成されました。 |