RT-Thread 入门学习笔记 - 开机流程自动初始化与手动初始化

发布于 2021-04-06 22:50:59

前言

  • RT-Thread,提供自动初始化机制,也就是开机自动运行
  • RT-Thread的自动初始化,分为6个等级,可以查看rtdef.h文件
  • RT-Thread的同等级的多个自动初始化函数,执行次序无法控制
/* 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")

问题

  • 当系统的初始化函数很多时,部分函数执行与初始化有次序的依赖。
  • RT-Thread自动初始化的同一个等级中,初始化次序无法确定哪个在前,哪个在后,也就是各个初始化函数存在各个文件中,无法知道哪个函数先执行,哪个函数后执行

改为手动初始化

  • RT-Thread 自动初始化,依赖宏开关:RT_USING_COMPONENTS_INIT,只要没有这个宏开关,自动初始化机制就不工作,可以手动初始化。

其他方法

  • 可以继续使用RT-Thread的自动初始化功能,只是把各个初始化的函数,按次序,放在一个文件里,这样,编译器从上到下执行,用户可以手动调整初始化次序。
INIT_BOARD_EXPORT(key_gpio_init); /* 先执行 01 */
INIT_BOARD_EXPORT(drv_pm_hw_init); /* 02 */
INIT_BOARD_EXPORT(rt_hw_rtc_init); /* 03 */

总结

  • RT-Thread的自动初始化机制,可以灵活的使用。
  • 熟悉与掌握__attribute__的使用,代码段:section的使用。
0 条评论

发布
问题