RTT에서의 구성 초기화

11500 단어
/* board init routines will be called in board_init() function */
#define INIT_BOARD_EXPORT(fn)           INIT_EXPORT(fn, "1")

/* pre/device/component/env/app init routines will be called in init_thread */
/* components pre-initialization (pure software initilization) */
#define INIT_PREV_EXPORT(fn)            INIT_EXPORT(fn, "2")
/* device initialization */
#define INIT_DEVICE_EXPORT(fn)          INIT_EXPORT(fn, "3")
/* components initialization (dfs, lwip, ...) */
#define INIT_COMPONENT_EXPORT(fn)       INIT_EXPORT(fn, "4")
/* environment initialization (mount disk, ...) */
#define INIT_ENV_EXPORT(fn)             INIT_EXPORT(fn, "5")
/* appliation initialization (rtgui application etc ...) */
#define INIT_APP_EXPORT(fn)             INIT_EXPORT(fn, "6")

 
#define INIT_EXPORT(fn, level)  RT_USED const init_fn_t __rt_init_##fn SECTION(".rti_fn."level) = fn

 
/*
 * Components Initialization will initialize some driver and components as following
 * order:
 * rti_start         --> 0
 * BOARD_EXPORT      --> 1
 * rti_board_end     --> 1.end
 *
 * DEVICE_EXPORT     --> 2
 * COMPONENT_EXPORT  --> 3
 * FS_EXPORT         --> 4
 * ENV_EXPORT        --> 5
 * APP_EXPORT        --> 6
 *
 * rti_end           --> 6.end
 *
 * These automatically initialization, the driver or component initial function must
 * be defined with:
 * INIT_BOARD_EXPORT(fn);
 * INIT_DEVICE_EXPORT(fn);
 * ...
 * INIT_APP_EXPORT(fn);
 * etc.
 */
static int rti_start(void)
{
    return 0;
}
INIT_EXPORT(rti_start, "0");

static int rti_board_start(void)
{
    return 0;
}
INIT_EXPORT(rti_board_start, "0.end");

static int rti_board_end(void)
{
    return 0;
}
INIT_EXPORT(rti_board_end, "1.end");

static int rti_end(void)
{
    return 0;
}
INIT_EXPORT(rti_end, "6.end")

 
// ld 
SECTIONS
{
    .text :
    {
        ...
        /* section information for initial. */
        . = ALIGN(4);
        __rt_init_start = .;
        KEEP(*(SORT(.rti_fn*)))
        __rt_init_end = .;
       ....
    } > CODE = 0
// map 
  *(SORT(.rti_fn*))
 .rti_fn.0      0x0806a968        0x4 build\kernel\src\components.o
                0x0806a968                __rt_init_rti_start
 .rti_fn.0.end  0x0806a96c        0x4 build\kernel\src\components.o
                0x0806a96c                __rt_init_rti_board_start
 .rti_fn.1      0x0806a970        0x4 build\drivers\drv_sdram.o
                0x0806a970                __rt_init_stm32_hw_0_sdram_init
 .rti_fn.1      0x0806a974        0x4 build\drivers\usart.o
                0x0806a974                __rt_init_stm32_hw_usart_init
 .rti_fn.1.end  0x0806a978        0x4 build\kernel\src\components.o
                0x0806a978                __rt_init_rti_board_end
 .rti_fn.4      0x0806a97c        0x4 build\packages\SystemView-v2.52a\SystemView_Src\Config\SEGGER_SYSVIEW_RTThread.o
                0x0806a97c                __rt_init_rt_trace_init
 .rti_fn.4      0x0806a980        0x4 build\kernel\components\libc\compilers
ewlib\libc.o
0x0806a980 __rt_init_libc_system_init .rti_fn.6 0x0806a984 0x4 build\drivers\drv_lcd.o 0x0806a984 __rt_init_stm32_hw_lcd_init .rti_fn.6 0x0806a988 0x4 build\kernel\components\finsh\shell.o 0x0806a988 __rt_init_finsh_system_init .rti_fn.6 0x0806a98c 0x4 build\packages\LittlevGL2RTT-v0.0.1\example\littlevgl2rtt_demo.o 0x0806a98c __rt_init_rt_lvgl_demo_init .rti_fn.6.end 0x0806a990 0x4 build\kernel\src\components.o 0x0806a990 __rt_init_rti_end 0x0806a994 __rt_init_end = . 0x0806a994 . = ALIGN (0x4) 0x0806a994 . = ALIGN (0x4) 0x0806a994 _etext = . 0x0806a994 __exidx_start = .

 
void rt_components_board_init(void)//INIT_BOARD_EXPORT 
{
    const init_fn_t *fn_ptr;

    for (fn_ptr = &__rt_init_rti_board_start; fn_ptr < &__rt_init_rti_board_end; fn_ptr++)
    {
        (*fn_ptr)();
    }
}

/**
 * RT-Thread Components Initialization
 */
void rt_components_init(void) // INIT_BOARD_EXPORT 
{
    const init_fn_t *fn_ptr;

    for (fn_ptr = &__rt_init_rti_board_end; fn_ptr < &__rt_init_rti_end; fn_ptr ++)
    {
        (*fn_ptr)();
    }
}

 
다음으로 전송:https://www.cnblogs.com/Rainingday/p/10081179.html

좋은 웹페이지 즐겨찾기