为了看的更清楚,我把代码重新粘一下
[C] 纯文本查看 复制代码 void do_init_call(void)
{
extern initcall_t __initcall_start[];
extern initcall_t __initcall_end[];
initcall_t *start = __initcall_start;
initcall_t *end = __initcall_end;
initcall_t *fn;
for (fn = start; fn < end; fn++)
{
usb_printf("initcall fn 0x%x\r\n", fn);
(*fn)();
}
}
[C] 纯文本查看 复制代码 #define __used __attribute__((__used__))
typedef void (*initcall_t)(void);
#define __define_initcall(fn, id) \
static const initcall_t __initcall_##fn##id __used \
__attribute__((__section__("initcall" #id "init"))) = fn;
#define pure_initcall(fn) __define_initcall(fn, 0) //可用作系统时钟初始化
#define fs_initcall(fn) __define_initcall(fn, 1) //tick和调试接口初始化
#define device_initcall(fn) __define_initcall(fn, 2) //驱动初始化
#define late_initcall(fn) __define_initcall(fn, 3) //传感器初始化 |