LD链接脚本

news2024/11/28 12:42:39

1.LD链接脚本的简介

LD链接脚本的概念

  • LD链接器脚本在完整程序编译流程中的链接过程使用。
  • LD链接器脚本定义了程序各个程序段的存储分布,描述链接器如何将这些目标文件.o文件链接成一个输出可执行文件
  • LD链接器脚本与CPU的种类、MCU的内部存储器分布有关。

LD链接器脚本的使用

  • 第三方SDK例如Keil uvision:无需LD链接器脚本,只需在Options简单配置例如设置ROM区域和RAM区域在MCU内部的存储器使用地址,SDK就会自动配置程序各个段所在MCU内部存储器的位置。
  • 官方SDK STM32CUBEIDE:需要LD链接器脚本,但是一般无需用户参与编辑,SDK可以自动完成脚本的维护,同时用户也可以主动编辑脚本的内容。
  • linux-环境arm-gcc:需要用户手动配置LD链接脚本,这个LD链接脚本内容和上述第二种的LD链接脚本非常相似。
  • 一般对于MCU硬件开发和MCU验证阶段会涉及并使用LD链接脚本。而平时使用MCU单片机完成特定的功能,属于应用阶段,一般不太会使用到LD链接脚本

以ARM Cortex M3核STM32F103系列MCU为例。

2.LD链接器脚本的功能

LD链接器脚本的功能

  • 定义RAM区域和ROM区域的地址信息,包括首地址、长度。
  • 定义各个程序段在MCU内部存储器中的分布情况。
  • 定义复位程序的入口。

存储器地址信息的定义

  • 一般情况下,RAM区域指的是可读可写区域,ROM区域指的是只读区域。
  • RAM区域、ROM区域只是一个名称而已,真正要看的是他们这个地址的值。
  • ROM区域一般都是FLASH存储器,RAM区域一般都是内部SRAM。

存取区域地址信息的定义

  • MEMORY:对存储区域进行设置
  • 定义信息包括区域的首地址ORIGIN、大小LENGTH、读写权限(xrw可读可写可执行,rx可读可执行)
  • STM32F103系列,分为FLASH(属于ROM区域)和RAM区域。

存储区域地址信息的定义

  • 栈段的地址空间位于RAM区域的末尾,且由高地址往低地址生长。
  • estack代表栈段的首地址,其地址位RAM区域的首地址加上RAM区域的长度,即RAM区域的末地址。
  • 这里的Heap_Size指的是堆的大小,Stack_Size指的是栈的大小。

   

各段在存储区域的排布

  • 对各程序的段在存储区域的排布做了定义,包括TEXT段、RODATA段、DATA段、BSS段、堆栈段。
  • SECTIONS:设置程序中的各个段放在指定的地址空间,包括TEXT段、RODATA段、DATA段、BSS段、堆栈段等。
  • isr_vector段包含了是中断向量表信息,是在.S启动文件定义的。
  • 堆空间和栈空间可以合并,TEXT段和RODATA段可以合并。

代码分析

  • 点.代表当前地址,冒号:代表当前是哪一个程序的段。
  • SECTIONS部分中每一个程序的段都按照先后顺序依次在地址空间排布。
  • 大于号>代表存储在哪个区域里面。
  • ALIGN(4)代表4字节对齐,点.等于ALIGN(4)代表当前地址开始4字节对齐。
  • _extext=.这是一个赋值语句,把当前地址赋值给这个extext变量。
  • 截图部分:isr_vector段放在FLASH区域的首地址,其内容都是4字节地址对齐,TEXT段紧接着放在isr_vector段后面,其内容也是4字节对齐,etext变量的值为TEXT段的末地址。
  • >RAM AT>FLASH:该段存储于FLASH区域但是运行时加载至RAM区域。该加载操作是.S启动文件执行的。
  • 每当出现一个不同区域例如FLASH区域后出现RAM区域,则从该区域的首地址重新排布。
  • LOADADDR指的是加载后的地址,所以sidata指的是DATA段加载到RAM区域后的首地址。
  • user_heap_statck段不是真正的堆栈地址,这个是用来检查算上堆栈的大小后RAM区域的地址空间是否溢出即超出RAM区域边界。实际上真正使用的堆栈段位于RAM区域的结尾处。
  • SECTIONS内部完整含义:

        isr_vector段放在FLASH区域的首地址。TEXT段紧接着放在isr_vector段后面,RODATA段紧接放在TEXT段的后面,这三个段的内容都是4字节地址对齐。

      DATA段其内容也是4字节对齐,存储在FLASH区域紧接着RODATA的末尾,但是运行时被加载至的RAM区域的首地址。BSS段位于RAM区域紧接着加载后DATA段的末尾。

SECTIONS:

  etext变量的值为TEXT段的末地址

  sdata为DATA段的首地址

  edata为DATA的末地址

  sbss为BSS段存储的首地址

  ebss为BSS段存储末地址

  sidata为DATA段被加载到RAM区域后的首地址

复位程序入口

  •    ENTRY用于指定程序运行的入口,默认是Reset_Handler.

  

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

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

相关文章

华为---企业WLAN组网基本配置示例---AC+AP组网

ACAP组网所需的物理条件 1、无线AP---收发无线信号; 2、无线控制器(AC)---用来控制管理多个AP; 3、PoE交换机---能给AP实现网络连接和供电的交换机; 4、授权:默认AC管理的AP数量有限,买授权才能管控更多AP。 WLAN创建…

思维模型 峰终定律

本系列文章 主要是 分享 思维模型,涉及各个领域,重在提升认知。 1 峰-终定律的应用 1.1 迪士尼游乐园 迪士尼乐园采用了多种策略来创造令人难忘的体验,从而遵循峰终定律的原则。具体如下: 迪士尼乐园的入口设计和服务体验&…

E047-论坛漏洞分析及利用-针对Wordpress论坛进行信息收集与漏洞扫描的探索

任务实施: E047-论坛漏洞分析及利用-针对Wordpress论坛进行信息收集与漏洞扫描的探索 任务环境说明: 服务器场景:p9_kali-6(用户名:root;密码:toor) 服务器场景操作系统:Kali Li…

零代码编程:用ChatGPT批量下载谷歌podcast上的播客音频

谷歌podcast有很多播客音频,如何批量下载到电脑呢? 以这个播客为例: https://podcasts.google.com/feed/aHR0cHM6Ly9oYWRhcnNoZW1lc2guY29tL2ZlZWQvcG9kY2FzdC8?saX&ved0CAkQlvsGahcKEwi4uauWsvKBAxUAAAAAHQAAAAAQAg 查看网页源代码&a…

【LeetCode刷题(数据结构与算法)】:二叉树的后序遍历

给你一棵二叉树的根节点root 返回其节点值的后序遍历 示例 1: 输入:root [1,null,2,3] 输出:[3,2,1] 示例 2: 输入:root [] 输出:[] 示例 3: 输入:root [1] 输出:[1]…

智慧公厕厂家,解读智慧厕所的全面功能应用

近年来,随着城市化进程的加速,智慧公厕的建设与发展成为了城市管理的重要一环。作为城市的门面和城市基础设施的重要组成部分,智慧公厕不仅能够满足人们基本的生理需求,更能提升城市形象和居民生活品质。那么,智慧公厕…

堆专题4 堆排序

题目: 样例: 输入 5 2 8 5 1 3 输出 1 2 3 5 8 思路: 由题意,堆的排序,就是结合向下或向上调整的方式,调整堆顺序,全部的各个部分都变为 顶堆形式。不同的是,由于我们是顶堆原理&a…

学信息系统项目管理师第4版系列28_组织级项目管理和量化项目管理

1. OPM 1.1. 旨在确保组织开展正确项目并合适地分配关键资源 1.1.1. 有助于确保组织的各个层级都了解组织的战略愿景、实现愿景的措施、组织目标以及可交付成果 1.2. 业务评估是建立OPM框架的必要组件 1.3. OPM3 是组织级项目管理成熟度模型,可用于评估组织项目…

华为OD机考算法题:开心消消乐

题目部分 题目开心消消乐难度易题目说明给定一个 N 行 M 列的二维矩阵,矩阵中每个位置的数字取值为 0 或 1,矩阵示例如: 1 1 0 0 0 0 0 1 0 0 1 1 1 1 1 1 现需要将矩阵中所有的 1 进行反转为 0,规则如下: 1) 当点击一…

互联网Java工程师面试题·Java 总结篇·第一弹

目录 1、面向对象的特征有哪些方面? 2、访问修饰符 public,private,protected,以及不写(默认)时的区别? 3、String 是最基本的数据类型吗? 4、float f3.4;是否正确? 5、short s1 1; s1 s1 1;有错吗…

Deno 下一代JavaScript运行时

目录 1、简介 2、Deno 的特点 3、Deno 和 Node 的区别 4、TypeScript开箱即用 5、内置的基本开发工具 独立可执行文件 测试运行器 代码格式化程序 代码linter 6、专为云而建 7、从浏览器到后端的一致代码 TC39 WinterCG 8、高性能联网 9、数百万个社区模块 10、相关框架 1、简介…

Stream流中的 distinct()方法

去除流中重要的元素。依赖(hashCode和equals方法) Stream流中无法直接修改集合、数组中的数据 package com.csdn.streampractice; import java.util.ArrayList; import java.util.Collections; import java.util.List; public class StreamTest {public …

初级篇—第八章精讲MySQL数据类型

文章目录 MySQL数据类型常见的属性字符集设置数据库的字符设置表的字符集设置字段的字符集设置 整型数据类型可选属性MUNSIGNEDZEROFILL 如何选择? 浮点类型FLOAT 和 DOUBLE 这两种数据类型的区别是啥呢?为什么浮点数类型的无符号数取值范围,…

使用js获取选中的dom元素 并改变选中(有序dom)的状态

一个效果图&#xff0c;一段代码&#xff0c; 就这样吧。 <template><!-- <el-checkbox v-model"">开启双向</el-checkbox> --><divref"checkListRef"mouseup"mouseupCon"mousedown"mousedownCon"mouseov…

【MySQL】深入了解索引的底层逻辑结构

文章目录 主键排序一. InnoDB的索引结构1. 单个page2. 多个page 二. 为什么选择B树三. 聚簇索引和非聚簇索引结束语 主键排序 我们创建一个user表&#xff0c;并乱序插入数据 mysql> create table if not exists user(-> id int primary key,-> age int not null,-&…

【AI视野·今日NLP 自然语言处理论文速览 第五十四期】Fri, 13 Oct 2023

AI视野今日CS.NLP 自然语言处理论文速览 Fri, 13 Oct 2023 Totally 75 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Computation and Language Papers Tree-Planner: Efficient Close-loop Task Planning with Large Language Models Authors Mengkang Hu, Yao M…

比特听命:补码的产生过程与整数在计算机中的存储

文章目录 参考环境声明八位二进制加法器八进制数值 原码概念正负数与零正数与负数的运算 反码概念一步之遥 补码概念唯一的零加法运算 补码的优缺点优点简化算术运算一眼辨别正负性运算过程中无需对符号位进行处理 缺点不易阅读 参考 项目描述搜索引擎Bing、GoogleAI 大模型文…

c#设计模式-行为型模式 之 访问者模式

&#x1f680;简介 封装一些作用于某种数据结构中的各元素的操作&#xff0c;它可以在不改变这个数据结构的前提下定义作用于这些元素的新的操作。 访问者模式包含以下主要角色 : 抽象访问者&#xff08;Visitor&#xff09;角色&#xff1a;定义了对每一个元素 &#xff08;E…

英语——语法——从句——句型和句子成分——笔记

老师导言&#xff1a;易于理解。 三种句型&#xff1a;1、主系表&#xff1b;2.主谓*&#xff1b;3.there be 句型&#xff1a;句子构成的形式。句子用于相互沟通&#xff0c;需要表达自己意思&#xff0c;句子中就存在一个主语&#xff0c;一般对主语&#xff08;主要描述对象…

4.Mask R-CNN/YOLOV8/RTMDET三种实例分割方法推理逻辑对比

文章目录 Mask R-CNN/YOLOV8/RTMDET三种实例分割方法推理逻辑对比Mask R-CNNYOLOV5/8实例分割方法RTMDet中的实例分割 欢迎访问个人网络日志&#x1f339;&#x1f339;知行空间&#x1f339;&#x1f339; Mask R-CNN/YOLOV8/RTMDET三种实例分割方法推理逻辑对比 实例分割是同…