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

📄 tkref.c

📁 T-kernel 的extension源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
/* *---------------------------------------------------------------------- *    T-Kernel / Standard Extension * *    Copyright (C) 2006 by Ken Sakamura. All rights reserved. *    T-Kernel / Standard Extension is distributed  *      under the T-License for T-Kernel / Standard Extension. *---------------------------------------------------------------------- * *    Version:   1.00.00 *    Released by T-Engine Forum(http://www.t-engine.org) at 2006/8/11. * *---------------------------------------------------------------------- *//* *	tkref.c (proc) * *	Indicate state of T-Kernel object */#if DEBUGFUNC_SUPPORT#include <stdio.h>#define DSP			printf#define DSP_LF			putchar('\n')#define DSP_CH(c)		putchar(c)#define TSD_DUT_DIV_10		10#define TSD_DUM_RTN_M1		(-1)#define TSD_DUT_SFT_16		16U#define TSD_DPL_SZ_20		20#define TSD_DUM_MSK_0X80	0x80U#define TSD_DEX_VAL_4		4#define TSD_DUT_MSK_0XFF	0xffUEXPORT W DumpPageLen = TSD_DPL_SZ_20;	/* Length of pages to be dumped *//* * Stop page-by-page display *	n = Number of lines displayed *	n = Reset to 0 *	Return value 0: Continue; -1: Terminate */EXPORT W DumpMore( W n ){static	W	CurPageLen = 0;	W	c;	if ( n == 0 ) {		CurPageLen = DumpPageLen;		return 0;	}	if (( CurPageLen <= 0 )||( (CurPageLen -= n) > 0 )) {		return 0;	}	/* Stop display */	CurPageLen = DumpPageLen;	DSP("..more(y/n)?");	c = getchar();	if (( c > 0 )&&( ((UW)c & TSD_DUM_MSK_0X80) != 0 )) {		c = getchar(); /* Double-byte character */	}	DSP("\b\b\b\b\b\b\b\b\b\b\b\b\b\b"	    "              "	    "\b\b\b\b\b\b\b\b\b\b\b\b\b\b");	return ( c == 'Y' || c == 'y' )?  0: TSD_DUM_RTN_M1;}/* * Display of exinf *	Display format  12345678 NAME */LOCAL void dsp_exinf( VP exinf ){	UB	*p = (UB*)&exinf;	W	i;	if ( exinf == NULL ) {		return;	}	DSP("%08x", exinf);	for ( i = 0; i < TSD_DEX_VAL_4; ++i ) {		if ( !((p[i] == 0 )|| isprint(p[i]))) {			return;		}	}	DSP(" %.4s", p);}/* ------------------------------------------------------------------------ *//* *	Task *//*TSK STATE (MAX:123)TID PRI:BPR SLT WUP SUS STS(*:NODISWAI)  ST+UT(x10) RID EXINF/NAME123 123:123 123 123 123 XXX-YYYY *[123] 12345+12345 123 12345678 ABCD                        XXX-EV:12*                      [123] PROCESS*/LOCAL void dump_tsk( ID id, T_RTSK *ref, T_ITSK *inf, ID rid, PINFO *pinfo ){	B	*p;	/*   TID PRI:BPR SLT WUP SUS */	DSP("%3d %3d:%3d %3d %3d %3d ",		id, ref->tskpri, ref->tskbpri, ref->slicetime,		ref->wupcnt, ref->suscnt);	/* STS */	switch ( ref->tskstat & ~TTS_NODISWAI ) {	  case TTS_RUN:		p = "RUN";		break;	  case TTS_RDY:		p = "RDY";		break;	  case TTS_WAI:		p = "WAI";		break;	  case TTS_SUS:		p = "SUS";		break;	  case TTS_WAS:		p = "WAS";		break;	  case TTS_DMT:		p = "DMT";		break;	  default:		p = "???";		break;	}	DSP(p);	if ( (ref->tskstat & TTS_WAI) != 0 ) {		UINT	tev = 0;		switch ( ref->tskwait ) {		  case TTW_SLP:			p = "SLP";			break;		  case TTW_DLY:			p = "DLY";			break;		  case TTW_SEM:			p = "SEM";			break;		  case TTW_FLG:			p = "FLG";			break;		  case TTW_SDTQ:		  	p = "SDTQ";			break;		  case TTW_RDTQ:			p = "RDTQ";			break;		  case TTW_MBX:			p = "MBX";			break;		  case TTW_MTX:			p = "MTX";			break;		  case TTW_SMBF:			p = "SMBF";			break;		  case TTW_RMBF:			p = "RMBF";			break;		  case TTW_CAL:			p = "CAL";			break;		  case TTW_ACP:			p = "ACP";			break;		  case TTW_RDV:			p = "RDV";			break;		  case TTW_MPF:			p = "MPF";			break;		  case TTW_MPL:			p = "MPL";			break;		  default:			tev = (ref->tskwait >> TSD_DUT_SFT_16) & TSD_DUT_MSK_0XFF;			p = ( tev != 0 )? "EV": "???";			break;		}		if ( tev == 0 ) {			DSP("-%-5s", p);		} else {			DSP("-%2s:%02x", p, tev);		}		DSP("%c", ( (ref->tskstat & TTS_NODISWAI) != 0 )? '*': ' ');		if ( ref->wid > 0 ) {			DSP("[%3d]", ref->wid);		} else {			DSP("     ");		}	} else {		DSP("            ");	}	/* ST+UT RID */	DSP(" %5d+%-5d %3d ", inf->stime / TSD_DUT_DIV_10, inf->utime / TSD_DUT_DIV_10, rid);	if ( pinfo == NULL ) {		/* EXINF */		dsp_exinf(ref->exinf);	} else {		/* NAME */		DSP("[%3d] %.20S", pinfo->procid, pinfo->name);	}	DSP_LF;}/* * Indicate task state *	tskid > 0	Tasks specified by tskid only *	tskid = 0	All tasks *	opt		1: Not display header */EXPORT void DumpTask( ID tskid, UW opt ){	T_RTSK	ref;	T_ITSK	inf;	ID	id, maxid, rid;	PINFO	*pinfo;	ER	err;	maxid = 0;	tk_get_cfn("TMaxTskId", &maxid, 0);	DumpMore(0);	if ( (opt & 1U) == 0 ) {		DSP("TSK STATE (MAX:%d)\n", maxid);		DSP("TID PRI:BPR SLT WUP SUS STS(*:NODISWAI)  ST+UT(x10) RID EXINF/NAME\n");	}	if ( tskid > 0 ) {		maxid = tskid;	} else {		tskid = 1;	}	for ( id = tskid; id <= maxid; id++ ) {		err = tk_ref_tsk(id, &ref);		if ( err < E_OK ) {			if ( err != E_NOEXS ) {				DSP("%3d ** %s **\n", id, tkstrerror(err));			}			continue;		}		tk_inf_tsk(id, &inf, FALSE);		rid = tk_get_rid(id);		pinfo = NULL;		if ( ref.exinf == PRCTSK_EXINF ) {			PINFO	**pp;			err = tk_get_res(rid, PM_SVC, (VP*)&pp);			if (( err >= E_OK )&&( pp != NULL )) {				pinfo = *pp;			}		}		dump_tsk(id, &ref, &inf, rid, pinfo);		if ( DumpMore(1) ) {			break;		}	}}/* ------------------------------------------------------------------------ *//* *	Semaphore *//*SEM STATE (MAX:123) ID WID CNT EXINF123 123 123 12345678 ABCD*//* * Indicate semaphore state *	semid > 0	Semaphores specified by semid only *	semid = 0	All semaphores *	opt		1: Not display header */EXPORT void DumpSemaphore( ID semid, UW opt ){	T_RSEM	ref;	ID	id, maxid;	ER	err;	maxid = 0;	tk_get_cfn("TMaxSemId", &maxid, 1);	DumpMore(0);	if ( (opt & 1U) == 0 ) {		DSP("SEM STATE (MAX:%d):\n", maxid);		DSP(" ID WID CNT EXINF\n");	}	if ( semid > 0 ) {		maxid = semid;	} else {		semid = 1;	}	for ( id = semid; id <= maxid; id++ ) {		err = tk_ref_sem(id, &ref);		if ( err < E_OK ) {			if ( err != E_NOEXS ) {				DSP("%3d ** %s **\n", id, tkstrerror(err));			}			continue;		}		DSP("%3d %3d %3d ", id, ref.wtsk, ref.semcnt);		dsp_exinf(ref.exinf);		DSP_LF;		if ( DumpMore(1) ) {			break;		}	}}/* ------------------------------------------------------------------------ *//* *	Mutex *//*MTX STATE (MAX:123) ID HID WID EXINF123 123 123 12345678 ABCD*//* * Indicate mutex state *	mtxid > 0	Mutexes specified by mtxid only *	mtxid = 0	All mutexes *	opt		1: Not display header */EXPORT void DumpMutex( ID mtxid, UW opt ){	T_RMTX	ref;	ID	id, maxid;	ER	err;	maxid = 0;	tk_get_cfn("TMaxMtxId", &maxid, 1);	DumpMore(0);	if ( (opt & 1U) == 0 ) {		DSP("MTX STATE (MAX:%d):\n", maxid);		DSP(" ID HID WID EXINF\n");	}	if ( mtxid > 0 ) {		maxid = mtxid;	} else {		mtxid = 1;	}	for ( id = mtxid; id <= maxid; id++ ) {		err = tk_ref_mtx(id, &ref);		if ( err < E_OK ) {			if ( err != E_NOEXS ) {				DSP("%3d ** %s **\n", id, tkstrerror(err));			}			continue;		}		DSP("%3d %3d %3d ", id, ref.htsk, ref.wtsk);		dsp_exinf(ref.exinf);		DSP_LF;		if ( DumpMore(1) ) {			break;		}	}}/* ------------------------------------------------------------------------ *//* *	Event flag *//*FLG STATE (MAX:123) ID WID PTN      EXINF123 123 12345678 12345678 ABCD*//* * Indicate event flag state *	flgid > 0	Event flags specified by flgid only *	flgid = 0	All event flags *	opt		1: Not display header */EXPORT void DumpEventFlag( ID flgid, UW opt ){	T_RFLG	ref;	ID	id, maxid;	ER	err;	maxid = 0;	tk_get_cfn("TMaxFlgId", &maxid, 1);	DumpMore(0);	if ( (opt & 1U) == 0 ) {		DSP("FLG STATE (MAX:%d):\n", maxid);		DSP(" ID WID PTN      EXINF\n");	}	if ( flgid > 0 ) {		maxid = flgid;	} else {		flgid = 1;	}	for ( id = flgid; id <= maxid; id++ ) {		err = tk_ref_flg(id, &ref);		if ( err < E_OK ) {			if ( err != E_NOEXS ) {				DSP("%3d ** %s **\n", id, tkstrerror(err));			}			continue;		}		DSP("%3d %3d %08x ", id, ref.wtsk, ref.flgptn);		dsp_exinf(ref.exinf);		DSP_LF;		if ( DumpMore(1) ) {			break;		}	}}/* ------------------------------------------------------------------------ *//* *	Mail box *//*MBX STATE (MAX:123) ID WID MSG      EXINF123 123 12345678 12345678 ABCD*//* * Indicate mail box state *	mbxid > 0	Mail boxes specified by mbxid only *	mbxid = 0	All mail boxes *	opt		1: Not display header */

⌨️ 快捷键说明

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