mirror of
https://github.com/RT-Thread/rt-thread.git
synced 2026-09-21 02:06:14 +08:00
Add component initialization.
This commit is contained in:
@@ -12,86 +12,71 @@
|
||||
* 2012-09-20 Bernard Change the name to components.c
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#include "components.h"
|
||||
|
||||
static int rti_start(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
INIT_EXPORT(rti_start, "0");
|
||||
|
||||
static int rti_board_end(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
INIT_EXPORT(rti_board_end, "1.post");
|
||||
|
||||
static int rti_end(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
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)
|
||||
{
|
||||
const init_fn_t* fn_ptr;
|
||||
|
||||
for (fn_ptr = &__rt_init_rti_start; fn_ptr < &__rt_init_rti_board_end; )
|
||||
{
|
||||
(*fn_ptr)();
|
||||
NEXT_COMPONENT_FN(fn_ptr, __rt_init_rti_board_end);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* RT-Thread Components Initialization
|
||||
*/
|
||||
void rt_components_init(void)
|
||||
{
|
||||
#ifdef RT_USING_MODULE
|
||||
rt_system_module_init();
|
||||
#endif
|
||||
const init_fn_t* fn_ptr;
|
||||
|
||||
#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
|
||||
|
||||
return;
|
||||
for (fn_ptr = &__rt_init_rti_board_end; fn_ptr < &__rt_init_rti_end; )
|
||||
{
|
||||
(*fn_ptr)();
|
||||
NEXT_COMPONENT_FN(fn_ptr, __rt_init_rti_end);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -77,9 +77,14 @@ extern void lwip_system_init(void);
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Initializes board routine in RT-Thread.
|
||||
*/
|
||||
void rt_components_board_init(void);
|
||||
|
||||
/**
|
||||
* Initializes components in RT-Thread
|
||||
* notes: this function must be invoked in thread
|
||||
* notes: this function must be invoked in Init Thread
|
||||
*/
|
||||
void rt_components_init(void);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user