summaryrefslogtreecommitdiff
path: root/include/rtdef.h
diff options
context:
space:
mode:
authortangyuxin <[email protected]>2021-03-31 21:38:19 +0800
committertangyuxin <[email protected]>2021-04-01 17:01:14 +0800
commit015418fa9b1224b6219b4e5d25fb49b7a2e79f00 (patch)
tree812b054e14ed7b8312925b54b81e9d6ac5d2c9cf /include/rtdef.h
parent08a4de57e2f5e2f0d770b569690616599eaaf5fe (diff)
[bsp][simulator] 支持自动初始化及用户 main 入口
Diffstat (limited to 'include/rtdef.h')
-rw-r--r--include/rtdef.h27
1 files changed, 26 insertions, 1 deletions
diff --git a/include/rtdef.h b/include/rtdef.h
index b936a33455..b368208175 100644
--- a/include/rtdef.h
+++ b/include/rtdef.h
@@ -210,7 +210,32 @@ typedef rt_base_t rt_off_t; /**< Type for offset */
#ifdef RT_USING_COMPONENTS_INIT
typedef int (*init_fn_t)(void);
#ifdef _MSC_VER /* we do not support MS VC++ compiler */
- #define INIT_EXPORT(fn, level)
+#pragma section("rti_fn$f",read)
+ #if RT_DEBUG_INIT
+ struct rt_init_desc
+ {
+ const char* level;
+ const init_fn_t fn;
+ const char* fn_name;
+ };
+ #define INIT_EXPORT(fn, level) \
+ const char __rti_level_##fn[] = level"__rt_init_"#fn; \
+ const char __rti_##fn##_name[] = #fn; \
+ __declspec(allocate("rti_fn$f")) \
+ RT_USED const struct rt_init_desc __rt_init_msc_##fn = \
+ {__rti_level_##fn, fn, __rti_##fn##_name};
+ #else
+ struct rt_init_desc
+ {
+ const char* level;
+ const init_fn_t fn;
+ };
+ #define INIT_EXPORT(fn, level) \
+ const char __rti_level_##fn[] = level"__rt_init_"#fn; \
+ __declspec(allocate("rti_fn$f")) \
+ RT_USED const struct rt_init_desc __rt_init_msc_##fn = \
+ {__rti_level_##fn, fn };
+ #endif
#else
#if RT_DEBUG_INIT
struct rt_init_desc