S32DS中.ld(链接)文件学习

S32DS for ARM 2018.R1 链接文件(linker file)学习笔记 S32DS for ARM 2018.R1 链接文件(linker file)学习笔记 在S32DS for ARM 2018.R1自带的例程中有两个链接文件,分别为S32K1xx_flash.ld和S32K1xx_ram.ld,前者针对的是程序在flash中运行的链接文件,后者是在ram中运行程序所需要的链接文件。以下以S32K144的flash.ld文件为例,进行简单的分析 /* Entry ... 阅读详情
AI摘要

本文详细介绍了.LD文件在程序链接过程中的作用,包括合并section、符号解析和地址重定位。讲解了ENTRY、MEMORY、SECTIONS等关键命令,并展示了如何使用.ld文件指定函数和变量的内存地址。通过实例说明了如何创建自定义节并将变量和函数置于特定地址,同时指出了在指定地址时可能遇到的问题和解决方法。

一、.ld文件作用

程序代码(.s 和 .c)源文件会经过预编译、编译、汇编、链接最后生成目标可执行文件,.ld文件是作用在链接过程。

链接的作用是:

  1. 合并各个.obj文件的section,合并符号表,进行符号解析;

  1. 符号地址重定位;

  1. 生成可执行文件。

linker_flash.ld:Flash和SRAM内存分配,为Flash构建目标分配代码段和数据段;

linker_ram.ld:SRAM内存分配,为RAM构建目标分配代码段和数据段。

可以利用.ld文件将函数和变量放置到自定义的地址中。

二、文件讲解

1.常用关键词介绍

ENTRY命令:运行一个程序时第一个被执行到的指令的"入口点"。

MEMORY命令:内存块配置命令,一个连接脚本最多一个’MEMORY’命令。

SECTIONS命令:’段’命令,段中又包含多个’节’, SECTIONS命令告诉连接器如何把输入节映射到输出节, 如何把输入节放入到内存中。

KEEP()命令:防止垃圾收集机制把这个节排除在外,同时保证向量表在段中的位置处于最顶端。

ALTGN命令:以多少位对齐,例如ALTGN(4)表示以4位对齐。

.命令:一个点“.”可以用来获取当前内存地址。

*:‘’是一个通配符,可以与所有文件名匹配。例如表达式(.text)表示所有输入文件的.text输入段。

2..ld文件解析

按照常用关键词去解析.ld文件内容即可。

三、指定地址操作

注:无法直接将变量或函数直接存到绝对地址(指定地址语法见下),如:

__attribute__ ((at (0x10000000))) uint32_t value = 0x01;

会出现此警告:

表示‘at’后面的指定地址方式不支持,因此忽略掉了。

指定变量地址支持的语法语法:

__attribute__ ((section (".SectionName"))) uint32_t value=0x01;

因此需要自定义一个节用来存放变量或函数。

1.指定地址语法

1)将变量存放指定地址的语法(例如将变量‘uint32_t value’存放到‘standby_ram_data’节中):

__attribute__ ((section (".standby_ram_data"))) uint32_t value=0x01;

编译后.map文件:

2)将函数存放指定地址的语法(例如将函数‘main’存放到‘abcd’节中):

编译后.map文件:

2.自定义节

在linker_flash.ld文件中将int_sram拆分出一段并命名为standby_sram:

在sections{}中编写新的节

编译后在.map文件中能够看到自定义的节:

3.操作演示

在main.c文件中定义变量:

uint32_t value0 = 0x01;
uint32_t value1 = 0x02;
uint32_t zero0 = 0;
uint32_t zero1 = 1;

将初始值不为‘0’的变量放入‘standby_ram_data’节,初始值为‘0’的变量放入‘standby_ram_bss’节。

编译后.map文件:

在maun.c文件中定义函数:

int fun0(void)
{
    return (0U);
}
int fun1(void)
{
    return (0U);
}

将‘main()’、‘fun0()’、‘fun1()’放入‘abcd’节。

编译后.map文件:

单片机运行原理(含bss_data_text段,.ld链接文件,startup.S启动文件介绍) 程序代码(.s 和 .c)源文件会经过预编译、编译、汇编、链接最后生成目标可执行文件,.ld文件是作用在链接过程。链接的作用是:linker_flash.ld:Flash和SRAM内存分配,为Flash构建目标分配代码段和数据段;linker_ram.ld:SRAM内存分配,为RAM构建目标分配代码段和数据段。可以利用.ld文件将函数和变量放置到自定义的地址中。2 常用的关键词介绍ENTRY命令:运行一个程序时第一个被执行到的指令的"入口点"。MEMORY命令:内存块配置命令,一个连接脚本最多一个’MEMO 阅读详情

相关推荐

S32DS中链接文件及启动代码学习

文件夹中有linker_flash.ld文件和linker_ram.ld文件。Linker File称为链接文件,它是作用在链接过程。程序代码(.s 和 .c)源文件会经过预编译、编译、汇编、链接最后生成目标可执行文件;linker_flash.ld文件功能:Flash和SRAM内存分配,为Flash构建目标分配代码段和数据段;linker_ram.ld文件功能:SRAM内存分配,为RAM构建目标分配代码段和数据段。linker_flash.ld文件分析: 文件夹中有以...

studyingdda的博客 9405

LD 文件:规则详解

Contents 概论 基本概念 脚本格式 简单例子 简单脚本命令 对符号的赋值 SECTIONS命令 MEMORY命令 PHDRS命令 VERSION命令 脚本内的表达式 暗含的连接脚本 概论 每一个链接过程都由链接脚本(linker script, 一般以lds作为文件的后缀名)控制. 链接脚本主要用于规定如何把输入文件内的section...

申小白 6万+

S32DS实战:.ld链接文件的内存布局与自定义段精讲

本文深入解析S32DS开发环境中.ld链接文件的内存布局与自定义段应用,帮助开发者优化嵌入式系统内存使用。通过实战案例展示如何解决内存不足、关键数据保留等问题,并详细介绍.ld文件的常用命令和调试技巧,提升开发效率。

weixin_30291791的博客 280

解读链接脚本ld和案例分享

链接脚本ld ld(Linker)是一个负责将目标文件和库文件链接成可执行文件或共享库的程序。在编译过程中,编译器将源代码编译成目标文件,然后ld将这些目标文件链接成可执行文件或共享库。 ld的主要作用是解决目标文件之间的符号引用关系,将所有目标文件中的符号引用和符号定义进行匹配,最终生成可执行文件或共享库。 在ld的工作过程中,会执行以下几个步骤: 读取输入文件:ld首先会读取所有需要链接的目标文件和库文件,这些文件包括目标文件、静态库文件和动态库文件。 符号解析:ld会对每个目标文件中的符号进行

最后一个bug的博客 4291

告别盲改!用S32DS可视化工具调试S32K3的ld链接脚本,定位变量地址超直观

本文介绍了如何使用S32DS可视化工具调试S32K3的ld链接脚本,告别传统手动编辑的繁琐过程。通过图形化界面,开发者可以实时查看内存区域划分、拖拽调整段分配,并即时验证地址冲突,显著提升开发效率。特别适用于汽车级MCU S32K3的复杂内存架构优化。

weixin_30650039的博客 436

S32DS开发实战:如何通过linker_flash.ld文件优化内存分配(附常见问题排查)

本文深入解析了S32DS开发中linker_flash.ld链接脚本的核心作用与优化方法。作为嵌入式程序编译链接过程的关键蓝图,该文件通过MEMORY和SECTIONS命令精确控制代码与数据在Flash和SRAM中的内存分配。文章提供了实战配置指南、高级优化策略(如多块内存利用与自定义段),并附有常见链接错误(如区域溢出、未定义引用)的排查思路与解决方案,帮助开发者最大化利用芯片资源并提升系统稳定性。

weixin_29161719的博客 333

深入解析S32DS链接文件与启动代码的内存分配机制

本文深入解析了S32DS开发中链接文件与启动代码如何协同工作,完成程序的内存分配与初始化。链接文件作为“建筑蓝图”,静态规划代码、数据在Flash和SRAM中的存放位置;启动代码则作为“唤醒流程”,动态执行数据搬运、内存清零等关键操作,为C程序运行搭建稳定环境。理解这一机制是优化性能和调试内存相关问题的关键。

mqtt6iot的博客 975

S32DS链接脚本(.ld)深度解析:从MEMORY到SECTIONS,打造你的专属内存地图

本文深入解析S32DS中的链接脚本(.ld)文件,从MEMORY定义到SECTIONS配置,教你如何打造专属内存地图。通过详细讲解链接脚本的结构、内存区域划分技巧及实战案例,帮助嵌入式开发者优化程序布局,解决内存管理难题,提升系统性能。

weixin_30471561的博客 379

【经验贴】S32DS编译出现 Ld error: file not recognized: file format not recognized 错误的解决方法

S32DS编译出现 Ld error: file not recognized: file format not recognized 错误的解决方法。

qq_41798833的博客 1579

告别盲改!用S32DS一键可视化S32K3的ld链接脚本与内存映射

本文介绍了如何使用S32 Design Studio(S32DS)可视化工具高效编辑S32K3芯片的ld链接脚本与内存映射。通过图形化界面,开发者可以直观调整内存布局,避免传统文本编辑的盲改问题,显著提升嵌入式开发效率。文章详细解析了S32DS链接器脚本编辑器的功能特点,并提供了实战配置技巧与内存优化方法。

weixin_30887919的博客 376

S32DS链接脚本(.ld)避坑指南:从MEMORY到SECTIONS,搞懂这些关键词才能玩转内存分配

本文深入解析S32DS中.ld链接脚本的关键配置,从MEMORY到SECTIONS命令,帮助开发者避开内存分配中的常见陷阱。通过实战案例和调试技巧,掌握如何精确控制代码和数据在芯片内存中的布局,解决程序跑飞、变量丢失等问题,提升嵌入式开发效率。

weixin_28738165的博客 410

别再死记硬背了!S32DS开发中.ld链接文件实战解析(附自定义内存分区技巧)

本文深入解析S32DS开发中.ld链接文件的高阶应用技巧,重点介绍自定义内存分区的实战方法。通过真实项目案例,详细讲解如何优化内存布局以应对低功耗设计、安全隔离等需求,并提供代码与链接脚本的协同设计最佳实践,帮助开发者提升嵌入式系统稳定性和性能。

weixin_33681778的博客 236

S32DS开发实战:手把手教你玩转.ld链接文件,搞定内存分配与自定义段

本文详细解析了S32DS开发中.ld链接文件的核心作用与实战技巧,帮助开发者精准控制内存分配与自定义段。通过MEMORY和SECTIONS命令的深度解析,结合中断向量表定位、低功耗变量保持等实战案例,提升嵌入式开发效率与资源利用率。特别适合需要优化S32DS项目内存布局的开发者。

weixin_28683689的博客 179

S32 Design Studio(S32DS)在代码中使用链接文件(.ld)中的数据

链接文件(Linker File)是用于指导链接器如何将编译后的代码和数据段分配到目标芯片的Flash和SRAM中的脚本文件,通常以 .ld 为扩展名。假设链接文件中定义某段开始地址为__RESET_RETAIN_START,有时需要使用代码获取链接文件中的数据。比如某段的开始地址。在代码中先声明变量;

weixin_54978309的博客 71

基于EB和S32DS3.5建立基础工程

本文基于S32K312介绍新建工程并引入EB,

nishuawan的博客 1343

S32DS内存管理实战:手把手教你配置linker_flash.ld文件优化Flash与SRAM分配

本文详细介绍了在S32 Design Studio(S32DS)环境下如何配置linker_flash.ld文件以优化Flash与SRAM的内存分配。通过解析S32K3系列MCU的内存架构和链接脚本基础,提供关键配置详解、常见内存问题分析与优化策略,帮助开发者提升嵌入式系统性能和稳定性。

weixin_29174013的博客 437

如何配置S32DS工程实现A/B分区编译

摘要:本文介绍了通过不同链接文件实现bootloader双APP分区编译的方法。首先在工程中创建两个编译目标文件(APP_A和APP_B),然后分别为其创建对应的链接文件,修改起始地址和配置区定义。接着将不同链接文件与编译目标关联,并设置输出文件命名。这种方法避免了在BOOT程序中处理地址偏移问题,同时解决了APP中硬编码Flash数据的存储需求。最终可通过选择不同编译目标生成对应分区的固件文件,为bootloader回滚功能提供了实现基础。

成续小拜 1028

S32K144基于S32DS2018开发环境的启动文件/链接脚本详细分析

自己详细总结启动文件和连接脚本的分析,很详细,结合工程的实际地址数据来分析,可以很清楚的知道工作流程;

上一篇: S32DS中链接文件及启动代码学习
下一篇: java jdk8安装之后java -version失败
studyingdda
博客等级 码龄6年 756粉丝 71原创
评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

studyingdda

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值