dataqueue.h

データキュー機能 [詳細]

#include "queue.h"

dataqueue.hのインクルード依存関係図

このグラフは、どのファイルから直接、間接的にインクルードされているかを示しています。

ソースコードを見る。

データ構造

struct  dataqueue_initialization_block
 データキュー初期化ブロック [詳細]
struct  dataqueue_control_block
 データキュー管理ブロック [詳細]

型定義

typedef dataqueue_initialization_block DTQINIB
typedef dataqueue_control_block DTQCB

関数

void dataqueue_initialize (void)
BOOL enqueue_data (DTQCB *dtqcb, VP_INT data)
void force_enqueue_data (DTQCB *dtqcb, VP_INT data)
BOOL dequeue_data (DTQCB *dtqcb, VP_INT *p_data)
TCBsend_data_rwait (DTQCB *dtqcb, VP_INT data)
TCBreceive_data_swait (DTQCB *dtqcb, VP_INT *p_data)


説明

データキュー機能

dataqueue.h で定義されています。


型定義


関数

void dataqueue_initialize ( void   ) 

dataqueue.c93 行で定義されています。

参照先 dataqueue_control_block::countdataqueue_control_block::dtqinibdataqueue_control_block::headqueue_initialize()dataqueue_control_block::rwait_queuedataqueue_control_block::swait_queuedataqueue_control_block::tailTNUM_DTQ.

00094 {
00095         UINT    i;
00096         DTQCB   *dtqcb;
00097 
00098         for (dtqcb = dtqcb_table, i = 0; i < TNUM_DTQ; dtqcb++, i++) {
00099                 queue_initialize(&(dtqcb->swait_queue));
00100                 dtqcb->dtqinib = &(dtqinib_table[i]);
00101                 queue_initialize(&(dtqcb->rwait_queue));
00102                 dtqcb->count = 0;
00103                 dtqcb->head = 0;
00104                 dtqcb->tail = 0;
00105         }
00106 }

関数の呼び出しグラフ:

BOOL dequeue_data ( DTQCB dtqcb,
VP_INT p_data 
)

dataqueue.c161 行で定義されています。

参照先 dataqueue_control_block::countdataqueue_initialization_block::dtqdataqueue_initialization_block::dtqcntdataqueue_control_block::dtqinibFALSEdataqueue_control_block::headTRUE.

参照元 prcv_dtq()rcv_dtq()trcv_dtq().

00162 {
00163         if (dtqcb->count > 0) {
00164                 *p_data = *((VP_INT *)(dtqcb->dtqinib->dtq) + dtqcb->head);
00165                 dtqcb->count--;
00166                 dtqcb->head++;
00167                 if (dtqcb->head >= dtqcb->dtqinib->dtqcnt) {
00168                         dtqcb->head = 0;
00169                 }
00170                 return(TRUE);
00171         }
00172         return(FALSE);
00173 }

BOOL enqueue_data ( DTQCB dtqcb,
VP_INT  data 
)

dataqueue.c116 行で定義されています。

参照先 dataqueue_control_block::countdataqueue_initialization_block::dtqdataqueue_initialization_block::dtqcntdataqueue_control_block::dtqinibFALSEdataqueue_control_block::tailTRUE.

参照元 ipsnd_dtq()prcv_dtq()psnd_dtq()rcv_dtq()snd_dtq()trcv_dtq()tsnd_dtq().

00117 {
00118         if (dtqcb->count < dtqcb->dtqinib->dtqcnt) {
00119                 *((VP_INT *)(dtqcb->dtqinib->dtq) + dtqcb->tail) = data;
00120                 dtqcb->count++;
00121                 dtqcb->tail++;
00122                 if (dtqcb->tail >= dtqcb->dtqinib->dtqcnt) {
00123                         dtqcb->tail = 0;
00124                 }
00125                 return(TRUE);
00126         }
00127         return(FALSE);
00128 }

void force_enqueue_data ( DTQCB dtqcb,
VP_INT  data 
)

dataqueue.c138 行で定義されています。

参照先 dataqueue_control_block::countdataqueue_initialization_block::dtqdataqueue_initialization_block::dtqcntdataqueue_control_block::dtqinibdataqueue_control_block::headdataqueue_control_block::tail.

参照元 fsnd_dtq()ifsnd_dtq().

00139 {
00140         *((VP_INT *)(dtqcb->dtqinib->dtq) + dtqcb->tail) = data;
00141         dtqcb->tail++;
00142         if (dtqcb->tail >= dtqcb->dtqinib->dtqcnt) {
00143                 dtqcb->tail = 0;
00144         }
00145         if (dtqcb->count < dtqcb->dtqinib->dtqcnt) {
00146                 dtqcb->count++;
00147         }
00148         else {
00149                 dtqcb->head = dtqcb->tail;
00150         }
00151 }

TCB* receive_data_swait ( DTQCB dtqcb,
VP_INT p_data 
)

dataqueue.c203 行で定義されています。

参照先 NULLqueue_delete_next()queue_empty()dataqueue_control_block::swait_queuetask_control_block::winfo.

参照元 prcv_dtq()rcv_dtq()trcv_dtq().

00204 {
00205         TCB     *tcb;
00206 
00207         if (!(queue_empty(&(dtqcb->swait_queue)))) {
00208                 tcb = (TCB *) queue_delete_next(&(dtqcb->swait_queue));
00209                 *p_data = ((WINFO_DTQ *)(tcb->winfo))->data;
00210                 return(tcb);
00211         }
00212         return(NULL);
00213 }

関数の呼び出しグラフ:

TCB* send_data_rwait ( DTQCB dtqcb,
VP_INT  data 
)

dataqueue.c183 行で定義されています。

参照先 NULLqueue_delete_next()queue_empty()dataqueue_control_block::rwait_queuetask_control_block::winfo.

参照元 fsnd_dtq()ifsnd_dtq()ipsnd_dtq()psnd_dtq()snd_dtq()tsnd_dtq().

00184 {
00185         TCB     *tcb;
00186 
00187         if (!(queue_empty(&(dtqcb->rwait_queue)))) {
00188                 tcb = (TCB *) queue_delete_next(&(dtqcb->rwait_queue));
00189                 ((WINFO_DTQ *)(tcb->winfo))->data = data;
00190                 return(tcb);
00191         }
00192         return(NULL);
00193 }

関数の呼び出しグラフ:


Copyright © 2006 by TAKAGI Nobuhisa.
Copyright © 2006 by Kijineko Inc..
このページは Mon Dec 18 17:20:09 2006 に Doxygen によって生成されました。
データ入力からプログラム開発まで!様々なスキルを持ったメンバーが登録しています【@SOHO】