2 * Hyper Operating System V4 Advance
5 * @brief %jp{ミューテックスをTCBに接続}%en{}
7 * Copyright (C) 1998-2006 by Project HOS
8 * http://sourceforge.jp/projects/hos/
13 #include "core/core.h"
14 #include "object/mtxobj.h"
17 /** %jp{タスクにミューテックスを接続} */
18 void _kernel_add_mtx(_KERNEL_T_MTXHDL mtxhdl, _KERNEL_T_TSKHDL tskhdl)
20 _KERNEL_T_MTXCB_PTR mtxcb;
21 _KERNEL_T_TCB_PTR tcb;
22 _KERNEL_T_MTXHDL mtxhdl_head;
24 mtxcb = _KERNEL_MTX_MTXHDL2MTXCB(mtxhdl);
25 tcb = _KERNEL_TSK_TSKHDL2TCB(tskhdl);
27 _KERNEL_MTX_SET_TSKHDL(mtxcb, tskhdl);
30 mtxhdl_head = _KERNEL_TSK_GET_MTXHDL(tcb);
31 if ( mtxhdl_head == _KERNEL_MTXHDL_NULL )
34 _KERNEL_TSK_SET_MTXHDL(tcb, mtxhdl);
35 _KERNEL_MTX_SET_NEXT(mtxcb, mtxhdl);
36 _KERNEL_MTX_SET_NEXT(mtxcb, mtxhdl);
40 _KERNEL_T_MTXHDL mtxhdl_next;
41 _KERNEL_T_MTXHDL mtxhdl_prev;
42 _KERNEL_T_MTXCB_PTR mtxcb_next;
43 _KERNEL_T_MTXCB_PTR mtxcb_prev;
45 /* %jp{接続の先頭/末尾を取得} */
46 mtxhdl_next = mtxhdl_head;
47 mtxcb_next = _KERNEL_MTX_MTXHDL2MTXCB(mtxhdl_next);
48 mtxhdl_prev = _KERNEL_MTX_GET_PREV(mtxcb_next);
49 mtxcb_prev = _KERNEL_MTX_MTXHDL2MTXCB(mtxhdl_prev);
52 _KERNEL_MTX_SET_PREV(mtxcb_next, mtxhdl);
53 _KERNEL_MTX_SET_NEXT(mtxcb_prev, mtxhdl);
54 _KERNEL_MTX_SET_NEXT(mtxcb, mtxhdl_next);
55 _KERNEL_MTX_SET_PREV(mtxcb, mtxhdl_prev);