C文件:
/*****************************************************************************************************************************/
#include "ll_autoinit.h"
/*****************************************************************************************************************************/
__attribute__ ( ( used ) ) __attribute__ ( ( section ( ".autoinit.0" ) ) ) struct ll_autoinit_t autoinit_head ;
__attribute__ ( ( used ) ) __attribute__ ( ( section ( ".autoinit.9" ) ) ) struct ll_autoinit_t autoinit_tail ;
/*****************************************************************************************************************************/
void ll_autoinit_init ( void )
{
struct ll_autoinit_t * init = ( struct ll_autoinit_t * ) & autoinit_head ;
for ( init = init + 1; init < ( struct ll_autoinit_t * ) & autoinit_tail ; init++ )
{
init->cb_init();
}
}
/*****************************************************************************************************************************/
H文件:
#ifndef autoinit_h
#define autoinit_h
/*****************************************************************************************************************************/
#include <stdint.h>
/******************************************************************************************************************************
* 功 能 : autoinit操作对象结构体
******************************************************************************************************************************/
struct ll_autoinit_t
{
const char * name ;
void ( * cb_init ) ( void ) ;
} ;
/******************************************************************************************************************************
* 功 能 : 加载表格(BOARD)
******************************************************************************************************************************/
#define LL_LOAD_AUTOINIT_BOARD(name,init) \
__attribute__ ( ( used ) ) __attribute__ ( ( section ( ".autoinit.1" ) ) ) \
struct ll_autoinit_t autoinit_board_##name = { #name ,init} ;
/******************************************************************************************************************************
* 功 能 : 加载表格(MODULE)
******************************************************************************************************************************/
#define LL_LOAD_AUTOINIT_MODULE(name,init) \
__attribute__ ( ( used ) ) __attribute__ ( ( section ( ".autoinit.2" ) ) ) \
struct ll_autoinit_t autoinit_module_##name = { #name ,init} ;
/******************************************************************************************************************************
* 功 能 : 加载表格(APP)
******************************************************************************************************************************/
#define LL_LOAD_AUTOINIT_APP(name,init) \
__attribute__ ( ( used ) ) __attribute__ ( ( section ( ".autoinit.3" ) ) ) \
struct ll_autoinit_t autoinit_app_##name = { #name ,init} ;
/*****************************************************************************************************************************/
void ll_autoinit_init ( void ) ;
/*****************************************************************************************************************************/
#endif
</font>
|