|
@@ -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"
|
|
|
|
|
|
-/**
|
|
|
- * RT-Thread Components Initialization
|
|
|
- */
|
|
|
-void rt_components_init(void)
|
|
|
+static int rti_start(void)
|
|
|
{
|
|
|
-#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
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+INIT_EXPORT(rti_start, "0");
|
|
|
|
|
|
- #ifdef RT_USING_DFS_UFFS
|
|
|
- dfs_uffs_init();
|
|
|
- #endif
|
|
|
+static int rti_board_end(void)
|
|
|
+{
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+INIT_EXPORT(rti_board_end, "1.post");
|
|
|
|
|
|
- #ifdef RT_USING_DFS_JFFS2
|
|
|
- dfs_jffs2_init();
|
|
|
- #endif
|
|
|
+static int rti_end(void)
|
|
|
+{
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+INIT_EXPORT(rti_end,"7");
|
|
|
|
|
|
- #ifdef RT_USING_DFS_ROMFS
|
|
|
- dfs_romfs_init();
|
|
|
- #endif
|
|
|
+#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)
|
|
|
|
|
|
- #ifdef RT_USING_DFS_DEVFS
|
|
|
- devfs_init();
|
|
|
- #endif
|
|
|
-#endif /* end of RT_USING_DFS */
|
|
|
+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 ++;
|
|
|
|
|
|
-#ifdef RT_USING_NEWLIB
|
|
|
- libc_system_init(RT_CONSOLE_DEVICE_NAME);
|
|
|
+ return (const init_fn_t*)ptr;
|
|
|
+}
|
|
|
#else
|
|
|
- /* the pthread system initialization will be initiallized in libc */
|
|
|
- #ifdef RT_USING_PTHREADS
|
|
|
- pthread_system_init();
|
|
|
- #endif
|
|
|
+#define NEXT_COMPONENT_FN(fn_ptr, end) fn_ptr++
|
|
|
#endif
|
|
|
|
|
|
-#ifdef RT_USING_RTGUI
|
|
|
- rtgui_system_server_init();
|
|
|
-#endif
|
|
|
+/**
|
|
|
+ * RT-Thread Components Initialization for board
|
|
|
+ */
|
|
|
+void rt_components_board_init(void)
|
|
|
+{
|
|
|
+ const init_fn_t* fn_ptr;
|
|
|
|
|
|
-#ifdef RT_USING_USB_HOST
|
|
|
- rt_usb_host_init();
|
|
|
-#endif
|
|
|
+ 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)
|
|
|
+{
|
|
|
+ const init_fn_t* fn_ptr;
|
|
|
|
|
|
- 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);
|
|
|
+ }
|
|
|
}
|
|
|
+
|