diff options
| author | qiuyiuestc <[email protected]> | 2010-04-21 16:59:06 +0000 |
|---|---|---|
| committer | qiuyiuestc <[email protected]> | 2010-04-21 16:59:06 +0000 |
| commit | 38c432620f3c1df2e88dc892dbd24ef19a198bd2 (patch) | |
| tree | fa99ba53b1b63c04aaba7d701e391bcddf88ae6b /src | |
| parent | 146d88b0507c173919e1e8f8dee9f5c9157731fc (diff) | |
module developing
git-svn-id: https://rt-thread.googlecode.com/svn/trunk@663 bbd45198-f89e-11dd-88c7-29a3b14d5316
Diffstat (limited to 'src')
| -rw-r--r-- | src/idle.c | 5 | ||||
| -rw-r--r-- | src/module.c | 10 | ||||
| -rw-r--r-- | src/object.c | 6 |
3 files changed, 19 insertions, 2 deletions
diff --git a/src/idle.c b/src/idle.c index a86be531c2..2354a21aac 100644 --- a/src/idle.c +++ b/src/idle.c @@ -79,6 +79,11 @@ static void rt_thread_idle_entry(void* parameter) /* release thread's stack */ rt_free(thread->stack_addr); +#ifdef RT_USING_MODULE + /* release thread point in module */ + if(thread->module_parent != RT_NULL) + thread->module_parent->module_thread = RT_NULL; +#endif /* delete thread object */ rt_object_delete((rt_object_t)thread); } diff --git a/src/module.c b/src/module.c index 9e936713ee..af980541cb 100644 --- a/src/module.c +++ b/src/module.c @@ -255,9 +255,15 @@ struct rt_module* rt_module_load(void* module_ptr, const rt_uint8_t* name) if (IS_PROG(shdr[index]) && IS_AW(shdr[index])) { module->module_data = (rt_uint32_t)ptr; - rt_memset(ptr, 0, shdr[index].sh_size); + rt_memcpy(ptr, (rt_uint8_t*)elf_module + shdr[index].sh_offset, shdr[index].sh_size); ptr += shdr[index].sh_size; } + + /* load bss section */ + if (IS_NOPROG(shdr[index]) && IS_AW(shdr[index])) + { + rt_memset(ptr, 0, shdr[index].sh_size); + } } /* set module entry */ @@ -316,7 +322,7 @@ struct rt_module* rt_module_load(void* module_ptr, const rt_uint8_t* name) { /* relocate object in data section */ rt_module_arm_relocate(module, rel, - (Elf32_Addr)(ptr + sym->st_value), + (Elf32_Addr)(module->module_data + sym->st_value), module_addr); } } diff --git a/src/object.c b/src/object.c index 3843326b61..e9d45f3bbc 100644 --- a/src/object.c +++ b/src/object.c @@ -180,8 +180,14 @@ void rt_object_init(struct rt_object* object, enum rt_object_class_type type, co register rt_base_t temp; struct rt_object_information* information; +#ifdef RT_USING_MODULE + /* get module object information */ + information = (rt_current_module != RT_NULL) ? + &rt_current_module->module_object[type] : &rt_object_container[type]; +#else /* get object information */ information = &rt_object_container[type]; +#endif /* init object's parameters */ |
