📄 ksnd_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 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 + -