summaryrefslogtreecommitdiff
path: root/components
diff options
context:
space:
mode:
authorBernard Xiong <[email protected]>2013-07-09 13:56:51 -0700
committerBernard Xiong <[email protected]>2013-07-09 13:56:51 -0700
commit493930ea07246bfe39d12ebcc21f08a28f6a8239 (patch)
treed252b6f31e632f7ba3aba0a7e7dbd5bee7f8efa7 /components
parenteed81a64192bb98cdffd62e64f730d70568cca48 (diff)
parent8c0d4d2ad887017bde508ad0522d19b42c893cac (diff)
Merge pull request #118 from BernardXiong/master
Remove initialization feature for MS VC++ compiler.
Diffstat (limited to 'components')
-rw-r--r--components/init/components.c101
1 files changed, 79 insertions, 22 deletions
diff --git a/components/init/components.c b/components/init/components.c
index 86caf498d2..83e13f22cd 100644
--- a/components/init/components.c
+++ b/components/init/components.c
@@ -23,6 +23,7 @@
* And all components related header files.
* 2012-12-23 Bernard fix the pthread initialization issue.
* 2013-06-23 Bernard Add the init_call for components initialization.
+ * 2013-07-05 Bernard Remove initialization feature for MS VC++ compiler
*/
#include "components.h"
@@ -45,35 +46,19 @@ static int rti_end(void)
}
INIT_EXPORT(rti_end,"7");
-#if defined(_MSC_VER) || (defined(__GNUC__) && defined(__x86_64__))
-/* fixed for MSC_VC and x86_64 in GNU GCC */
-#define NEXT_COMPONENT_FN(fn_ptr, end) fn_ptr = _next_component_fn(fn_ptr, end)
-
-const init_fn_t *_next_component_fn(const init_fn_t *fn, const init_fn_t *end)
-{
- unsigned int *ptr;
- ptr = (unsigned int*) (fn + 1);
- while ((*ptr == 0) && ((unsigned int*)ptr < (unsigned int*)end))
- ptr ++;
-
- return (const init_fn_t*)ptr;
-}
-#else
-#define NEXT_COMPONENT_FN(fn_ptr, end) fn_ptr++
-#endif
-
/**
* RT-Thread Components Initialization for board
*/
void rt_components_board_init(void)
{
+#ifndef _MSC_VER
const init_fn_t *fn_ptr;
- for (fn_ptr = &__rt_init_rti_start; fn_ptr < &__rt_init_rti_board_end; )
+ for (fn_ptr = &__rt_init_rti_start; fn_ptr < &__rt_init_rti_board_end; fn_ptr++)
{
(*fn_ptr)();
- NEXT_COMPONENT_FN(fn_ptr, __rt_init_rti_board_end);
}
+#endif
}
/**
@@ -81,12 +66,84 @@ void rt_components_board_init(void)
*/
void rt_components_init(void)
{
+#ifndef _MSC_VER
const init_fn_t *fn_ptr;
- for (fn_ptr = &__rt_init_rti_board_end; fn_ptr < &__rt_init_rti_end; )
+ for (fn_ptr = &__rt_init_rti_board_end; fn_ptr < &__rt_init_rti_end; fn_ptr ++)
{
(*fn_ptr)();
- NEXT_COMPONENT_FN(fn_ptr, __rt_init_rti_end);
}
-}
+#else
+#ifdef RT_USING_MODULE
+ rt_system_module_init();
+#endif
+
+#ifdef RT_USING_FINSH
+ /* initialize finsh */
+ finsh_system_init();
+ finsh_set_device(RT_CONSOLE_DEVICE_NAME);
+#endif
+
+#ifdef RT_USING_LWIP
+ /* initialize lwip stack */
+ /* register ethernetif device */
+ eth_system_device_init();
+
+ /* initialize lwip system */
+ lwip_system_init();
+ rt_kprintf("TCP/IP initialized!\n");
+#endif
+
+#ifdef RT_USING_DFS
+ /* initialize the device file system */
+ dfs_init();
+
+#ifdef RT_USING_DFS_ELMFAT
+ /* initialize the elm chan FatFS file system*/
+ elm_init();
+#endif
+
+#if defined(RT_USING_DFS_NFS) && defined(RT_USING_LWIP)
+ /* initialize NFSv3 client file system */
+ nfs_init();
+#endif
+
+#ifdef RT_USING_DFS_YAFFS2
+ dfs_yaffs2_init();
+#endif
+
+#ifdef RT_USING_DFS_UFFS
+ dfs_uffs_init();
+#endif
+
+#ifdef RT_USING_DFS_JFFS2
+ dfs_jffs2_init();
+#endif
+
+#ifdef RT_USING_DFS_ROMFS
+ dfs_romfs_init();
+#endif
+
+#ifdef RT_USING_DFS_DEVFS
+ devfs_init();
+#endif
+#endif /* end of RT_USING_DFS */
+
+#ifdef RT_USING_NEWLIB
+ libc_system_init(RT_CONSOLE_DEVICE_NAME);
+#else
+ /* the pthread system initialization will be initiallized in libc */
+#ifdef RT_USING_PTHREADS
+ pthread_system_init();
+#endif
+#endif
+#ifdef RT_USING_RTGUI
+ rtgui_system_server_init();
+#endif
+
+#ifdef RT_USING_USB_HOST
+ rt_usb_host_init();
+#endif
+#endif
+}