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

📄 tkflg.c

📁 T-kernel 的extension源代码
💻 C
字号:
/* *---------------------------------------------------------------------- *    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. * *---------------------------------------------------------------------- *//* *	tkflg.c (taskcomm) * *	T-Kernel compatible event flag */#include "tcmgr.h"/* * Generate event flag *	T_CFLG *	exinf	Ignored *	flgatr	TA_NODISWAI cannot be specified *		flgatr:= (TA_TFIFO || TA_TPRI) | *		         (TA_WMUL || TA_WSGL) | TA_DELEXIT */EXPORT ID _tkse_cre_flg( T_CFLG *pk_cflg ){	T_CFLG	cflg;	ID	id;	ER	err;	/* Parameter check */	err = ChkSpaceR(pk_cflg, sizeof(T_CFLG));	if ( err < E_OK ) {		goto err_ret1;	}	if ( (pk_cflg->flgatr & (TA_DSNAME | TA_NODISWAI) ) != 0U ) {		err = E_RSATR;		goto err_ret1;	}	cflg = *pk_cflg;	if ( (pk_cflg->flgatr & (UW)TA_DELEXIT) != 0U ) {		cflg.exinf = GetTCinfo(TSK_SELF);		cflg.flgatr &= ~(UW)TA_DELEXIT;	} else {		cflg.exinf = NULL;	}	/* Generate event flag */	id = tk_cre_flg(&cflg);	if ( id < E_OK ) {		err = id;		goto err_ret1;	}	id = toBID(O_FLG, id);	if (cflg.exinf != NULL) {		/* Register ID for deletion at termination. */		err = tcmTkRegistObject(id);		if ( err < E_OK ) {			goto err_ret2;		}	}	return id;err_ret2:	(void)tk_del_flg(toIID(id));err_ret1:	DEBUG_PRINT(("_tkse_cre_flg err = %d\n", err));	return err;}/* * Delete event flag *	When event flag generation process terminates, *	the event flag is deleted automatically. */EXPORT ER _tkse_del_flg( ID id ){	TCINFO	*tcinfo;	T_RFLG	rflg;	ER	err;	/* Check ID */	err = tcmTkCheckID(O_FLG, id);	if ( err < E_OK ) {		goto err_ret;	}	/* Obtain event flag information */	err = tk_ref_flg(toIID(id), &rflg);	if ( err < E_OK ) {		goto err_ret;	}	tcinfo = rflg.exinf;  /* Event flag generation process */	/* Delete event flag */	err = tk_del_flg(toIID(id));	if ( err < E_OK ) {		goto err_ret;	}	if ( tcinfo != NULL ) {		/* Deregister ID */		err = tcmTkDeleteObject(id, tcinfo);		if ( err < E_OK ) {			goto err_ret;		}	}	return E_OK;err_ret:	DEBUG_PRINT(("_tkse_del_flg err = %d\n", err));	return err;}/* * Set event flag */EXPORT ER _tkse_set_flg( ID id, UINT setptn ){	ER	err;	/* Check ID */	err = tcmTkCheckID(O_FLG, id);	if ( err < E_OK ) {		goto err_ret;	}	/* Set event flag */	err = tk_set_flg(toIID(id), setptn);	if ( err < E_OK ) {		goto err_ret;	}	return E_OK;err_ret:	DEBUG_PRINT(("_tkse_set_flg err = %d\n", err));	return err;}/* * Clear event flag */EXPORT ER _tkse_clr_flg( ID id, UINT clrptn ){	ER	err;	/* Check ID */	err = tcmTkCheckID(O_FLG, id);	if ( err < E_OK ) {		goto err_ret;	}	/* Clear event flag */	err = tk_clr_flg(toIID(id), clrptn);	if ( err < E_OK ) {		goto err_ret;	}	return E_OK;err_ret:	DEBUG_PRINT(("_tkse_clr_flg err = %d\n", err));	return err;}/* * Wait for event flag *	When interrupted by message handler, *	wait state is reset and E_DISWAI is returned. */EXPORT ER _tkse_wai_flg( ID id, UINT waiptn, UINT wfmode, UINT *p_flgptn, TMO tmout ){	UINT	flgptn;	ER	err;	/* Parameter check */	err = ChkSpaceRW(p_flgptn, sizeof(UINT));	if ( err < E_OK ) {		goto err_ret;	}	/* Check ID */	err = tcmTkCheckID(O_FLG, id);	if ( err < E_OK ) {		goto err_ret;	}	/* Wait for event flag */	err = tk_wai_flg(toIID(id), waiptn, wfmode, &flgptn, tmout);	if ( err < E_OK ) {		goto err_ret;	}	*p_flgptn = flgptn;	return E_OK;err_ret:	DEBUG_PRINT(("_tkse_wai_flg err = %d\n", err));	return err;}/* * Refer to event flag state *	T_RFLG *	exinf	Always return NULL */EXPORT ER _tkse_ref_flg( ID id, T_RFLG *pk_rflg ){	T_RFLG	rflg;	ER	err;	/* Parameter check */	err = ChkSpaceRW(pk_rflg, sizeof(T_RFLG));	if ( err < E_OK ) {		goto err_ret;	}	/* Check ID */	err = tcmTkCheckID(O_FLG, id);	if ( err < E_OK ) {		goto err_ret;	}	/* Obtain event flag information */	err = tk_ref_flg(toIID(id), &rflg);	if ( err < E_OK ) {		goto err_ret;	}	*pk_rflg = rflg;	pk_rflg->exinf = NULL;	return E_OK;err_ret:	DEBUG_PRINT(("_tkse_ref_flg err = %d\n", err));	return err;}

⌨️ 快捷键说明

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