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

📄 ksnd_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 void kernel_sch_mbf(const T_KERNEL_MBFCB_ROM *mbfcb_rom,						T_KERNEL_MBFCB_RAM *mbfcb_ram, UB chr);	/* 1キャラクタ流慨 *//* メッセ〖ジバッファへの流慨 */ER kernel_snd_mbf(		const T_KERNEL_MBFCB_ROM *mbfcb_rom,	/* メッセ〖ジバッファコントロ〖ルブロック(ROM婶) */		T_KERNEL_MBFCB_RAM       *mbfcb_ram,	/* メッセ〖ジバッファコントロ〖ルブロック(RAM婶) */		VP                       msg,			/* 流慨メッセ〖ジの黎片戎孟 */		UINT                     msgsz)			/* 流慨メッセ〖ジのサイズ(バイト眶) */{	T_MKNL_TCB *mtcb;	SIZE       fresz;	SIZE       tail;	INT        i;	/* 流慨略ちタスクをチェック */	mtcb = mknl_ref_qhd(&mbfcb_ram->sndque);	/* 流慨略ち乖误の黎片タスクを徊救 */	if ( mtcb != NULL )	{		return E_TMOUT;		/* 流慨略ちが贷にあればタイムアウト */	}	/* 减慨略ちタスクチェック */	mtcb = mknl_ref_qhd(&mbfcb_ram->rcvque);	/* 减慨略ち乖误の黎片タスクを徊救 */	if ( mtcb != NULL )	{		/* 减慨タスクの略ちを豺近 */		__hos_bcopy((VP)mtcb->data, msg, msgsz);		/* デ〖タコピ〖 */		mknl_rmv_que(mtcb);						/* 略ち乖误から猴近 */		mknl_rmv_tmout(mtcb);					/* タイムアウト略ち乖误から猴近 */		mknl_wup_tsk(mtcb, (ER_UINT)msgsz);		/* タスクの略ち豺近 */		return E_OK;	/* 赖撅窗位 */	}	/* 鄂きサイズチェック */	if ( mbfcb_ram->fmbfsz < msgsz + sizeof(UINT) )	{		return E_TMOUT;		/* タイムアウト */	}		/* サイズ流慨 */	for ( i = sizeof(UINT) - 1; i >= 0; i-- )	{		/* 惧疤から界に8bit帽疤で今き哈み */		kernel_sch_mbf(mbfcb_rom, mbfcb_ram, (UB)((msgsz >> (i * 8)) & 0xff));	}	/* 琐萨疤弥换叫 */	tail = mbfcb_ram->head - mbfcb_ram->fmbfsz;	if ( mbfcb_ram->head < mbfcb_ram->fmbfsz )	{		tail += mbfcb_rom->mbfsz;	}	/* デ〖タ流慨 */	fresz = (UINT)mbfcb_rom->mbfsz - tail;	/* バッファ擂り手しまでの鄂きサイズ换叫 */	if ( fresz >= msgsz )					/* 擂り手し稍妥か冉年 */	{		__hos_bcopy((UB *)mbfcb_rom->mbf + tail, msg, msgsz);				/* デ〖タコピ〖 */	}	else	{		__hos_bcopy((UB *)mbfcb_rom->mbf + tail, msg, fresz);				/* 擂り手し爬までコピ〖 */		__hos_bcopy((UB *)mbfcb_rom->mbf, (UB *)msg + fresz, msgsz - fresz);	/* 荒りを黎片からコピ〖 */	}	/* 鄂きサイズ构糠 */	mbfcb_ram->fmbfsz -= msgsz;	/* 流慨改眶インクリメント */	mbfcb_ram->smsgcnt++;	return E_OK;}/* 1キャラクタ流慨 */void kernel_sch_mbf(		const T_KERNEL_MBFCB_ROM *mbfcb_rom,	/* メッセ〖ジバッファコントロ〖ルブロック(ROM婶) */		T_KERNEL_MBFCB_RAM       *mbfcb_ram,	/* メッセ〖ジバッファコントロ〖ルブロック(RAM婶) */		UB                       chr)			/* 流慨するキャラクタ */{	SIZE tail;	/* 琐萨疤弥换叫 */	tail = mbfcb_ram->head - mbfcb_ram->fmbfsz;	if ( mbfcb_ram->head < mbfcb_ram->fmbfsz )	{		tail += mbfcb_rom->mbfsz;	}	/* 1キャラクタ流慨 */	*((UB *)mbfcb_rom->mbf + tail) = chr;	/* バッファ鄂きサイズ构糠 */	mbfcb_ram->fmbfsz--;}/* ------------------------------------------------------------------------ *//*  Copyright (C) 1998-2002 by Project HOS                                  *//* ------------------------------------------------------------------------ */

⌨️ 快捷键说明

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