From 56c6c301bcd923372797d6415ff38756705b92d0 Mon Sep 17 00:00:00 2001 From: qiuyiuestc Date: Wed, 24 Nov 2010 01:27:45 +0000 Subject: [PATCH] clean up code git-svn-id: https://rt-thread.googlecode.com/svn/trunk@1106 bbd45198-f89e-11dd-88c7-29a3b14d5316 --- include/rtdef.h | 76 ++++++++++++++++++++++++------------------------- src/module.c | 64 ++++++++++++----------------------------- src/object.c | 4 +-- 3 files changed, 58 insertions(+), 86 deletions(-) diff --git a/include/rtdef.h b/include/rtdef.h index 1cff976b4..b05aad5c7 100644 --- a/include/rtdef.h +++ b/include/rtdef.h @@ -371,44 +371,6 @@ struct rt_thread }; /*@}*/ -#ifdef RT_USING_MODULE -/* - * module system - */ - -#define RT_MODULE_FLAG_WITHENTRY 0x00 /* with entry point */ -#define RT_MODULE_FLAG_WITHOUTENTRY 0x01 /* without entry point */ - -struct rt_module -{ - /* inherit from object */ - struct rt_object parent; - - rt_uint8_t* module_space; /* module memory space */ - - void* module_entry; /* entry address of module's thread */ - rt_thread_t module_thread; /* stack size of module's thread */ - rt_uint32_t stack_size; /* priority of module's thread */ - rt_uint32_t thread_priority; - - /* module memory allocator */ - void* module_mem_list; /* module memory free list */ - rt_list_t module_page; /* module using page */ - void* page_node_pool; - - /* module symbol table */ - rt_uint32_t nsym; - struct rt_module_symtab *symtab; - - /* reference count */ - rt_uint32_t nref; - - /* object in this module, module object is the last basic object type */ - struct rt_object_information module_object[RT_Object_Class_Unknown]; -}; -typedef struct rt_module* rt_module_t; -#endif - /** * @addtogroup IPC */ @@ -659,6 +621,44 @@ struct rt_device_blk_geometry rt_uint32_t block_size; /* size to erase one block */ }; +#ifdef RT_USING_MODULE +/* + * module system + */ + +#define RT_MODULE_FLAG_WITHENTRY 0x00 /* with entry point */ +#define RT_MODULE_FLAG_WITHOUTENTRY 0x01 /* without entry point */ + +struct rt_module +{ + /* inherit from object */ + struct rt_object parent; + + rt_uint8_t* module_space; /* module memory space */ + + void* module_entry; /* entry address of module's thread */ + rt_thread_t module_thread; /* stack size of module's thread */ + rt_uint32_t stack_size; /* priority of module's thread */ + rt_uint32_t thread_priority; + + /* module memory allocator */ + void* mem_list; /* module's free memory list */ + rt_list_t page_list; /* module's using page list */ + rt_mp_t mpool; + + /* module symbol table */ + rt_uint32_t nsym; + struct rt_module_symtab *symtab; + + /* reference count */ + rt_uint32_t nref; + + /* object in this module, module object is the last basic object type */ + struct rt_object_information module_object[RT_Object_Class_Unknown]; +}; +typedef struct rt_module* rt_module_t; +#endif + /*@}*/ #endif diff --git a/src/module.c b/src/module.c index bea13d006..d1c535ad1 100644 --- a/src/module.c +++ b/src/module.c @@ -229,11 +229,6 @@ static void rt_module_init_object_container(struct rt_module* module) rt_list_init(&(module->module_object[RT_Object_Class_Timer].object_list)); module->module_object[RT_Object_Class_Timer].object_size = sizeof(struct rt_timer); module->module_object[RT_Object_Class_Timer].type = RT_Object_Class_Timer; - - /* init object container - module */ - rt_list_init(&(module->module_object[RT_Object_Class_Module].object_list)); - module->module_object[RT_Object_Class_Module].object_size = sizeof(struct rt_timer); - module->module_object[RT_Object_Class_Module].type = RT_Object_Class_Module; } /** @@ -388,11 +383,13 @@ rt_module_t rt_module_load(const rt_uint8_t* name, void* module_ptr) if(elf_module->e_entry != 0) { /* init module page list */ - rt_list_init(&module->module_page); - + rt_list_init(&module->page_list); + /* init module memory allocator */ - module->module_mem_list = RT_NULL; - module->page_node_pool = RT_NULL; + module->mem_list = RT_NULL; + + /* create mpool for page node */ + module->mpool = rt_mp_create(name, 1024, sizeof(struct rt_module_page)); /* create module thread */ module->stack_size = 2048; @@ -648,7 +645,7 @@ rt_err_t rt_module_unload(rt_module_t module) } /* free module pages */ - list = &module->module_page; + list = &module->page_list; while(list->next != list) { struct rt_module_page* page; @@ -659,18 +656,8 @@ rt_err_t rt_module_unload(rt_module_t module) rt_list_remove(list->next); } - if(module->page_node_pool) - { - /* free page node mempool */ - if(((struct rt_mempool*)module->page_node_pool)->start_address != 0) - rt_page_free(((struct rt_mempool*)module->page_node_pool)->start_address, 1); - - /* detach page node mempool */ - rt_mp_detach(module->page_node_pool); - - /* free page node mempool structure */ - rt_free(module->page_node_pool); - } + /* delete mpool */ + if(module->mpool) rt_mp_delete(module->mpool); } /* release module space memory */ @@ -730,33 +717,18 @@ static struct rt_mem_head *morepage(rt_size_t nu) RT_ASSERT (nu != 0); + /* alloc pages from system heap */ npage = (nu * sizeof(struct rt_mem_head) + RT_MM_PAGE_SIZE - 1)/RT_MM_PAGE_SIZE; cp = rt_page_alloc(npage); if(cp == RT_NULL) return RT_NULL; - if(!rt_current_module->page_node_pool) - { - rt_current_module->page_node_pool = rt_malloc(sizeof(struct rt_mempool)); - rt_memset(rt_current_module->page_node_pool, 0, sizeof(struct rt_mempool)); - - /* allocate a page for page node */ - void *start = rt_page_alloc(1); - rt_mp_init( - (struct rt_mempool *)rt_current_module->page_node_pool, - "pnp", - start, - RT_MM_PAGE_SIZE, - sizeof(struct rt_module_page)); - } - - /* allocate page node from mempool */ - node = rt_mp_alloc((struct rt_mempool *)rt_current_module->page_node_pool, RT_WAITING_FOREVER); + /* allocate page list node from mpool */ + node = rt_mp_alloc(rt_current_module->mpool, RT_WAITING_FOREVER); node->ptr = cp; node->npage = npage; - /* insert page node to moudle's page list */ - if(rt_module_self() != RT_NULL) - rt_list_insert_after (&rt_current_module->module_page, &node->list); + /* insert page list node to moudle's page list */ + rt_list_insert_after (&rt_current_module->page_list, &node->list); up = (struct rt_mem_head *) cp; up->size = npage * RT_MM_PAGE_SIZE / sizeof(struct rt_mem_head); @@ -779,7 +751,7 @@ void *rt_module_malloc(rt_size_t size) RT_ASSERT(size != 0); RT_ASSERT(nunits != 0); - prev = (struct rt_mem_head **)&rt_current_module->module_mem_list; + prev = (struct rt_mem_head **)&rt_current_module->mem_list; /* if alloc size is the multipal of 1K, TODO */ @@ -828,7 +800,7 @@ void rt_module_free(rt_module_t module, void *addr) RT_ASSERT((((rt_uint32_t)addr) & (sizeof(struct rt_mem_head) -1)) == 0); n = (struct rt_mem_head *)addr - 1; - prev = (struct rt_mem_head **)&module->module_mem_list; + prev = (struct rt_mem_head **)&module->mem_list; while ((b = *prev) != RT_NULL) { @@ -899,7 +871,7 @@ void *rt_module_realloc(void *ptr, rt_size_t size) else { /* more space then required */ - prev = (struct rt_mem_head *)rt_current_module->module_mem_list; + prev = (struct rt_mem_head *)rt_current_module->mem_list; for (p = prev->next; p != (b->size + b) && p != RT_NULL; prev = p, p = p->next) break; /* available block after ap in freelist */ @@ -925,7 +897,7 @@ void *rt_module_realloc(void *ptr, rt_size_t size) b->size = nunits; prev->next = p; } - rt_current_module->module_mem_list = (void *)prev; + rt_current_module->mem_list = (void *)prev; return (void *) (b + 1); } else /* allocate new memory and copy old data */ diff --git a/src/object.c b/src/object.c index 34bae8b19..56703d655 100644 --- a/src/object.c +++ b/src/object.c @@ -257,8 +257,8 @@ rt_object_t rt_object_allocate(enum rt_object_class_type type, const char* name) struct rt_object_information* information; #ifdef RT_USING_MODULE - /* get module object information */ - information = (rt_module_self() != RT_NULL) ? + /* get module object information, module object should be managed by kernel object container */ + information = (rt_module_self() != RT_NULL && (type != RT_Object_Class_Module)) ? &rt_module_self()->module_object[type] : &rt_object_container[type]; #else /* get object information */