56 lines
1.6 KiB
C
56 lines
1.6 KiB
C
/******************************************************************************
|
||
|
||
Copyright @2024 - 2044 Shenzhen dcenzix Technology Ltd.
|
||
|
||
******************************************************************************
|
||
@file cola_init.h
|
||
@brief 各个需要自动初始化的函数放到指定的段中,形成一张初始化函数表
|
||
@author xiexiongwu
|
||
@version V1.0
|
||
@date 2024年5月25日
|
||
|
||
******************************************************************************/
|
||
#ifndef __COLA_INIT_H__
|
||
#define __COLA_INIT_H__
|
||
|
||
/*----------------------------------------------*
|
||
* 宏定义 *
|
||
*----------------------------------------------*/
|
||
/* 修改后的宏定义(适配GCC) */
|
||
#define __used __attribute__((used)) // 简化属性语法
|
||
|
||
typedef void (*initcall_t)(void);
|
||
|
||
/* 重新定义段命名规则 */
|
||
#define __define_initcall(fn, level) \
|
||
static const initcall_t __initcall_##fn##level __used \
|
||
__attribute__((__section__(".initcall" #level ".init"))) = fn;
|
||
|
||
#define sysclk_initcall(fn) __define_initcall(fn, 0)
|
||
#define register_initcall(fn) __define_initcall(fn, 1)
|
||
#define bsp_initcall(fn) __define_initcall(fn, 2)
|
||
#define device_initcall(fn) __define_initcall(fn, 3)
|
||
#define app_initcall(fn) __define_initcall(fn, 4)
|
||
|
||
|
||
/*----------------------------------------------*
|
||
* 函数原型说明 *
|
||
*----------------------------------------------*/
|
||
|
||
#ifdef __cplusplus
|
||
#if __cplusplus
|
||
extern "C"{
|
||
#endif
|
||
#endif /* __cplusplus */
|
||
|
||
extern void do_init_call(void);
|
||
|
||
#ifdef __cplusplus
|
||
#if __cplusplus
|
||
}
|
||
#endif
|
||
#endif /* __cplusplus */
|
||
|
||
|
||
#endif /* __COLA_INIT_H__ */
|