Ignore:
Timestamp:
Jul 3, 2020, 7:19:17 PM (4 years ago)
Author:
coas-nagasima
Message:

ASP3, TINET, mbed を更新

File:
1 edited

Legend:

Unmodified
Added
Removed
  • EcnlProtoTool/trunk/asp3_dcre/kernel/startup.c

    r321 r429  
    66 *  Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
    77 *                              Toyohashi Univ. of Technology, JAPAN
    8  *  Copyright (C) 2005-2016 by Embedded and Real-Time Systems Laboratory
     8 *  Copyright (C) 2005-2018 by Embedded and Real-Time Systems Laboratory
    99 *              Graduate School of Information Science, Nagoya Univ., JAPAN
    1010 *
     
    7979
    8080/*
     81 *  カーネルメモリプール領域有効フラグ
     82 */
     83bool_t  mpk_valid;
     84
     85/*
    8186 *  カーネルの起動
    8287 */
     
    8489sta_ker(void)
    8590{
     91        uint_t  i;
     92
    8693        /*
    8794         *  TECSの初期化
     
    102109         *  する必要がある.
    103110         */
    104         initialize_kmm();
     111        if (mpk != NULL) {
     112                mpk_valid = initialize_mempool(mpk, mpksz);
     113        }
     114        else {
     115                mpk_valid = false;
     116        }
    105117        initialize_tmevt();                                                             /*[ASPD1061]*/
    106118        initialize_object();
     
    109121         *  初期化ルーチンの実行
    110122         */
    111         call_inirtn();
     123        for (i = 0; i < tnum_inirtn; i++) {
     124                (*(inirtnb_table[i].inirtn))(inirtnb_table[i].exinf);
     125        }
    112126
    113127        /*
     
    172186exit_kernel(void)
    173187{
     188        uint_t  i;
     189
    174190        /*
    175191         *  終了処理ルーチンの実行
    176192         */
    177         call_terrtn();
     193        for (i = 0; i < tnum_terrtn; i++) {
     194                (*(terrtnb_table[i].terrtn))(terrtnb_table[i].exinf);
     195        }
    178196
    179197        /*
     
    187205
    188206/*
    189  *  カーネルの割り付けるメモリ領域の管理
     207 *  デフォルトのメモリプール管理機能
    190208 *
    191  *  メモリ領域を先頭から順に割り当て,解放されたメモリ領域を再利用しな
    192  *  いメモリ管理モジュール.
     209 *  メモリプール領域の先頭から順に割り当てを行い,すべてのメモリ領域が
     210 *  解放されるまで解放されたメモリ領域を再利用しないメモリプール管理機
     211 *  能.
    193212 */
    194213#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
     216typedef struct {
     217        void    *brk;           /* メモリプール領域の未使用領域の先頭番地 */
     218        void    *limit;         /* メモリプール領域の上限 */
     219        uint_t  count;          /* 割り当てたメモリ領域の数 */
     220} MEMPOOLCB;
     221
     222bool_t
     223initialize_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        }
    203236}
    204237
    205238void *
    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);
     239malloc_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);
    211249        }
    212250        else {
     
    216254
    217255void
    218 kernel_free(void *ptr)
    219 {
    220 }
    221 
    222 #endif /* OMIT_KMM_ALLOCONLY */
     256free_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 */
    223267#endif /* TOPPERS_kermem */
Note: See TracChangeset for help on using the changeset viewer.