自动初始化

1.自动初始化参考了RT-Thread的自动初始化,做了一些修改,这个适用在keil中,用在IAR中,需要把将rt_used做如下替换

//#define rt_used                     __attribute__((used))
#define rt_used                     __root

2.自动初始化.h文件(下面的代码都是keil适用)

#include "stdint.h"


#define rt_section(x)               __attribute__((section(x)))
#define rt_used                     __attribute__((used))


typedef void (*init_fn_t)(void);


#define INIT_EXPORT(fn, level)                                                       \
		rt_used const init_fn_t __Init_##fn rt_section(".rti_fn." level) = fn


#define __Function_AUTOInit_W25Qxx(fn)         	INIT_EXPORT(fn, "1.0")
#define __Function_AUTOInit_Flash(fn)         	INIT_EXPORT(fn, "1.1")
#define __Function_AUTOInit_Driver(fn)         	INIT_EXPORT(fn, "1.2")
#define __Function_AUTOInit_Command(fn)         INIT_EXPORT(fn, "1.3")
#define __Function_AUTOInit_Queue(fn)          	INIT_EXPORT(fn, "1.4")

		
		
void Function_AUTOInit(void);

3.自动初始化.c文件

/*********************************************************************
 * @fn      Function_AutoInit_Start
 *
 * @brief   自动初始化起始地址.
 *
 * @param   none
 *
 * @return  none
 */
static void Function_AutoInit_Start(void)
{

}
INIT_EXPORT(Function_AutoInit_Start, "0.end");


/*********************************************************************
 * @fn      Function_AutoInit_End
 *
 * @brief   自动初始化结束地址.
 *
 * @param   none
 *
 * @return  none
 */
static void Function_AutoInit_End(void)
{

}
INIT_EXPORT(Function_AutoInit_End, "1.end");


/*********************************************************************
 * @fn      Function_AUTOInit
 *
 * @brief   自动初始化.
 *
 * @param   none
 *
 * @return  none
 */
void Function_AUTOInit(void)
{
    volatile const init_fn_t *fn_ptr;

    for (fn_ptr = &__Init_Function_AutoInit_Start; fn_ptr < &__Init_Function_AutoInit_End; fn_ptr++)
    {
        (*fn_ptr)();
    }
}

4.例程

在初始化的时候调用Function_AUTOInit;

在每个需要初始化函数调用以下函数

static void Driver_Init(void)
{
	Driver_UART_Init_Config();
	Driver_LCD_Init();
	Driver_ui_setup(&mono_ui);
	Driver_ui_init(&mono_ui);
	mono_app_massage_init();
	Driver_Button_List_Init();
	Driver_Encoder_Init();
}
__Function_AUTOInit_Driver(Driver_Init);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值