当前位置: 首页 > news >正文

RT-Thread自动初始化机制

自动初始化机制是指初始化函数不需要被显示调用,只需要在函数定义处通过宏定义的方式进行申明,就会在系统启动过程中被执行。

int rt_hw_usart_init(void)
{rt_hw_serial_register(&serial1, "uart1",RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX,uart);
}
INIT_BOARD_EXPORT(rt_hw_usart_init); //使用组件自动初始化机制

INIT_BOARD_EXPORT(rt_hw_usart_init)表示使用自动初始化功能,按照这种方式,rt_hw_usart_init()函数就会被系统自动调用。

在这里插入图片描述
在系统启动流程图中,有两个函数rt_components_board_init()与rt_components_init(),其后的带底色方框内部的函数表示被自动初始化的函数,其中:

  1. “board init functions”为所有通过INIT_BOARD_EXPORT(fn)申明的初始化函数。
  2. “pre-initialization functions” 为所有通过 INIT_PREV_EXPORT(fn)申明的初始化函数。
  3. “device init functions” 为所有通过 INIT_DEVICE_EXPORT(fn) 申明的初始化函数。
  4. “components init functions” 为所有通过 INIT_COMPONENT_EXPORT(fn)申明的初始化函数。
  5. “enviroment init functions” 为所有通过 INIT_ENV_EXPORT(fn) 申明的初始化函数。
  6. “application init functions” 为所有通过 INIT_APP_EXPORT(fn)申明的初始化函数。

rt_components_board_init()函数执行的比较早,主要初始化相关硬件环境,执行这个函数时会遍历通过INIT_BOARD_EXPORT(fn)申明的初始化函数表,并调用各个函数。

rt_conponents_init()函数会在操作系统运行起来之后创建的main线程里被调用执行,这个时候硬件环境和操作系统已经初始化完成,可以执行应用相关代码。rt_components_init() 函数会遍历通过剩下的其他几个宏申明的初始化函数表。

RTT的自动初始化机制使用了自定义RTI符号段,将需要在启动时进行初始化的函数指针放到了该断中,形成一张初始化函数表,在系统启动过程中会遍历该表,并调用表中的函数,达到自动初始化的目的。

在这里插入图片描述

初始化函数主动通过这些宏接口进行申明,如INIT_BOARD_EXPORT(rt_hw_usart_init),链接器会自动收集所有被申明的初始化函数,放到RTI符号段,该符号段位于内存分布的RO段中,该 RTI 符号段中的所有函数在系统初始化时会被自动调用。

http://www.lryc.cn/news/147801.html

相关文章:

  • 在本地搭建Jellyfin影音服务器,支持公网远程访问影音库的方法分享
  • 强盛集团面试题实战(持续更新)
  • golang 协程的实现原理
  • go gin 参数绑定常用验证器
  • 多用户商城系统常见的安全性和数据保护措施有哪些?
  • 如何在WSL上导入任何Linux发行版
  • 汽车自适应巡航系统车距控制策略研究
  • 鸿蒙系列-如何更好地使用 ArkUI 的 Image 组件?
  • 机器学习简介[01/2]:简单线性回归
  • Kubernetes技术--k8s核心技术yaml资源编排
  • clickhouse-配置解释
  • 基于亚马逊云科技无服务器服务快速搭建电商平台——性能篇
  • LINQ详解(查询表达式)
  • 【DEVOPS】现状篇
  • Linux文件管理知识:查找文件(第二篇)
  • 医疗小程序:让服务更高效,用户体验更优化
  • C++11 std::transform函数使用说明
  • JavaScript-DOM查询
  • 大数据-玩转数据-Flink 水印
  • 【Apollo】阿波罗自动驾驶系统:驶向未来的智能出行(含源码安装)
  • 网络-Netty
  • 如何使用vue-smooth-dnd
  • 为AWS认证做好准备:一份全面的备考指南
  • 尚硅谷SpringMVC
  • django的简易的图书管理系统jsp书店进销存源代码MySQL
  • 力扣125. 验证回文串
  • 用WebStorm创建Mock数据
  • Python钢筋混凝土结构计算.pdf-已知弯矩确定混凝土梁截面尺寸
  • 【正点原子STM32连载】第二十四章 高级定时器PWM输入模式实验 摘自【正点原子】APM32F407最小系统板使用指南
  • Adapter Tuning Overview:在CV,NLP,多模态领域的代表性工作