summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorqiuyiuestc <[email protected]>2010-04-16 00:53:48 +0000
committerqiuyiuestc <[email protected]>2010-04-16 00:53:48 +0000
commit0d7a1c0be7f6e6ab561ef982f4efd9f7f04ab1ee (patch)
tree27a431d9c825741e39813d396f6f33b0b08ec425 /src
parent99213611623be97274eb19bfa23aca8abcf9d19c (diff)
module developing
git-svn-id: https://rt-thread.googlecode.com/svn/trunk@625 bbd45198-f89e-11dd-88c7-29a3b14d5316
Diffstat (limited to 'src')
-rw-r--r--src/module.c4
-rw-r--r--src/rtm.c112
-rw-r--r--src/scheduler.c5
3 files changed, 117 insertions, 4 deletions
diff --git a/src/module.c b/src/module.c
index a2958cc66b..0bce29dc59 100644
--- a/src/module.c
+++ b/src/module.c
@@ -186,6 +186,10 @@ struct rt_module* rt_module_load(void* module_ptr, const rt_uint8_t* name)
struct rt_module* module = RT_NULL;
rt_uint8_t *ptr, *strtab, *shstrab;
+#ifdef RT_MODULE_DEBUG
+ rt_kprintf("rt_module_load: %s\n", name);
+#endif
+
/* check ELF header */
if (rt_memcmp(elf_module->e_ident, ELFMAG, SELFMAG) != 0 ||
elf_module->e_ident[EI_CLASS] != ELFCLASS32)
diff --git a/src/rtm.c b/src/rtm.c
index 309891af7d..f6e459ec0d 100644
--- a/src/rtm.c
+++ b/src/rtm.c
@@ -17,7 +17,9 @@
/* some buildin kernel symbol */
-/* thread symbol */
+/*
+ * thread interface symbol
+ */
RTM_EXPORT(rt_thread_init)
RTM_EXPORT(rt_thread_detach)
RTM_EXPORT(rt_thread_create)
@@ -32,5 +34,111 @@ RTM_EXPORT(rt_thread_suspend)
RTM_EXPORT(rt_thread_resume)
RTM_EXPORT(rt_thread_timeout)
-/* kservice symbol */
+#ifdef RT_USING_SEMAPHORE
+/*
+ * semaphore interface symbol
+ */
+RTM_EXPORT(rt_sem_init)
+RTM_EXPORT(rt_sem_detach)
+RTM_EXPORT(rt_sem_create)
+RTM_EXPORT(rt_sem_delete)
+RTM_EXPORT(rt_sem_take)
+RTM_EXPORT(rt_sem_trytake)
+RTM_EXPORT(rt_sem_release)
+RTM_EXPORT(rt_sem_control)
+#endif
+
+#ifdef RT_USING_MUTEX
+/*
+ * mutex interface symbol
+ */
+RTM_EXPORT(rt_mutex_init)
+RTM_EXPORT(rt_mutex_detach)
+RTM_EXPORT(rt_mutex_create)
+RTM_EXPORT(rt_mutex_delete)
+RTM_EXPORT(rt_mutex_take)
+RTM_EXPORT(rt_mutex_release)
+RTM_EXPORT(rt_mutex_control)
+#endif
+
+#ifdef RT_USING_EVENT
+/*
+ * event interface symbol
+ */
+RTM_EXPORT(rt_event_init)
+RTM_EXPORT(rt_event_detach)
+RTM_EXPORT(rt_event_create)
+RTM_EXPORT(rt_event_delete)
+RTM_EXPORT(rt_event_send)
+RTM_EXPORT(rt_event_recv)
+RTM_EXPORT(rt_event_control)
+#endif
+
+#ifdef RT_USING_MAILBOX
+/*
+ * mailbox interface symbol
+ */
+RTM_EXPORT(rt_mb_init)
+RTM_EXPORT(rt_mb_detach)
+RTM_EXPORT(rt_mb_create)
+RTM_EXPORT(rt_mb_delete)
+RTM_EXPORT(rt_mb_send)
+RTM_EXPORT(rt_mb_recv)
+RTM_EXPORT(rt_mb_control)
+#endif
+
+#ifdef RT_USING_MESSAGEQUEUE
+/*
+ * message queue interface symbol
+ */
+RTM_EXPORT(rt_mq_init)
+RTM_EXPORT(rt_mq_detach)
+RTM_EXPORT(rt_mq_create)
+RTM_EXPORT(rt_mq_delete)
+RTM_EXPORT(rt_mq_send)
+RTM_EXPORT(rt_mq_urgent)
+RTM_EXPORT(rt_mq_recv)
+RTM_EXPORT(rt_mq_control)
+#endif
+
+#ifdef RT_USING_MEMPOOL
+/*
+ * memory pool interface symbol
+ */
+RTM_EXPORT(rt_mp_init)
+RTM_EXPORT(rt_mp_detach)
+RTM_EXPORT(rt_mp_create)
+RTM_EXPORT(rt_mp_delete)
+RTM_EXPORT(rt_mp_alloc)
+RTM_EXPORT(rt_mp_free)
+#endif
+
+#ifdef RT_USING_HEAP
+/*
+ * heap memory interface symbol
+ */
+RTM_EXPORT(rt_malloc)
+RTM_EXPORT(rt_free)
+RTM_EXPORT(rt_realloc)
+RTM_EXPORT(rt_calloc)
+#endif
+/*
+ * clock & timer interface symbol
+ */
+RTM_EXPORT(rt_tick_get)
+RTM_EXPORT(rt_tick_from_millisecond)
+RTM_EXPORT(rt_system_timer_init)
+RTM_EXPORT(rt_system_timer_thread_init)
+RTM_EXPORT(rt_timer_init)
+RTM_EXPORT(rt_timer_detach)
+RTM_EXPORT(rt_timer_create)
+RTM_EXPORT(rt_timer_delete)
+RTM_EXPORT(rt_timer_start)
+RTM_EXPORT(rt_timer_stop)
+RTM_EXPORT(rt_timer_control)
+
+/*
+ * kservice interface symbol
+ */
RTM_EXPORT(rt_kprintf)
+
diff --git a/src/scheduler.c b/src/scheduler.c
index fdfd4289e1..e5c82279cb 100644
--- a/src/scheduler.c
+++ b/src/scheduler.c
@@ -19,6 +19,7 @@
* 2006-09-05 Bernard add 32 priority level support
* 2006-09-24 Bernard add rt_system_scheduler_start function
* 2009-09-16 Bernard fix _rt_scheduler_stack_check
+ * 2010-04-11 yi.qiu add module feature
*/
#include <rtthread.h>
@@ -264,8 +265,8 @@ void rt_schedule()
rt_current_thread = to_thread;
#ifdef RT_USING_MODULE
- if(rt_current_thread->module_parent != RT_NULL)
- rt_current_module = rt_current_thread->module_parent;
+ rt_current_module = (rt_current_thread->module_parent != RT_NULL) ?
+ rt_current_thread->module_parent : RT_NULL;
#endif
#ifdef RT_USING_HOOK