核心:RT-Thread 通过带优先级的宏定义,让初始化函数按序执行,解决依赖冲突问题。
一、核心逻辑
- 所有初始化宏均基于
INIT_EXPORT(fn, "优先级")封装,数字越小,初始化时机越早。 - 严格遵循"硬件→软件→驱动→组件→环境→应用"的启动顺序,适配层间依赖关系。
二、6个关键初始化宏详情表
| 宏定义 | 优先级 | 核心作用 | 典型使用场景 |
|---|---|---|---|
INIT_BOARD_EXPORT(fn) |
"1" | 板级硬件基础初始化 | 引脚配置、系统时钟初始化、外设底层使能 |
INIT_PREV_EXPORT(fn) |
"2" | 纯软件预初始化 | 数据结构初始化、算法库预处理、无硬件依赖的配置 |
INIT_DEVICE_EXPORT(fn) |
"3" | 硬件设备驱动初始化 | I2C/SPI 总线驱动、传感器驱动、外设功能初始化 |
INIT_COMPONENT_EXPORT(fn) |
"4" | 系统核心组件初始化 | 文件系统(DFS)、网络协议栈(LWIP)、GUI 库 |
INIT_ENV_EXPORT(fn) |
"5" | 运行环境配置初始化 | 挂载存储分区、设置系统环境变量、初始化日志路径 |
INIT_APP_EXPORT(fn) |
"6" | 上层应用业务初始化 | 创建应用线程、初始化业务逻辑、启动用户功能 |
三、使用注意事项表
| 注意点 | 具体说明 |
|---|---|
| 优先级不可随意修改 | 低优先级宏依赖高优先级宏的初始化结果,如驱动初始化(3)不能早于板级初始化(1) |
| 函数导出格式 | 直接通过宏包裹初始化函数即可,例:INIT_DEVICE_EXPORT(my_uart_init),无需手动调用 |
| 避免跨阶段依赖 | 某阶段初始化函数不可调用后一阶段的接口,如板级初始化中不能操作未初始化的驱动 |
| 多函数同优先级执行顺序 | 同优先级的初始化函数,执行顺序与代码中导出的顺序一致 |