diff --git a/components/init/components.c b/components/init/components.c index 86caf498d2fc5af8547868410d560e755dcbecd3..83e13f22cd1918c3a770e14e5089d030537e112b 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 +} diff --git a/include/rtdef.h b/include/rtdef.h index 8fd45186421511dea8aa7ddeef4d5f611568bc70..cb1fb7a9a911bea34e63aa856e1b7dd8daf3c402 100644 --- a/include/rtdef.h +++ b/include/rtdef.h @@ -178,8 +178,12 @@ typedef rt_base_t rt_off_t; /**< Type for offset */ /* initialization export */ #ifdef RT_USING_COMPONENTS_INIT typedef int (*init_fn_t)(void); -#define INIT_EXPORT(fn, level) \ - const init_fn_t __rt_init_##fn SECTION(".rti_fn."level) = fn +#ifdef _MSC_VER /* we do not support MS VC++ compiler */ + #define INIT_EXPORT(fn, level) +#else + #define INIT_EXPORT(fn, level) \ + const init_fn_t __rt_init_##fn SECTION(".rti_fn."level) = fn +#endif #else #define INIT_EXPORT(fn, level) #endif