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

这篇具有很好参考价值的文章主要介绍了【ARMv8M Cortex-M33 系列 5 -- RT-Thread .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 可以提供一个灵活、可扩展的初始化过程,允许开发人员和模块作者注册自定义的初始化代码,而无需修改系统启动代码本身。文章来源地址https://www.toymoban.com/news/detail-818194.html

到了这里,关于【ARMv8M Cortex-M33 系列 5 -- RT-Thread .rti_fn 段简介】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【ARMv8M Cortex-M33 系列 7.1 -- xPSR | CFSR | HFSR | BFAR | MMFAR 寄存器】

    请阅读 【嵌入式开发学习必备专栏 之 ARM Cortex-Mx专栏】 由于在RA4M2(Cortex-M33)移植RT-Thread OS的时候遇到了 Hardfault,不知道如何分析错误原因,后参考以前写的文章【ARM Cortex-M 系列 2.1 – RT-Thread Cortex-M7 异常处理及 hardfault 处理分析】 来查找原因。 在 ARM Cortex-M33 微控制器上

    2024年01月20日
    浏览(49)
  • 【ARMv8M Cortex-M33 系列 7.4 -- 如何使能 usagefault | memmange fault | bus fault 中断】

    请阅读 【嵌入式开发学习必备专栏 之 ARM Cortex-Mx专栏】 由于文章【ARMv8M Cortex-M33 系列 7.2 – HardFault 问题定位 1】 中提到了HardFault 的发生是由于其它异常所升级导致的,所以就需要调查下如何是能其它异常中断。 在 ARM Cortex-M33 核心上启用 UsageFault 、 MemManageFault 和 BusFault 异

    2024年01月20日
    浏览(46)
  • 【ARMv8M Cortex-M33 系列 7.3 -- EXC_RETURN 与 LR 及 PC 的关系详细介绍】

    请阅读 【嵌入式开发学习必备专栏 之 ARM Cortex-Mx专栏】 接着上篇文章:【ARMv8M Cortex-M33 系列 7.2 – HardFault 问题定位 1】,后面定位到是在 cortex-m33/context_gcc.S 执行完 BX Lr 之后就发生了 HardFault,通过JLink 发现 LR 的值为 0xfffffffd 所以又继续调查了 EXC_RETURN 的具体含义。 在 ARM

    2024年01月25日
    浏览(52)
  • 【ARM Cortex-M 系列 3 番外篇 -- ARMv6, ARMv7, ARMv8, ARMv9 架构差异及精简指令集 与 复杂指令集 介绍】

    上篇文章:ARM Cortex-M 系列 2.1 – RT-Thread Cortex-M7 异常处理及 hardfault 处理分析 ARM架构是一种处理器架构,全称为高级精简指令集计算机(Advanced RISC Machine)。它是英国ARM公司设计的一种精简指令集( RISC )处理器架构,和复杂指令集( CISC )处理器架构相对。 CISC 与 RISC 差异

    2024年02月08日
    浏览(45)
  • 【ARM Cortex-M 系列 1.1 -- Cortex-M33 与 M4 差异 详细介绍】

    请阅读 【嵌入式开发学习必备专栏 之 Cortex-Mx 专栏】 在移植 RT-Thread 到 瑞萨RA4M2(Cortex-M33)上时,遇到了hardfault 问题,最后使用了Cortex-M4中的调度相关的函数后,OS 可以正常调度了。所以这里做下 M33与 M4的关系梳理。 ARM Cortex-M33 和 Cortex-M4 都是 ARM 公司设计的32位RISC微处理

    2024年01月21日
    浏览(44)
  • 【ARM Cortex-M 系列 1 -- Cortex-M0, M3, M4, M7, M33 差异】

    请阅读 【ARM Coresight | AMBA BUS| Armv8/v9 | GCC 专栏导读】 下篇文章:ARM Cortex-M 系列 2 – CPU 之 Cortex-M7 介绍 Cortex-M0/M0+ 介绍 Cortex-M0 是 ARM 公司推出的一款微控制器(MCU)核心。这个核心是基于 ARMv6-M 架构设计的, 只支持 56 条指 令的小指令集,大部分指令是 16 位指令, 是 ARM Cor

    2024年02月17日
    浏览(44)
  • 【ARM Cortex-M 系列 1 -- Cortex-M0, M3, M4, M7, M33, M35P 差异】

    请阅读 【ARM Coresight | AMBA BUS| Armv8/v9 | GCC 专栏导读】 下篇文章:ARM Cortex-M 系列 2 – CPU 之 Cortex-M7 介绍 Cortex-M0/M0+ 介绍 Cortex-M0 是 ARM 公司推出的一款微控制器(MCU)核心。这个核心是基于 ARMv6-M 架构设计的, 只支持 56 条指 令的小指令集,大部分指令是 16 位指令, 是 ARM Cor

    2024年02月05日
    浏览(42)
  • NXP i.MX 8M Mini工业核心板硬件说明书(四核ARM Cortex-A53 + 单核ARM Cortex-M4,主频1.6GHz)

    创龙科技SOM-TLIMX8是一款基于NXP i.MX 8M Mini的四核ARM Cortex-A53 + 单核ARM Cortex-M4异构多核处理器设计的高端工业级核心板,ARM Cortex-A53(64-bit)主处理单元主频高达1.6GHz,ARM Cortex-M4实时处理单元主频高达400MHz。处理器采用14nm最新工艺,支持1080P60 H.264视频硬件编解码、1080P60 H.265视频硬

    2024年02月11日
    浏览(48)
  • NXP i.MX 8M Plus工业开发板硬件说明书( 四核ARM Cortex-A53 + 单核ARM Cortex-M7,主频1.6GHz)

    本文主要介绍创龙科技TLIMX8MP-EVM评估板硬件接口资源以及设计注意事项等内容。 创龙科技TLIMX8MP-EVM是一款基于NXP i.MX 8M Plus的四核ARM Cortex-A53 + 单核ARM Cortex-M7异构多核处理器设计的高性能工业评估板,由核心板和评估底板组成。ARM Cortex-A53(64-bit)主处理单元主频高达1.6GHz,ARM

    2024年02月11日
    浏览(86)
  • ARM 学习笔记2 初识Cortex-M33与STM32G4

    ARM Cortex-M系列处理器的差异与联系:【ARM Cortex-M 系列 1 – Cortex-M0, M3, M4, M7, M33 差异】 两本书籍的英文版和中文版 Definitive Guide to Arm® Cortex®-M23 and Cortex-M33 Processors Arm Cortex-M23和Cortex-M33微处理器权威指南 ST的介绍页 Arm® Cortex®-M33概述 STM32G474RE 采用STM32G474RE MCU的STM32 Nucleo-64开

    2024年01月25日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包