Changeset 429 for EcnlProtoTool/trunk/asp3_dcre/kernel/startup.c
- Timestamp:
- Jul 3, 2020, 7:19:17 PM (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
EcnlProtoTool/trunk/asp3_dcre/kernel/startup.c
r321 r429 6 6 * Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory 7 7 * Toyohashi Univ. of Technology, JAPAN 8 * Copyright (C) 2005-201 6by Embedded and Real-Time Systems Laboratory8 * Copyright (C) 2005-2018 by Embedded and Real-Time Systems Laboratory 9 9 * Graduate School of Information Science, Nagoya Univ., JAPAN 10 10 * … … 79 79 80 80 /* 81 * カーネルメモリプール領域有効フラグ 82 */ 83 bool_t mpk_valid; 84 85 /* 81 86 * カーネルの起動 82 87 */ … … 84 89 sta_ker(void) 85 90 { 91 uint_t i; 92 86 93 /* 87 94 * TECSの初期化 … … 102 109 * する必要がある. 103 110 */ 104 initialize_kmm(); 111 if (mpk != NULL) { 112 mpk_valid = initialize_mempool(mpk, mpksz); 113 } 114 else { 115 mpk_valid = false; 116 } 105 117 initialize_tmevt(); /*[ASPD1061]*/ 106 118 initialize_object(); … … 109 121 * 初期化ルーチンの実行 110 122 */ 111 call_inirtn(); 123 for (i = 0; i < tnum_inirtn; i++) { 124 (*(inirtnb_table[i].inirtn))(inirtnb_table[i].exinf); 125 } 112 126 113 127 /* … … 172 186 exit_kernel(void) 173 187 { 188 uint_t i; 189 174 190 /* 175 191 * 終了処理ルーチンの実行 176 192 */ 177 call_terrtn(); 193 for (i = 0; i < tnum_terrtn; i++) { 194 (*(terrtnb_table[i].terrtn))(terrtnb_table[i].exinf); 195 } 178 196 179 197 /* … … 187 205 188 206 /* 189 * カーネルの割り付けるメモリ領域の管理207 * デフォルトのメモリプール管理機能 190 208 * 191 * メモリ領域を先頭から順に割り当て,解放されたメモリ領域を再利用しな 192 * いメモリ管理モジュール. 209 * メモリプール領域の先頭から順に割り当てを行い,すべてのメモリ領域が 210 * 解放されるまで解放されたメモリ領域を再利用しないメモリプール管理機 211 * 能. 193 212 */ 194 213 #ifdef TOPPERS_kermem 195 #ifndef OMIT_KMM_ALLOCONLY 196 197 static void *kmm_brk; 198 199 void 200 initialize_kmm(void) 201 { 202 kmm_brk = ((char *) kmm) + kmmsz; 214 #ifndef OMIT_MEMPOOL_DEFAULT 215 216 typedef struct { 217 void *brk; /* メモリプール領域の未使用領域の先頭番地 */ 218 void *limit; /* メモリプール領域の上限 */ 219 uint_t count; /* 割り当てたメモリ領域の数 */ 220 } MEMPOOLCB; 221 222 bool_t 223 initialize_mempool(MB_T *mempool, size_t size) 224 { 225 MEMPOOLCB *p_mempoolcb = ((MEMPOOLCB *) mempool); 226 227 if (size >= sizeof(MEMPOOLCB)) { 228 p_mempoolcb->brk = ((char *) mempool) + sizeof(MEMPOOLCB); 229 p_mempoolcb->limit = ((char *) mempool) + size; 230 p_mempoolcb->count = 0; 231 return(true); 232 } 233 else { 234 return(false); 235 } 203 236 } 204 237 205 238 void * 206 kernel_malloc(size_t size) 207 { 208 if (((char *) kmm_brk) - ((char *) kmm) >= size) { 209 kmm_brk = ((char *) kmm_brk) - size; 210 return(kmm_brk); 239 malloc_mempool(MB_T *mempool, size_t size) 240 { 241 MEMPOOLCB *p_mempoolcb = ((MEMPOOLCB *) mempool); 242 void *brk; 243 244 brk = ((MEMPOOLCB *) mempool)->brk; 245 if (((char *)(p_mempoolcb->limit)) - ((char *) brk) >= size) { 246 p_mempoolcb->brk = ((char *) brk) + size; 247 p_mempoolcb->count += 1; 248 return(brk); 211 249 } 212 250 else { … … 216 254 217 255 void 218 kernel_free(void *ptr) 219 { 220 } 221 222 #endif /* OMIT_KMM_ALLOCONLY */ 256 free_mempool(MB_T *mempool, void *ptr) 257 { 258 MEMPOOLCB *p_mempoolcb = ((MEMPOOLCB *) mempool); 259 260 p_mempoolcb->count -= 1; 261 if (p_mempoolcb->count == 0) { 262 p_mempoolcb->brk = ((char *) mempool) + sizeof(MEMPOOLCB); 263 } 264 } 265 266 #endif /* OMIT_MEMPOOL_DEFAULT */ 223 267 #endif /* TOPPERS_kermem */
Note:
See TracChangeset
for help on using the changeset viewer.