From f38b5a9f9f96ace22c68c747a9895c4e83416788 Mon Sep 17 00:00:00 2001 From: tonyzheng-rockchip Date: Thu, 2 Jan 2020 08:54:48 +0800 Subject: Add priority & stack_size parameters for dlmodule custom --- components/libc/libdl/dlmodule.c | 6 +++++- components/libc/libdl/dlmodule.h | 4 ++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/components/libc/libdl/dlmodule.c b/components/libc/libdl/dlmodule.c index 2829b7df7d..ee50427605 100644 --- a/components/libc/libdl/dlmodule.c +++ b/components/libc/libdl/dlmodule.c @@ -709,6 +709,7 @@ __exit: struct rt_dlmodule* dlmodule_exec_custom(const char* pgname, const char* cmd, int cmd_size, struct rt_dlmodule_ops* ops) { struct rt_dlmodule *module = RT_NULL; + rt_uint32_t tick = 10; module = dlmodule_load_custom(pgname, ops); if (module) @@ -721,11 +722,14 @@ struct rt_dlmodule* dlmodule_exec_custom(const char* pgname, const char* cmd, in module->cmd_line = rt_strdup(cmd); /* check stack size and priority */ + if (ops->priority) module->priority = ops->priority; + if (ops->stack_size) module->stack_size = ops->stack_size; + if (ops->tick) tick = ops->tick; if (module->priority > RT_THREAD_PRIORITY_MAX) module->priority = RT_THREAD_PRIORITY_MAX - 1; if (module->stack_size < 2048 || module->stack_size > (1024 * 32)) module->stack_size = 2048; tid = rt_thread_create(module->parent.name, _dlmodule_thread_entry, (void*)module, - module->stack_size, module->priority, 10); + module->stack_size, module->priority, tick); if (tid) { tid->module_id = module; diff --git a/components/libc/libdl/dlmodule.h b/components/libc/libdl/dlmodule.h index b366c7603e..28677b06a7 100644 --- a/components/libc/libdl/dlmodule.h +++ b/components/libc/libdl/dlmodule.h @@ -63,6 +63,10 @@ struct rt_dlmodule_ops { rt_uint8_t *(*load)(const char* filename); /* load dlmodule file data */ rt_err_t (*unload)(rt_uint8_t *param); /* unload dlmodule file data */ + + rt_uint16_t priority; + rt_uint32_t stack_size; + rt_uint32_t tick; }; struct rt_dlmodule *dlmodule_create(void); -- cgit v1.3.1 From 04c20bc8ed2a8e69aa53e8956739feda9800596f Mon Sep 17 00:00:00 2001 From: tonyzheng-rockchip Date: Fri, 3 Jan 2020 09:18:51 +0800 Subject: Revert "Add priority & stack_size parameters for dlmodule custom" This reverts commit f38b5a9f9f96ace22c68c747a9895c4e83416788. --- components/libc/libdl/dlmodule.c | 6 +----- components/libc/libdl/dlmodule.h | 4 ---- 2 files changed, 1 insertion(+), 9 deletions(-) diff --git a/components/libc/libdl/dlmodule.c b/components/libc/libdl/dlmodule.c index ee50427605..2829b7df7d 100644 --- a/components/libc/libdl/dlmodule.c +++ b/components/libc/libdl/dlmodule.c @@ -709,7 +709,6 @@ __exit: struct rt_dlmodule* dlmodule_exec_custom(const char* pgname, const char* cmd, int cmd_size, struct rt_dlmodule_ops* ops) { struct rt_dlmodule *module = RT_NULL; - rt_uint32_t tick = 10; module = dlmodule_load_custom(pgname, ops); if (module) @@ -722,14 +721,11 @@ struct rt_dlmodule* dlmodule_exec_custom(const char* pgname, const char* cmd, in module->cmd_line = rt_strdup(cmd); /* check stack size and priority */ - if (ops->priority) module->priority = ops->priority; - if (ops->stack_size) module->stack_size = ops->stack_size; - if (ops->tick) tick = ops->tick; if (module->priority > RT_THREAD_PRIORITY_MAX) module->priority = RT_THREAD_PRIORITY_MAX - 1; if (module->stack_size < 2048 || module->stack_size > (1024 * 32)) module->stack_size = 2048; tid = rt_thread_create(module->parent.name, _dlmodule_thread_entry, (void*)module, - module->stack_size, module->priority, tick); + module->stack_size, module->priority, 10); if (tid) { tid->module_id = module; diff --git a/components/libc/libdl/dlmodule.h b/components/libc/libdl/dlmodule.h index 28677b06a7..b366c7603e 100644 --- a/components/libc/libdl/dlmodule.h +++ b/components/libc/libdl/dlmodule.h @@ -63,10 +63,6 @@ struct rt_dlmodule_ops { rt_uint8_t *(*load)(const char* filename); /* load dlmodule file data */ rt_err_t (*unload)(rt_uint8_t *param); /* unload dlmodule file data */ - - rt_uint16_t priority; - rt_uint32_t stack_size; - rt_uint32_t tick; }; struct rt_dlmodule *dlmodule_create(void); -- cgit v1.3.1 From 5eb53417f410328452460b3c78f21714ab3cca6e Mon Sep 17 00:00:00 2001 From: tonyzheng-rockchip Date: Fri, 3 Jan 2020 09:23:44 +0800 Subject: Add priority & stack_size param parsing for dlmodule --- components/libc/libdl/dlelf.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/components/libc/libdl/dlelf.c b/components/libc/libdl/dlelf.c index 1265ffcb07..b79e5c23ea 100644 --- a/components/libc/libdl/dlelf.c +++ b/components/libc/libdl/dlelf.c @@ -226,6 +226,24 @@ rt_err_t dlmodule_load_shared_object(struct rt_dlmodule* module, void *module_pt length); count ++; } + + /* get priority param */ + for (i = 0; i < shdr[index].sh_size / sizeof(Elf32_Sym); i++) + { + if (rt_strcmp((const char *)(strtab + symtab[i].st_name), "dlmodule_thread_priority") == 0) + { + module->priority = *(rt_uint16_t*)(module->mem_space + symtab[i].st_value - module->vstart_addr); + } + } + + /* get stack size param */ + for (i = 0; i < shdr[index].sh_size / sizeof(Elf32_Sym); i++) + { + if (rt_strcmp((const char *)(strtab + symtab[i].st_name), "dlmodule_thread_stacksize") == 0) + { + module->stack_size = *(rt_uint32_t*)(module->mem_space + symtab[i].st_value - module->vstart_addr); + } + } } return RT_EOK; -- cgit v1.3.1 From 1f5118f7ddfead2d4924e8a2018f32ab388c7392 Mon Sep 17 00:00:00 2001 From: tonyzheng-rockchip Date: Fri, 3 Jan 2020 09:23:44 +0800 Subject: Add priority & stack_size param parsing for dlmodule --- components/libc/libdl/dlelf.c | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/components/libc/libdl/dlelf.c b/components/libc/libdl/dlelf.c index 1265ffcb07..55ef0d8951 100644 --- a/components/libc/libdl/dlelf.c +++ b/components/libc/libdl/dlelf.c @@ -226,6 +226,40 @@ rt_err_t dlmodule_load_shared_object(struct rt_dlmodule* module, void *module_pt length); count ++; } + + /* get priority & stack size params*/ + rt_uint32_t flag = 0; + rt_uint16_t priority; + rt_uint32_t stacksize; + for (i = 0; i < shdr[index].sh_size / sizeof(Elf32_Sym); i++) + { + if (((flag & 0x01) == 0) && + (rt_strcmp((const char *)(strtab + symtab[i].st_name), "dlmodule_thread_priority") == 0)) + { + flag |= 0x01; + priority = *(rt_uint16_t*)(module->mem_space + symtab[i].st_value - module->vstart_addr); + if (priority < RT_THREAD_PRIORITY_MAX) + { + module->priority = priority; + } + } + + if (((flag & 0x02) == 0) && + (rt_strcmp((const char *)(strtab + symtab[i].st_name), "dlmodule_thread_stacksize") == 0)) + { + flag |= 0x02; + stacksize = *(rt_uint32_t*)(module->mem_space + symtab[i].st_value - module->vstart_addr); + if ((stacksize < 2048) || (stacksize > 1024 * 32)) + { + module->stack_size = stacksize; + } + } + + if ((flag & 0x03) == 0x03) + { + break; + } + } } return RT_EOK; -- cgit v1.3.1