Develop and Download Open Source Software

Browse CVS Repository

Contents of /hos/hos/hos-v4/src/kernel/mpl/kcre_mpl.c

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.3 - (show annotations) (download) (as text)
Tue Feb 26 14:51:14 2008 UTC (16 years ago) by ryuz
Branch: MAIN
CVS Tags: HEAD
Changes since 1.2: +1 -1 lines
File MIME type: text/x-csrc
(none)

1 /* ------------------------------------------------------------------------ */
2 /* Hyper Operating System V4 μITRON4.0仕様 Real-Time OS */
3 /* ITRONカーネル 可変長メモリプール */
4 /* */
5 /* Copyright (C) 1998-2003 by Project HOS */
6 /* http://sourceforge.jp/projects/hos/ */
7 /* ------------------------------------------------------------------------ */
8
9
10 #include "knl_mpl.h"
11 #include "knl_mem.h"
12
13
14 /* 可変長メモリプール コントロールブロック(動的生成用) */
15 typedef struct t_kernel_mplcb
16 {
17 T_KERNEL_MPLCB_RAM mplcb_ram; /* 可変長メモリプール コントロールブロック(RAM部) */
18 T_KERNEL_MPLCB_ROM mplcb_rom; /* 可変長メモリプール コントロールブロック(ROM部) */
19 } T_KERNEL_MPLCB;
20
21 /* 可変長メモリプール コントロールブロック(動的生成、カーネルメモリ用) */
22 typedef struct t_kernel_mplcb_with_blk
23 {
24 T_KERNEL_MPLCB_RAM mplcb_ram; /* 可変長メモリプール コントロールブロック(RAM部) */
25 T_KERNEL_MPLCB_ROM mplcb_rom; /* 可変長メモリプール コントロールブロック(ROM部) */
26 VP blk[1]; /* メモリブロックダミー */
27 } T_KERNEL_MPLCB_WBLK;
28
29
30
31 /* 可変長メモリプールの生成(カーネル内部関数) */
32 ER kernel_cre_mpl(
33 ID mplid, /* 生成対象の可変長メモリプールのID番号 */
34 const T_CMPL *pk_cmpl) /* 可変長メモリプール生成情報を入れたパケットへのポインタ */
35 {
36 T_KERNEL_MPLCB *mplcb;
37 T_KERNEL_MPLCB_RAM *mplcb_ram;
38 T_KERNEL_MPLCB_ROM *mplcb_rom;
39 VP mpl;
40
41 /* パラメーターチェック */
42 #ifdef HOS_ERCHK_E_RSATR
43 if ( pk_cmpl->mplatr & ~(TA_TFIFO | TA_TPRI) )
44 {
45 return E_RSATR;
46 }
47 #endif
48
49 /* パラメータチェック */
50 #ifdef HOS_ERCHK_E_PAR
51 if ( pk_cmpl->mplsz == 0 )
52 {
53 return E_PAR; /* パラメータ不正 */
54 }
55 #endif
56
57 /* 可変長メモリプール用メモリの確保 */
58 mplcb = (T_KERNEL_MPLCB *)kernel_alc_mem(
59 pk_cmpl->mpl != NULL ? sizeof(T_KERNEL_MPLCB) :
60 sizeof(T_KERNEL_MPLCB_WBLK) - sizeof(VP)
61 + pk_cmpl->mplsz
62 );
63 if ( mplcb == NULL )
64 {
65 return E_NOMEM; /* メモリ不足 */
66 }
67
68 /* メモリプール先頭番地セット */
69 if ( pk_cmpl->mpl == NULL )
70 {
71 mpl = ((T_KERNEL_MPLCB_WBLK *)mplcb)->blk;
72 }
73 else
74 {
75 mpl = pk_cmpl->mpl;
76 }
77
78 /* 可変長メモリプールの設定 */
79 mplcb_ram = &mplcb->mplcb_ram;
80 mplcb_rom = &mplcb->mplcb_rom;
81 mknl_ini_que(&mplcb_ram->que);
82 mplcb_ram->mplcb_rom = mplcb_rom;
83 mplcb_rom->mplatr = pk_cmpl->mplatr;
84 mplcb_rom->mplsz = pk_cmpl->mplsz;
85 mplcb_rom->mpl = mpl;
86
87 /* ヒープ生成 */
88 kernel_cre_hep(&mplcb_ram->hep, mplcb_rom->mpl, mplcb_rom->mplsz);
89
90 /* 管理テーブルへ追加 */
91 KERNEL_MPLID_TO_MPLCB_RAM(mplid) = mplcb_ram;
92
93 return E_OK;
94 }
95
96
97 /* ------------------------------------------------------------------------ */
98 /* Copyright (C) 1998-2003 by Project HOS */
99 /* ------------------------------------------------------------------------ */

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26