⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 syslog.c

📁 嵌入式系统开发 TOPPERS and JSP Kernel Release 1.3 TOPPERS = Toyohashi Open Platform for Embedded Real-Tim
💻 C
字号:
/* *  TOPPERS/JSP Kernel *      Toyohashi Open Platform for Embedded Real-Time Systems/ *      Just Standard Profile Kernel *  *  Copyright (C) 2000,2001 by Embedded and Real-Time Systems Laboratory *                              Toyohashi Univ. of Technology, JAPAN *  *  惧淡螟侯涪荚は·Free Software Foundation によって给山されている  *  GNU General Public License の Version 2 に淡揭されている掘凤か·笆 *  布の(1)×(4)の掘凤を塔たす眷圭に嘎り·塑ソフトウェア∈塑ソフトウェ *  アを猖恃したものを崔むˉ笆布票じ∷を蝗脱ˇ剩澜ˇ猖恃ˇ浩芹邵∈笆布· *  网脱と钙ぶ∷することを痰浸で钓满するˉ *  (1) 塑ソフトウェアをソ〖スコ〖ドの妨で网脱する眷圭には·惧淡の螟侯 *      涪山绩·この网脱掘凤および布淡の痰瘦沮惮年が·そのままの妨でソ〖 *      スコ〖ド面に崔まれていることˉ *  (2) 塑ソフトウェアを浩网脱材墙なバイナリコ〖ド∈リロケ〖タブルオブ *      ジェクトファイルやライブラリなど∷の妨で网脱する眷圭には·网脱 *      に燃うドキュメント∈网脱荚マニュアルなど∷に·惧淡の螟侯涪山绩· *      この网脱掘凤および布淡の痰瘦沮惮年を非很することˉ *  (3) 塑ソフトウェアを浩网脱稍材墙なバイナリコ〖ドの妨または怠达に寥 *      み哈んだ妨で网脱する眷圭には·肌のいずれかの掘凤を塔たすことˉ *    (a) 网脱に燃うドキュメント∈网脱荚マニュアルなど∷に·惧淡の螟侯 *        涪山绩·この网脱掘凤および布淡の痰瘦沮惮年を非很することˉ *    (b) 网脱の妨轮を·侍に年める数恕によって·惧淡螟侯涪荚に鼠桂する *        ことˉ *  (4) 塑ソフトウェアの网脱により木儡弄または粗儡弄に栏じるいかなる禄 *      巢からも·惧淡螟侯涪荚を倘勒することˉ *  *  塑ソフトウェアは·痰瘦沮で捏丁されているものであるˉ惧淡螟侯涪荚は· *  塑ソフトウェアに簇して·その努脱材墙拉も崔めて·いかなる瘦沮も乖わ *  ないˉまた·塑ソフトウェアの网脱により木儡弄または粗儡弄に栏じたい *  かなる禄巢に簇しても·その勒扦を砷わないˉ *  *  @(#) $Id: syslog.c,v 1.5 2002/03/26 08:19:38 hiro Exp $ *//* *  システムログ怠墙 */#include "jsp_kernel.h"#include "time_event.h"/* *  ログバッファとそれにアクセスするためのポインタ */#define TCNT_SYSLOG_BUFFER	32static SYSLOG	syslog_buffer[TCNT_SYSLOG_BUFFER];static UINT	syslog_count;static UINT	syslog_head;static UINT	syslog_tail;static UINT	syslog_lost;/* *  叫蜗すべきログ攫鼠の脚妥刨∈ビットマップ∷ */static UINT	syslog_logmask;		/* 淡峡】叫蜗すべき脚妥刨 */static UINT	syslog_lowmask;		/* 你レベル叫蜗すべき脚妥刨 *//* *  コンテキストに巴らないCPUロック】ロック豺近 */#define	lock_cpu()	(sense_context() ? i_lock_cpu() : t_lock_cpu())#define	unlock_cpu()	(sense_context() ? i_unlock_cpu() : t_unlock_cpu())/* *  システムログ怠墙の介袋步 */voidsyslog_initialize(){	syslog_count = 0;	syslog_head = syslog_tail = 0;	syslog_lost = 0;	syslog_logmask = LOG_UPTO(LOG_NOTICE);	syslog_lowmask = LOG_UPTO(LOG_NOTICE);}     /*  *  ログ攫鼠の叫蜗 */ERsyslog_write(UINT prio, SYSLOG *p_syslog){	BOOL	locked;	p_syslog->logtim = systim_offset + current_time;	if ((syslog_logmask & LOG_MASK(prio)) != 0) {		/*		 *  CPUロック觉轮や悸乖コンテキストによらず瓢侯できる		 *  ようにするˉ		 */		locked = sense_lock();		if (!locked) {			lock_cpu();		}		if ((syslog_lowmask & LOG_MASK(prio)) != 0) {			/*			 *  你レベル叫蜗への今叫し			 */			syslog_printf(p_syslog, sys_putc);			sys_putc('\n');		}		else {			/*			 *  ログバッファへの今哈み			 */			syslog_buffer[syslog_tail] = *p_syslog;			syslog_tail++;			if (syslog_tail >= TCNT_SYSLOG_BUFFER) {				syslog_tail = 0;			}			if (syslog_count < TCNT_SYSLOG_BUFFER) {				syslog_count++;			}			else {				syslog_head = syslog_tail;				syslog_lost++;			}		}		if (!locked) {			unlock_cpu();		}	}	return(E_OK);}/* *  ログバッファからの粕叫し */ER_UINTsyslog_read(SYSLOG *p_syslog){	BOOL	locked;	INT	n;	/*	 *  CPUロック觉轮や悸乖コンテキストによらず瓢侯できるようにす	 *  るˉ	 */	locked = sense_lock();	if (!locked) {		lock_cpu();	}	if (syslog_count > 0) {		*p_syslog = syslog_buffer[syslog_head];		syslog_count--;		syslog_head++;		if (syslog_head >= TCNT_SYSLOG_BUFFER) {			syslog_head = 0;		}		n = syslog_lost;		syslog_lost = 0;	}	else {		n = E_OBJ;	}	if (!locked) {		unlock_cpu();	}	return(n);}/*  *  叫蜗すべきログ攫鼠の脚妥刨の肋年 */ERsyslog_setmask(UINT logmask, UINT lowmask){	syslog_logmask = logmask;	syslog_lowmask = lowmask;	return(E_OK);}/*  *  システムログ怠墙の姜位借妄 * *  ログバッファに淡峡されたログ攫鼠を·你レベル叫蜗怠墙を脱いて叫蜗す *  るˉ */voidsyslog_terminate(){	SYSLOG	syslog, lostlog;	char	*bufmsg = "-- buffered messages --";	char	*lostmsg = "%d messages are lost.";	INT	n;	lostlog.loginfo[0] = (VP_INT) bufmsg;	syslog_printf(&lostlog, sys_putc);	sys_putc('\n');	while ((n = syslog_read(&syslog)) >= 0) {		if (n > 0) {			lostlog.loginfo[0] = (VP_INT) lostmsg;			lostlog.loginfo[1] = (VP_INT) n;			syslog_printf(&lostlog, sys_putc);			sys_putc('\n');		}		syslog_printf(&syslog, sys_putc);		sys_putc('\n');	}	sys_putc('\n');}/* *  眶猛を矢机误に恃垂 */static voidconvert(unsigned int val, int radix, const char *radchar, int width,		int minus, int padzero, void (*putc)(char)){	char	buf[12];	int	i, j;	i = 0;	do {		buf[i++] = radchar[val % radix];		val /= radix;	} while (val != 0);	width -= minus;	if (minus > 0 && padzero > 0) {		(*putc)('-');	}	for (j = i; j < width; j++) {		(*putc)((char)(padzero > 0 ? '0' : ' '));	}	if (minus > 0 && padzero <= 0) {		(*putc)('-');	}	while (i > 0) {		(*putc)(buf[--i]);	}}/* *  ログ攫鼠フォ〖マット脱ライブラリ簇眶 */static char const raddec[] = "0123456789";static char const radhex[] = "0123456789abcdef";static char const radHEX[] = "0123456789ABCDEF";voidsyslog_printf(SYSLOG *p_syslog, void (*putc)(char)){	char	*format;	int	argno;	int	c;	int	width;	int	padzero;	int	val;	char	*str;	format = (char *)(p_syslog->loginfo[0]);	argno = 1;	while ((c = *format++) != '\0') {		if (c != '%') {			(*putc)((char) c);			continue;		}		width = padzero = 0;		if ((c = *format++) == '0') {			padzero = 1;			c = *format++;		}		while ('0' <= c && c <= '9') {			width = width*10 + c - '0';			c = *format++;		}		switch (c) {		case 'd':			val = (int)(p_syslog->loginfo[argno++]);			if (val >= 0) {				convert(val, 10, raddec, width,						0, padzero, putc);			}			else {				convert(-val, 10, raddec, width,						1, padzero, putc);			}			break;		case 'u':			val = (int)(p_syslog->loginfo[argno++]);			convert(val, 10, raddec, width, 0, padzero, putc);			break;		case 'x':			val = (int)(p_syslog->loginfo[argno++]);			convert(val, 16, radhex, width, 0, padzero, putc);			break;		case 'X':			val = (int)(p_syslog->loginfo[argno++]);			convert(val, 16, radHEX, width, 0, padzero, putc);			break;		case 'c':			(*putc)((char)(int)(p_syslog->loginfo[argno++]));			break;		case 's':			str = (char *)(p_syslog->loginfo[argno++]);			while ((c = *str++) != '\0') {				(*putc)((char) c);			}			break;		case '%':			(*putc)('%');			break;		case '\0':			format--;			break;		default:			break;		}	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -