RT-Thread 内核基础(四)

2024-01-09

自动初始化机制

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

例如在串口驱动中调用一个宏定义告知系统初始化需要调用的函数,代码如下:

int rt_hw_usart_init(void)
{
	...
	/* 注册串口1设备 */
	rt_hw_serail_regster(&serial1, "uart1", RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX, uart);
	return 0;
}
INIT_BOARD_EXPORT(rt_hw_usart_init);

示例代码最后的INIT_BOARD_EXPORT(rt_hw_usart_init)表示使用自动初始化功能,按照这种方式,rt_hw_usart_init()函数就会被系统自动调用,那么它是在哪里被调用的呢?

在这里插入图片描述
在系统启动流程图中,有两个函数:rt_conponents_board_init()与re_components_init(),其后的带底色方框内部的函数表示被自动初始化的函数,其中:
“board init functions” 为所有通过 INIT_BOARD_EXPORT(fn) 申明的初始化函数。

“pre-initialization functions” 为所有通过 INIT_PREV_EXPORT(fn)申明的初始化函数。

“device init functions” 为所有通过 INIT_DEVICE_EXPORT(fn) 申明的初始化函数。

“components init functions” 为所有通过 INIT_COMPONENT_EXPORT(fn)申明的初始化函数。

“enviroment init functions” 为所有通过 INIT_ENV_EXPORT(fn) 申明的初始化函数。

“application init functions” 为所有通过 INIT_APP_EXPORT(fn)申明的初始化函数。

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

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

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

用来实现自动初始化功能的宏接口定义详细描述如下表所示:

  1. BOARD_EXPORT:非常早期的初始化,此时调度器未开启
  2. PREV_EXPORT:主要是用于纯软件的初始化、没有太多依赖的函数
  3. DEVICE_EXPORT:外设驱动初始化相关,比如网卡设备
  4. COMPONENTS_EXPORT:组件初始化,比如文件系统或者LWIP
  5. ENV:系统环境初始化,比如挂载文件系统
  6. APP:应用初始化,比如GUI应用

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

RT-Thread 内核基础(四) 的相关文章

  • RT-Thread中AT组件连接ESP8266 模块

    应用 AT 组件连接 ESP8266 模块 本文介绍 智龙开发板 应用AT组件 连接 esp8266 模块 从而连接无线网络 参考官网 应用 AT 组件连接 ESP8266 模块 1 首先去除 lwip 2 连接硬件模块 连接到智龙开发板的
  • RT-Thread分析-对象容器实现与作用

    目录 1 前言 2 相关数据结构 2 1 对象 1 类型 2 数据结构 2 3 容器 1 数据结构 2 容器定义 object container 2 3 对象容器链接图 3 获取对象容器 rt object get information
  • Threadx 定时器timer

    文章目录 定时器管理结构 定时器链表 定时器激活链表 定时器工作原理 定时器API 定时器创建 tx timer create 删除定时器 tx timer delete 修改 tx timer change Threadx 操作系统定时器
  • STM32F4 RTC-Alarm 的使用(RT-Thread操作系统)

    文章目录 1 工程的创建和配置 1 1 CubeMX 的配置 1 1 1 时钟源的选择 1 1 2 Debug 引脚配置 1 1 3 控制台串口的配置 1 1 4 RTC的配置 1 1 5 时钟树配置 1 1 6 代码生成 1 2 RT T
  • Azure RTOS定价(ThreadX 等)

    Azure RTOS定价 Azure RTOS定价 https azure microsoft com zh cn pricing details rtos 使嵌入式 IoT 开发和连接变得轻松 Azure RTOS 是一种易于使用 经过市
  • RT-Thread 应用篇 — 在STM32L051上使用 RT-Thread (二、无线温湿度传感器 之 CubeMX配置)

    应用篇 在STM32L051上使用RT Thread 第二篇 使用STM32CubeMX 进行对应外设配置 同时做一些简单测试 目录 前言 一 使用 STM32CubeMX 配置 1 1 基础步骤 1 2 修改配置 1 3 踩坑记录 二 初
  • rtt下的adbd使用

    RTT 下的ADBD使用 1 引言 调试柿饼时 需要文件传输 由于智龙平台的RTT环境下USB还没有调试好 这里就使用ADB进行文件传输 找到了何元杰的帖子 并参考 rdb 建立 RTT与PC 的文件传输通道 2 使用环境 2 1 硬件平台
  • 基于stm32驱动bh1750光照传感器的一种超简单的编程方法

    基于stm32驱动bh2750光照传感器的一种超简单的编程方法 目录 基于stm32驱动bh1750光照传感器的一种超简单的编程方法 前言 一 搭载RT thread需要的环境 二 获取RT thread官方源码 并新建一个工程 三 下载b
  • 【导航】RT-Thread 学习专栏目录 【快速跳转】

    本文是 矜辰所致 的 RT Thread 记录专栏的内容导航 结合自己的学习应用过程的总结记录 有基础理论 有与FreeRTOS的比较 有实际项目 有应用总结 目录 前言 一 环境篇 二 内核篇 三 设备和驱动篇 四 组件软件包篇 五 应用
  • 快速应用RT-Thread IAP升级功能

    快速应用RT Thread IAP升级功能 参考官方文档 步骤一准备bootload APP项目设置及代码修改 下载RTT源码 修改main c 增加分区表配置文件 依据分区表的配置修改flash驱动 第一次烧录进单片机 修改分散加载文件
  • FreeRTOS-创建删除任务

    1 FreeRTOSConfig h文件 FreeRTOSConfig h配置文件作用 对FreeRTOS进行功能配置和裁剪 以及API函数的使能 相关的宏可以分为三大类 INCLUDE 配置FreeRTOS中可选的API函数 config
  • RT-Thread操作系统 AT组件源码分析(以 EC20 为例)

    文章目录 1 AT 组件 1 1 AT 组件调试信息级别设置 1 2 AT 命令打印使能设置 1 3 GPRS 网络注册状态检查 1 4 EC200x 是否能连接外网日志输出 1 5 AT 设备注册过程 1 6 AT 设备类注册过程 1 7
  • rttread-nano 使用记录:rt_kprintf函数格式化打印无法左对齐

    rttread nano 使用记录 rt kprintf函数格式化打印无法左对齐 今天用rt kprintf函数打印输出一个表格 为了表格好看每一列我都使用格式化参数 负号符号设置为了左对齐 但是发现无法打印 也无法打印浮点数 换成微库的p
  • RT-Thread记录(七、IPC机制之邮箱、消息队列)

    讲完了线程同步的机制 我们要开始线程通讯的学习 线程通讯中的邮箱消息队列也属于 RT Thread 的IPC机制 目录 前言 一 邮箱 1 1 邮箱控制块 1 2 邮箱操作 1 2 1 创建和删除 1 2 2 初始化和脱离 1 2 3 发送
  • 在 Windows 上对嵌入式软件进行原型设计和仿真

    我正在寻找用于原型设计 虚拟原型设计 模拟和测试桌面 Windows 上深度嵌入式 C 代码的工具和技术 包括构建由按钮 LED 和 LCD 显示器 分段和图形 组成的真实嵌入式前面板 我对可能的低级方法特别感兴趣 使用纯 C 代码和原始
  • 将 DKM 项目链接到内核映像 (VIP) 项目作为 VxWorks Workbench4 中的子项目/额外模块

    如何将 DKM 项目与内核映像 VIP 项目链接 加载 以便我可以从内核映像项目的 usrAppInit c 调用 DKM 项目 应用程序 的入口点函数 以在启动时自动启动应用程序 有人可以描述步骤或向我指出任何文档吗 将 DKM 项目添加
  • 操作系统内部机制学习

    切换线程时需要保存什么 函数需要保存吗 函数在Flash上 不会被破坏 无需保存 函数执行到了哪里 需要保存吗 需要保存 全局变量需要保存吗 全局变量在内存上 无需保存 局部变量需要保存吗 局部变量在栈里 也是在内存里 只要避免栈不会被破坏
  • BSP制作

    STM32系列驱动介绍 在RT Thread实时操作系统中 各种各样的设备驱动是通过一套I O设备管理框架来实现的 设备管理框架给上层应用提供了一套标准的设备操作API 开发者通过调用这些标准设备操作API 可以高效地完成和底层硬件外设的交
  • Micriμm μC/OS-III RTOS 中的分配和释放

    我们使用 Micrium 的 C OS III RTOS 和 Renesas 的 RX62N 我们构建了一个必须动态分配和释放数据的系统 我们发现了功能malloc and free 与 RTOS 配合得不好 然而 RTOS 为此提供了一个
  • 开始使用 Real Time Linux 编程的最佳方式是什么?

    虽然我用C实现了很多项目 但我对操作系统完全陌生 我在 Discovery board STM32 上尝试了实时 Linux 并得到了闪烁 LED 的正确结果 但我并没有真正理解整个过程 因为我只是按照步骤操作 并且无法在互联网上找到每个步

随机推荐

  • VPS计算深度解析:如何选择适合你需求的服务器配置

    在当今数字时代 无论是个人用户还是企业 都需要可靠的服务器来托管其网站 应用程序和数据 VPS已经成为一种受欢迎的托管解决方案 因为它提供了稳定性 安全性和性能的理想平衡 但是 在选择适合你需求的VPS服务器配置时 你需要考虑许多因素 本文
  • 又到年底了,你的年终总结写好了吗?

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 2k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • 软件测试开发/全日制/测试管理丨接口测试抓包与 Mock/接口自动化测试

    在软件开发中 接口测试是确保系统各个组件之间协同工作的重要环节 接口测试抓包与Mock以及接口自动化测试相结合 能够更全面 高效地验证接口的正确性 性能和稳定性 从而打造一个稳健的接口生态系统 接口测试抓包 接口测试抓包是一种通过监控和记录
  • 【计算机开题报告】家具销售库存管理信息系统

    一 选题的目的 意义及相关研究动态和自己的见解 随着当今社会信息化的发展 电子自动化办公越来越为各人所重视 它能有效地收集 处理各种信息 极大地提高了办事效率 而计算机技术各种软件工作平台不断的发展 又为电子自动化办公的实现提供了良好的前景
  • 热钱涌向线控底盘!XYZ全栈集成引领新风向

    在车身 底盘部分 中央计算 区域控制带动传统车控 底盘及动力控制ECU市场迎来新一轮技术升级和域融合窗口期 线控制动 转向及空气悬架 正在加速与智能驾驶融合并进一步提升驾乘体验 12月13 15日 2023 第七届 高工智能汽车年会暨高工金
  • 微信私密朋友圈被吐槽有BUG

    日前 大量网友在各社交媒体上讨论微信私密朋友圈出现 Bug 的话题 起因是跨年期间一个网友发布了一条 私密朋友圈 但不一会就收到朋友发来的信息 又偷偷发朋友圈了 估计此时网友可能已经 寒毛四起 汗流浃背了 经过和好友沟通得知 好友在刷朋友圈
  • 制作本地yum仓库

    root 192 cd etc yum repos d root 192 yum repos d ls redhat repo root 192 yum repos d vim rpm repo base name baseos gpgch
  • TS 36.211 V12.0.0-下行(3)-PDSCH/PMCH/PBCH/PCFICH

    本文的内容主要涉及TS 36 211 版本是C00 也就是V12 0 0
  • 视频语音翻译在线哪个工具好?看我推荐

    最近大家是不是也刷到不少去东北游玩的视频啦 作为一个南方人 看到那些视频里的鹅毛大雪真的好羡慕 不过我也看见了不少出国旅行的小伙伴 纷纷抱怨说自己的外语水平不够好 在国外连问个路都会磕磕绊绊 这个时候我就想到 那怎么不用软件实现语音翻译在线
  • 软件测试开发/全日制/测试管理丨性能测试

    性能测试是软件测试中的一项重要活动 旨在评估系统在不同条件下的性能 稳定性和可伸缩性 通过模拟实际用户负载 性能测试有助于发现潜在的性能瓶颈和优化空间 确保系统能够在各种情况下高效运行 性能测试的主要类型 负载测试 通过逐渐增加用户负载 测
  • 【python】神经网络

    构建神经网络的典型流程 1 定义一个拥有可学习参数的神经网络 2 遍历训练数据集 3 处理输入数据使其流经神经网络 4 计算损失值 5 将网络参数的梯度进行反向传播 6 以一定的规则更新网络的权重 卷积神经网络 pytorch自己写的 建议
  • AI大模型“重塑”智能座舱,这些新机会已经显现

    在AI大模型的浪潮下 智能座舱进入了升级新周期 根据 高工智能汽车研究院 数据显示 2023年1 10月 中控大屏 语音交互 车联网等的渗透率已经超过了70 在这其中 中控娱乐系统的前装标配渗透率已经超过90 过去几年 智能座舱主要是单一功
  • 【网络安全 | 子域名/信息收集】子域名挖掘方式总结(全网最详细)

    子域名的收集对于渗透测试而言 既能完善信息 又能扩大攻击面 本文介绍5种子域名挖掘方式 目录 1 子域名挖掘工具 2 第三方网站 3 搜索引擎 4 证书透明性发现子域名 5 DNS域传送漏洞发现子域名 1 子域名挖掘工具 本文分享
  • TS 36.211 V12.0.0-下行(2)-下行物理信道的通用结构

    本文的内容主要涉及TS 36 211 版本是C00 也就是V12 0 0
  • 【计算机开题报告】图书管理系统

    一 选题依据 简述国内外研究现状 生产需求状况 说明选题目的 意义 列出主要参考文献 国内外研究现状 国外研究现状 在很多发达国家 图书管理系统的应用和技术发展已经相对完善 并且还建立了数字图书馆 各方面的情况也非常成熟 而图书管理的应用价
  • Camtasia2024中文绿色版本下载安装详细步骤教程

    Camtasia2024是一款功能强大的屏幕录制和视频编辑软件 它可以帮助用户轻松地记录电脑屏幕上的任何操作 并可以将录制的视频进行编辑和制作成高质量的视频教程 演示文稿 培训课程等 Camtasia具有直观的界面和易于使用的工具 包括添加
  • 解锁数据之门Roxlabs全球住宅IP赋能海外爬虫与学术研究

    11 20云账房测试一面凉经 华为开奖啦 关于邮储的一些情况 维信金科一面 二面 hr面 我的导师太好了 上海维信金科 技术面试一 Java后端开发岗记录贴 维信金科正式批面经 软件技术领域就业大纲 1 公司分类 你裁掉这个应届生用了多长时
  • 某市公共资源交易网

    目标网站首页 aHR0cDovL2dnenkuendmd2IudGouZ292LmNu 分析页面 aHR0cDovL2dnenkuendmd2IudGouZ292LmNuL3h3engvaW5kZXhfMi5qaHRtbA 点击前URL h
  • TS 36.211 V12.0.0-下行(4)-PDCCH/EPDCCH/PHICH

    本文的内容主要涉及TS 36 211 版本是C00 也就是V12 0 0
  • RT-Thread 内核基础(四)

    自动初始化机制 自动初始化机制是指初始化函数不需要被显示调用 只需要在函数定义处通过宏定义的方式进行申明 就会在系统启动过程中被执行 例如在串口驱动中调用一个宏定义告知系统初始化需要调用的函数 代码如下 int rt hw usart in