【ARMv8M Cortex-M33 系列 5 -- RT-Thread .rti_fn 段简介】

文章目录

    • .rti_fn 段的作用

.rti_fn 段的作用

在 RT-Thread 实时操作系统中,.rti_fn 代码段通常用于存放初始化函数。RT-Thread 的启动过程中包括了一系列的初始化步骤,这些初始化函数被分配到特定的代码段中,以便操作系统在启动时按照预定的顺序执行它们。

        /* section information for initial. */. = ALIGN(8);__rt_init_start = .;KEEP(*(SORT(.rti_fn*)))__rt_init_end = .;

RT-Thread 链接脚本中的 keep(*(sort(.rti_fn*))) 是一个 GNU 链接器指令,用于确保链接过程中保留 .rti_fn 段中的所有内容,并且防止链接器优化掉未被引用的部分。这里进行了详细的介绍:

  1. .rti_fn 段的作用.rti_fn 段是 RT-Thread 系统在链接脚本中定义用来存放初始化函数的代码段。开发者可以将特定的初始化函数放入这个段中,这样做的好处是,系统可以在启动时自动按顺序调用它们,而无需显式地在代码中调用初始化函数。

  2. keep()keep() 是链接器指令的一部分,它告诉链接器保留指定的节(section),即使这些节中的符号在程序中未被直接引用。通常,如果链接器检测到某些符号未被使用,它可能会在最终的可执行文件中删除这些符号,以减小代码大小。使用 keep() 可以防止这种情况发生。

  3. (sort(.rti_fn)):星号(*)是通配符,它指示链接器包括所有以 .rti_fn 开头的节。sort() 函数将这些节按照字母顺序进行排序。排序能确保初始化函数按照特定的顺序被执行,这在某些情况下可能很重要,例如,当一些初始化函数必须在其他函数之前运行时。

  4. 链接脚本中的使用:在 RT-Thread 的链接脚本中,使用 keep(*(sort(.rti_fn*))) 通常位于输出节(output section)的定义中,它确保所有 .rti_fn 初始化函数都被包含在最终的可执行或二进制文件中,并按正确的顺序执行。

例如,在 RT-Thread 的链接脚本中,你可能会看到类似这样的段落:

.init_array : 
{ __preinit_array_start = .; KEEP(*(.preinit_array)) __preinit_array_end = .;__init_array_start = .; KEEP(*(SORT(.init_array.*))) KEEP(*(.init_array)) __init_array_end = .; KEEP(*(SORT(.rti_fn*))) /* 这是关键的部分 */ } 

这段代码定义了 .init_array,这是初始化函数数组的一部分,并告诉链接器保留 .rti_fn 段中排序后的所有函数。因此,当操作系统启动并执行初始化函数时,它会按照这里指定的顺序来执行位于 .rti_fn 段中的函数。

通过这种机制,RT-Thread 可以提供一个灵活、可扩展的初始化过程,允许开发人员和模块作者注册自定义的初始化代码,而无需修改系统启动代码本身。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/640268.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【动态规划】【C++算法】801. 使序列递增的最小交换次数

作者推荐 【动态规划】【广度优先搜索】【状态压缩】847 访问所有节点的最短路径 本文涉及知识点 动态规划汇总 数组 LeetCode801使序列递增的最小交换次数 我们有两个长度相等且不为空的整型数组 nums1 和 nums2 。在一次操作中,我们可以交换 nums1[i] 和 num…

路飞项目--03

二次封装Response模块 # drf提供的Response,前端想接收到的格式 {code:xx,msg:xx} 后端返回,前端收到: APIResponse(tokneasdfa.asdfas.asdf)---->{code:100,msg:成功,token:asdfa.asdfas.asdf} APIResponse(code101,msg用户不存在) ---…

学习笔记-李沐动手学深度学习(一)(01-07,概述、数据操作、tensor操作、数学基础、自动求导)

个人随笔 第三列是 jupyter记事本 官方github上啥都有(代码、jupyter记事本、胶片) https://github.com/d2l-ai 多体会 【梯度指向的是值变化最大的方向】 符号 维度 (弹幕说)2,3,4越后面维度越低 4…

Java 面向对象案例 02 (黑马)

代码: public class foodTest {public static void main(String[] args) {//1、构建一个数组food[] arr new food[3];//2、创建三个商品对象food f1 new food("apple","123",3.2,500);food f2 new food("pear","456",4…

临时工说:AI 人工智能化对于DBA 的工作的影响

这开头还是介绍一下群,如果感兴趣PolarDB ,MongoDB ,MySQL ,PostgreSQL ,Redis, Oceanbase, Sql Server等有问题,有需求都可以加群群内,可以解决你的问题。加群请联系 liuaustin3 ,(共1900人左右 1 2 3 4 5&#xf…

ChatGPT:关于 OpenAI 的 GPT-4工具,你需要知道的一切

ChatGPT:关于 OpenAI 的 GPT-4工具,你需要知道的一切 什么是GPT-3、GPT-4 和 ChatGPT?ChatGPT 可以做什么?ChatGPT-4 可以做什么?ChatGPT 的费用是多少?GPT-4 与 GPT-3.5 有何不同?ChatGPT 如何…

开源堡垒机JumpServer本地安装并配置公网访问地址

文章目录 前言1. 安装Jump server2. 本地访问jump server3. 安装 cpolar内网穿透软件4. 配置Jump server公网访问地址5. 公网远程访问Jump server6. 固定Jump server公网地址 前言 JumpServer 是广受欢迎的开源堡垒机,是符合 4A 规范的专业运维安全审计系统。JumpS…

HBuilderx发布苹果的包需要注意什么

在HBuilderX中发布苹果的包,需要注意以下几点: 开发者账号注册:在发布应用到App Store之前,需要先注册一个苹果开发者账号。注册过程较为繁琐,需要提供个人信息并支付年费。应用标识和证书:在发布iOS应用之…

ONLYOFFICE服务器无法连接,请联系管理员问题解决

1、现象 部署好了nextcloud和onlyoffice后,新建文本文档报错ONLYOFFICE服务器无法连接,请联系管理员。 用快捷键“F12”进入控制台,点开错误提示栏,找到有“api.js“文件,“https://ONLYOFFICED的地址/web-apps/apps/…

书法AI全自动切字+识别算法2.0版发布,草书篆书行书楷书识别准确率超过90%,覆盖书法单字30万张

我们开发的业界识别最准覆盖作品最全的书法AI小程序上线了 书法AI全自动切字识别算法2.0版发布,草书篆书行书楷书识别准确率超过90%,准确率甩百度OCR一条街,覆盖书法单字30万张,遥遥领先同行 我们还可为客户提供书法AI全自动切字a…

借助文档控件Aspose.Words,将 Word DOC/DOCX 转换为 TXT

在文档处理领域,经常需要将 Word 文档转换为更简单的纯文本格式。无论是出于数据提取、内容分析还是兼容性原因,将 Word(.doc、.docx)文件转换为纯文本(.txt)的能力对于开发人员来说都是一项宝贵的技能。在…

C++之类的声明

qwidget.h文件部分如下​: class QLayout;class QWSRegionManager;class QStyle;class QAction;class QVariant;class QWindow;class QActionEvent;class QMouseEvent;class QWheelEvent;class QHoverEvent;class QKeyEvent;class QFocusEvent;class QPaintEvent;c…

87230系列USB连续波功率探头

01 87230 USB连续波功率探头 产品综述: 87230/87231/87232/87233系列USB功率探头是一款基于USB2.0全速/高速自适应接口的二极管检波式功率探头,内部采用高性能处理芯片,通过各种校准和补偿技术,使得探头具有频率范围宽、功率动…

基于SpringBoot的民宿预定管理系统 JAVA简易版

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 用例设计2.2 功能设计2.2.1 租客角色2.2.2 房主角色2.2.3 系统管理员角色 三、系统展示四、核心代码4.1 查询民宿4.2 新增民宿4.3 新增民宿评价4.4 查询留言4.5 新增民宿订单 五、免责说明 一、摘要 1.1 项目介绍 基于…

python面试题大全(一)

文件操作 1. 大文件读取问题 有一个jsonline格式的文件file.txt大小约为10K,如何读取内容? #! -*-conding: UTF-8 -*- # 2024/1/19 16:46def get_lines():with open(file.txt, rb) as f:return f.readlines()if __name__ __main__:for line in get_l…

如何在CentOS8使用宝塔面板本地部署Typecho个人网站并实现公网访问【内网穿透】

文章目录 前言1. 安装环境2. 下载Typecho3. 创建站点4. 访问Typecho5. 安装cpolar6. 远程访问Typecho7. 固定远程访问地址8. 配置typecho 前言 Typecho是由type和echo两个词合成的,来自于开发团队的头脑风暴。Typecho基于PHP5开发,支持多种数据库&#…

重拾计网-第四弹 计算机网络性能指标

ps:本文章的图片内容来源都是来自于湖科大教书匠的视频,声明:仅供自己复习,里面加上了自己的理解 这里附上视频链接地址:1.5 计算机网络的性能指标(1)_哔哩哔哩_bilibili ​​​ 目录 &#x…

有意思的问题

一个教授、一个助教、一个数字设计专业的学生和一个新生需要在黑夜里经过一座摇摇晃晃的桥。这座桥很不稳固,每次只能有两个人通过。他们只有一把火炬,而且桥的跨度太大无法把火炬扔回来,因此必须有人要把火炬拿回来。新生过桥需要1分钟&…

#Uniapp:引入fonts目录结构全局样式启动模式全局变量

uni-app 运行到微信开发者工具需要注意 小程序路径需要配置,小程序端口需要开启 目录结构 pages // 存放页面static // 静态资源uni_modules // 文件夹:用于存放 uniapp 项目的各种依赖文件。unpackage // 打包文件目录App.vue // 根组件main.js //…

最全笔记软件盘点!你要的笔记神器都在这里:手写笔记、知识管理、文本笔记、协作笔记等!

在当今的信息化社会中,人们对信息的处理速度越来越快,从工作到生活,我们都面临着大量信息的冲击。在这样的环境下,一个能够帮助我们管理、整理和储存信息的好工具显得尤为重要,而笔记软件恰恰可以满足这些需求。 在选…