📄 krcv_mbf.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 + -