diff options
| author | Bernard Xiong <[email protected]> | 2021-04-02 18:37:29 +0800 |
|---|---|---|
| committer | GitHub <[email protected]> | 2021-04-02 18:37:29 +0800 |
| commit | a98d81ab9f8b8acb36bcc23f48cedb730de0e010 (patch) | |
| tree | 4cdab837ccf97b3b23fe21021e4e89c3ba2a0189 /include | |
| parent | 5b4ed5f4f18b1a05454a6390160a302c26a162fd (diff) | |
| parent | 015418fa9b1224b6219b4e5d25fb49b7a2e79f00 (diff) | |
Merge pull request #4559 from enkiller/0220-1044
[bsp][simulator] 支持自动初始化及用户 main 入口
Diffstat (limited to 'include')
| -rw-r--r-- | include/rtdef.h | 27 |
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 |
