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

📄 krcv_mbf.c

📁 Hyper Operating System。基于ITRON接口的实时操作系统。主页: https://sourceforge.jp/projects/hos
💻 C
字号:
/* ------------------------------------------------------------------------ *//*  Hyper Operating System V4  μITRON4.0慌屯 Real-Time OS                  *//*    カ〖ネル巴赂攫鼠年盗ヘッダ メッセ〖ジバッファ                         *//*                                                                          *//*                                  Copyright (C) 1998-2002 by Project HOS  *//*                                  http://sourceforge.jp/projects/hos/     *//* ------------------------------------------------------------------------ */#include "knl_mbf.h"#include "hoslib.h"static UB kernel_rch_mbf(const T_KERNEL_MBFCB_ROM *mbfcb_rom,								T_KERNEL_MBFCB_RAM *mbfcb_ram);	/* 1キャラクタ减慨 *//* メッセ〖ジバッファからの减慨(カ〖ネル柒婶簇眶) */ER_UINT kernel_rcv_mbf(		const T_KERNEL_MBFCB_ROM *mbfcb_rom,	/* メッセ〖ジバッファコントロ〖ルブロック(ROM婶) */		T_KERNEL_MBFCB_RAM       *mbfcb_ram,	/* メッセ〖ジバッファコントロ〖ルブロック(RAM婶) */		VP                       msg)			/* 减慨メッセ〖ジを呈羌する黎片戎孟 */{	T_MKNL_TCB *mtcb;	UINT       msgsz;	UINT       tmpsz;	INT        i;	/* メッセ〖ジ赂哼チェック */	if ( mbfcb_ram->smsgcnt == 0 )	/* メッセ〖ジが痰い眷圭 */	{		/* 流慨略ちタスクチェック */		mtcb = mknl_ref_qhd(&mbfcb_ram->sndque);	/* 减慨略ち乖误の黎片タスクを徊救 */		if ( mtcb != NULL )		{			T_KERNEL_MBFDAT *mbfdat;						/* 流慨デ〖タ减け艰り */			mbfdat = (T_KERNEL_MBFDAT *)mtcb->data;			__hos_bcopy(msg, mbfdat->msg, mbfdat->msgsz);	/* デ〖タコピ〖 */			/* 流慨タスクの略ちを豺近 */			mknl_rmv_que(mtcb);				/* 略ち乖误から猴近 */			mknl_rmv_tmout(mtcb);			/* タイムアウト略ち乖误から猴近 */			mknl_wup_tsk(mtcb, E_OK);		/* タスクの略ち豺近 */			return (ER_UINT)mbfdat->msgsz;	/* 赖撅窗位 */		}		return E_TMOUT;		/* タイムアウト */	}		/* サイズ减慨 */	msgsz = 0;	for ( i = 0; i < sizeof(UINT); i++ )	{		/* 惧疤から界に8bitずつ粕み叫し */		msgsz <<= 8;		msgsz += kernel_rch_mbf(mbfcb_rom, mbfcb_ram);	}		/* デ〖タ减慨 */	tmpsz = (UINT)mbfcb_rom->mbfsz - mbfcb_ram->head;	/* 擂り手し爬までのサイズを换叫 */	if ( tmpsz >= msgsz )	/* 擂り手し冉年 */	{		__hos_bcopy(msg, (UB *)mbfcb_rom->mbf + mbfcb_ram->head, msgsz);		/* デ〖タコピ〖 */	}	else	{		__hos_bcopy(msg, (UB *)mbfcb_rom->mbf + mbfcb_ram->head, tmpsz);		/* 擂り手し爬までコピ〖 */		__hos_bcopy((UB *)msg + tmpsz, (UB *)mbfcb_rom->mbf, msgsz - tmpsz);	/* 荒りを黎片からコピ〖 */	}	/* ポインタ构糠 */	mbfcb_ram->head += msgsz;	if ( mbfcb_ram->head >= mbfcb_rom->mbfsz )	{		mbfcb_ram->head -= (UINT)mbfcb_rom->mbfsz;	}	/* バッファ鄂きサイズ构糠 */	mbfcb_ram->fmbfsz += msgsz;	/* 流慨改眶デクリメント */	mbfcb_ram->smsgcnt--;	return (ER_UINT)msgsz;	/* 流慨サイズを手す */}/* 1キャラクタ减慨 */UB kernel_rch_mbf(		const T_KERNEL_MBFCB_ROM *mbfcb_rom,	/* メッセ〖ジバッファコントロ〖ルブロック(ROM婶) */		T_KERNEL_MBFCB_RAM       *mbfcb_ram)	/* メッセ〖ジバッファコントロ〖ルブロック(RAM婶) */{	UB chr;	/* 1キャラクタ减慨 */	chr = *((UB *)mbfcb_rom->mbf + mbfcb_ram->head);	/* ポインタ构糠 */	if ( mbfcb_ram->head + 1 < (UINT)mbfcb_rom->mbfsz )	{		mbfcb_ram->head++;	}	else	{		mbfcb_ram->head = 0;	}	/* バッファ鄂きサイズ构糠 */	mbfcb_ram->fmbfsz++;		return chr;}/* ------------------------------------------------------------------------ *//*  Copyright (C) 1998-2002 by Project HOS                                  *//* ------------------------------------------------------------------------ */

⌨️ 快捷键说明

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