提交 493930ea 编写于 作者: B Bernard Xiong

Merge pull request #118 from BernardXiong/master

Remove initialization feature for MS VC++ compiler.
...@@ -23,6 +23,7 @@ ...@@ -23,6 +23,7 @@
* And all components related header files. * And all components related header files.
* 2012-12-23 Bernard fix the pthread initialization issue. * 2012-12-23 Bernard fix the pthread initialization issue.
* 2013-06-23 Bernard Add the init_call for components initialization. * 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" #include "components.h"
...@@ -45,35 +46,19 @@ static int rti_end(void) ...@@ -45,35 +46,19 @@ static int rti_end(void)
} }
INIT_EXPORT(rti_end,"7"); 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 * RT-Thread Components Initialization for board
*/ */
void rt_components_board_init(void) void rt_components_board_init(void)
{ {
#ifndef _MSC_VER
const init_fn_t *fn_ptr; 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)(); (*fn_ptr)();
NEXT_COMPONENT_FN(fn_ptr, __rt_init_rti_board_end);
} }
#endif
} }
/** /**
...@@ -81,12 +66,84 @@ void rt_components_board_init(void) ...@@ -81,12 +66,84 @@ void rt_components_board_init(void)
*/ */
void rt_components_init(void) void rt_components_init(void)
{ {
#ifndef _MSC_VER
const init_fn_t *fn_ptr; 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)(); (*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
}
...@@ -178,8 +178,12 @@ typedef rt_base_t rt_off_t; /**< Type for offset */ ...@@ -178,8 +178,12 @@ typedef rt_base_t rt_off_t; /**< Type for offset */
/* initialization export */ /* initialization export */
#ifdef RT_USING_COMPONENTS_INIT #ifdef RT_USING_COMPONENTS_INIT
typedef int (*init_fn_t)(void); typedef int (*init_fn_t)(void);
#define INIT_EXPORT(fn, level) \ #ifdef _MSC_VER /* we do not support MS VC++ compiler */
const init_fn_t __rt_init_##fn SECTION(".rti_fn."level) = fn #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 #else
#define INIT_EXPORT(fn, level) #define INIT_EXPORT(fn, level)
#endif #endif
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册