0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

ARM代码编译链接的工作流程

GReq_mcu168 来源:玩转单片机 作者:玩转单片机 2020-12-22 16:57 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

ARM处理器在市面上到处都是ARM7、ARM9、Cortex-M、Cortex-R、Cortex-A包含的种类繁多,今天我们就来了解一下ARM代码编译链接的工作流程,以及过程中需要的相关概念信息。

编译过程编译过程就是把源代码编译生成目标代码的过程。而采用ARM编译命令,可以将源代码编译成带有ELF格式的目标文件。除了编译命令可以选择相应的编译选项之外,源代码中的pragmas以及特别的关键字也会对编译过程/结果产生一定影响。

makefile文件Makefile类似一个脚本文件,这个文件用来定义编译过程,其中包含了需要编译的文件、文件顺序,编译的宏定义等等,可以看做完整编译需要的信息及过程的集合。 2.ELF格式文件ELF文件:(Executable and Linkable Format) ELF文件出了包含编译出的二进制代码,还包含其他链接需要信息,ELF格式提供了相应代码/数据对应编译出的地址信息、文件信息等内容。

链接过程链接就是把编译生成的目标文件和链接库处理成为相应ELF格式的映像文件(image),最终的文件可以写入嵌入式系统ROM/FLASH中。映像文件中包含:分组信息和定位信息,亦即输出段/域及地址定位信息。链接器同时可以生成相应与域有关的符号来指示关于加载时地址、运行时地址、加载时长度限制、运行时长度限制等信息。同时链接器也具有优化的功能,删除不必要的代码、段域等。

1.映像文件的组成一个映像文件包含一个或多个域;一个域包含一个或多个输出段;一个输出段包含一个或多个输入段;输入段中包含了目标文件的代码和数据。 输入段的内容:代码、已初始化的数据、未初始化的数据、初始化0的存储区域。 输出段和域中包含:RO、RW、ZI域。

2.映像文件的地址映射加载时地址和运行时地址的区别:加载时地址是运行前的地址,简单理解在FLASH中固定存储即为加载时地址,而若代码载入RAM运行时,新的地址为运行时地址;而程序在FLASH中运行,加载时地址和运行时地址就一致了。当地址映射复杂时,可以通过scatter配置文件进行设置。

3.初始入口点和普通入口点初始入口点:运行时的入口点,初始入口点必须位于映像文件运行时入口点,而它的加载时地址和运行时地址一致(称为固定域)。可以通过-entry指定映像文件的初始入口点。 普通入口点:用ENTRY伪操作定义在程序中,一般为中断服务程序的入口点。

4.scatter文件中包含的信息加载时域描述、运行时域描述、输入段描述、输入段选择符;加载时域包括:名称、起始地址、属性、最大尺寸和一个运行时域;运行时域包括:名称、起始地址、属性、最大尺寸和一个输入段集合;输入段选择符描述了输入段名称或属性的匹配方式。 输入段属性:RO-CODE/CODE、RO_DATA/CONST、RO/TEXT包括前两项、RW_DATARW/DATA(RW_CODE+RW_DATA)、BSS、ZI;FIRSTLAST来指定运行时域的开头结尾,.ANY可以根据实际情况安排到合适的运行时域。 可以使用FIXED属性将域放置在ROM中固定位置,加载时域和固定时域即相同。

拓展知识

1.程序断点断点可以分为:软件断点和硬件断点,软件断点可以相应地址插入相应的指令实现,而硬件断点必须要需要相应硬件支持才能实现。

2.链接库的概念链接库分为:静态链接库和动态链接库,而动态链接库又分为加载时动态链接库和运行时动态链接库;其差别:静态链接库的使用内容包含在生成的目标代码中,加载时动态链接库是程序载入内存时知道相应的动态链接库调用内容同时调入内存中,而运行时动态链接库只有在运行到需要调用时才调入使用。

3.JTAGJTAG仿真器也称为JTAG调试器,是通过ARM芯片的JTAG边界扫描口进行调试的设备。JTAG仿真器比较便宜,连接比较方便,通过现有的JTAG边界扫描口与 ARM CPU通信,属于完全非插入式(即不使用片上资源)调试,它无需目标存储器,不占用目标系统的任何端口,而这些是驻留监控软件所必需的。 另外,由于JTAG调试的目标程序是在目标板上执行,仿真更接近于目标硬件,因此,许多接口问题,如高频操作限制、ACDC参数不匹配,电线长度的限制等被最小化了。使用集成开发环境配合JTAG仿真器进行开发是目前采用最多的一种调试方式。

责任编辑:xj

原文标题:ARM代码编译、链接调试过程

文章出处:【微信公众号:玩转单片机】欢迎添加关注!文章转载请注明出处。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • ARM
    ARM
    +关注

    关注

    135

    文章

    9588

    浏览量

    393562
  • 源代码编译
    +关注

    关注

    0

    文章

    2

    浏览量

    5602

原文标题:ARM代码编译、链接调试过程

文章出处:【微信号:mcu168,微信公众号:硬件攻城狮】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    工作流节点说明---工作流节点

    平台提供工作流节点,实现工作流嵌套工作流的效果。 节点说明 在一个工作流中,开发者可以将另一个工作流作为其中的一个步骤或节点,实现复杂任务
    发表于 03-24 21:05

    工作流插件节点节点说明

    插件节点用于在工作流中调用插件运行指定工具。 插件是一系列工具的集合,每个工具都是一个可调用的API。插件广场上架的插件或已上架的团队插件支持以节点形式被集成到工作流中,拓展智能体的能力边界
    发表于 03-23 16:54

    工作流节点说明结束节点

    结束节点是工作流的最终节点,用于返回工作流运行后的结果。结束节点支持两种返回方式:返回变量、返回文本。 返回变量 在返回变量模式下,工作流运行结束后会以JSON格式输出所有返回参数,适用于工作
    发表于 03-16 16:43

    工作流节点说明开始节点

    开始节点是工作流的起始节点,用于设定启动工作流需要的输入信息。开始节点只有输入参数,没有输出等其他参数。开始节点中默认有一个输入参数USER_INPUT,一个默认的输入参数FILES_INPUT(非
    发表于 03-13 14:52

    开发工作流创建工作流

    择要使用的节点。 2、将节点按任务流程相连接。 3、配置节点的输入和输出参数 测试并发布工作流 开发者如需在智能体内使用该工作流,必须先完成工作流的上架。 1、单击【试运行】,运行成功
    发表于 03-10 10:05

    AMS借助Altium Designer简化电子设计工作流程

    随着时间的推移,AMS 遇到的问题越来越多。显然,AMS 需要一个设计解决方案,将他们的整个工作流程集成到一个统一的设计环境中。也就在这时,Altium 进入了他们的视野。
    的头像 发表于 03-09 11:24 505次阅读

    是德科技与三星携手英伟达展示端到端AI-RAN验证工作流程

    是德科技(NYSE: KEYS )与三星电子宣布,会在巴塞罗那举行的2026年世界移动通信大会(MWC 2026)上,与英伟达联合演示端到端人工智能无线接入网络(AI-RAN)测试与验证工作流程。该
    的头像 发表于 03-05 10:04 782次阅读

    虚幻引擎5在建筑可视化中的应用:趋势、挑战与基于Perforce P4的工作流程

    UE5正在重塑建筑可视化:实时交互、AI辅助、BIM联动......技术红利已来,工作流却拖了后腿?这篇干货解析了趋势和痛点,更揭秘了如何用Perforce P4打造高效的UE5工作流
    的头像 发表于 02-27 15:26 506次阅读
    虚幻引擎5在建筑可视化中的应用:趋势、挑战与基于Perforce P4的<b class='flag-5'>工作流程</b>

    一张图看懂远动通信装置的工作流程

    远动通信装置作为电网的“千里眼”“顺风耳”,核心是完成“现场状态上传”与“调度指令下达”的闭环协作。它的工作流程看似复杂,实则可拆解为“数据采集—数据传输—调度处理—指令执行—结果反馈”五大核心步骤
    的头像 发表于 01-23 11:57 699次阅读
    一张图看懂远动通信装置的<b class='flag-5'>工作流程</b>

    芯片ATE测试详解:揭秘芯片测试机台的工作流程

    ATE(自动测试设备)是芯片出厂前的关键“守门人”,负责筛选合格品。其工作流程分为测试程序生成载入、参数测量与功能测试(含直流、交流参数及功能测试)、分类分档与数据分析三阶段,形成品质闭环。为平衡
    的头像 发表于 01-04 11:14 2728次阅读
    芯片ATE测试详解:揭秘芯片测试机台的<b class='flag-5'>工作流程</b>

    强强合作 西门子与日月光合作开发 VIPack 先进封装平台工作流程

    平台开发基于 3Dblox 的工作流程。双方目前已经合作完成三项 VIPack 技术的 3Dblox 工作流程验证,包括扇出型基板上芯片封装(FOCoS)、扇出型基板上芯片桥接
    的头像 发表于 10-23 16:09 4571次阅读
    强强合作 西门子与日月光合作开发 VIPack 先进封装平台<b class='flag-5'>工作流程</b>

    ADI Power Studio工作流程与工具概述

    、直观的工作流程,利用准确的模型来仿真实际性能,并自动生成关键的物料清单和报告等内容,帮助工程团队更早做出更优决策。
    的头像 发表于 10-22 09:38 1308次阅读

    恩智浦i.MX RT1180跨界MCU驱动EtherCAT的工作流程

    上周的分享已经介绍了整个参考设计的概况和相关硬件资源。那么,本次会从软件工程角度进行分享。首先来了解EtherCAT Slave工作流程
    的头像 发表于 09-28 14:20 1343次阅读
    恩智浦i.MX RT1180跨界MCU驱动EtherCAT的<b class='flag-5'>工作流程</b>

    电芯自动面垫分选装盒生产线的工作流程解析

    电芯自动面垫分选装盒生产线的工作流程解析|深圳比斯特自动化
    的头像 发表于 09-28 10:29 580次阅读

    在IAR Arm开发工具链中--function_sections编译选项的使用

    本文主要介绍在IAR Arm开发工具链中不修改源代码的情况下使用‑‑function_sections编译选项把函数放到单独的section。
    的头像 发表于 06-13 13:53 1959次阅读
    在IAR <b class='flag-5'>Arm</b>开发工具链中--function_sections<b class='flag-5'>编译</b>选项的使用