【Keil5-编译4个阶段】

Keil5-编译

  • ■ GCC编译4个阶段
    • ■ 预处理->编译->汇编->链接
    • ■ GNU工具链开发流程图
    • ■ armcc/armasm(编译C和汇编)
    • ■ armlink (链接)
    • ■ armar (打包)
    • ■ fromelf (格式转换器)
    • ■ 地址段

■ GCC编译4个阶段

■ 预处理->编译->汇编->链接

在这里插入图片描述
在这里插入图片描述

■ GNU工具链开发流程图

在这里插入图片描述
在这里插入图片描述
编译:编译器是armcc和armasm ,每个c/c++和汇编源文件编译成对应的以“.o”为后缀名的对象文件(Object Code,也称目标文件),
链接: 链接器armlink把各个.o文件及库文件链接成一个映像文件“.axf”或“.elf”;
格式转换:一般来说Windows或Linux系统使用链接器直接生成可执行映像文件elf后,内核根据该文件的信息加载后,就可以运行程序了,但在单片机平台上,需要把该文件的内容加载到芯片上,所以还需要对链接器生成的elf映像文件利用格式转换器fromelf转换成“.bin”或“.hex”文件,交给下载器下载到芯片的FLASH或ROM中。
在这里插入图片描述

■ armcc/armasm(编译C和汇编)

它调用了-c、 -cpu –D –g –O1等编译选项, 查看MDK的帮助手册,
在这里插入图片描述

■ armlink (链接)

armlink是链接器,它把各个O文件链接组合在一起生成ELF格式的AXF文件, AXF文件是可执行的,下载器把该文件中的指令代码下载到芯片后,该芯片就能运行程序了;利用armlink还可以控制程序存储到指定的ROM或RAM地址。
链接器默认是根据芯片类型的存储器分布来生成程序的,该存储器分布被记录在工程里的sct后缀的文件中,有特殊需要的话可自行编辑该文件,改变链接器的链接方式。
在这里插入图片描述

■ armar (打包)

armar工具用于把工程打包成库文件
在这里插入图片描述

■ fromelf (格式转换器)

在这里插入图片描述

fromelf可根据axf文件生成hex、bin文件, hex和bin文件是大多数下载器支持的下载文件格式。
例如如果想利用fromelf生成bin文件,可以在MDK的“Option for Target->User”页中添加调用fromelf的指令:如下
在这里插入图片描述
User配置页面中,提供了三种类型的用户指令输入框分别是
编译前(Before Compile c/c++ file)、
构建前(Before Build/Rebuild)
构建后(After Build/Rebuild)执行。
这些指令并没有限制必须是arm的编译工具链,例如如果您自己编写了python脚本,也可以在这里输入用户指令执行该脚本。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

■ 地址段

Code: 即代码域,它指的是编译器生成的机器指令,这些内容被存储到ROM区。
RO-data: Read Only data,即只读数据域它指程序中用到的只读数据,这些数据被存储在ROM区,因而程序不能修改其内容。例如C语言中const关键字定义的变量就是典型的RO-data。
RW-data:Read Write data,即可读写数据域例如C语言中使用定义的全局变量,且定义时赋予“非0值”给该变量进行初始化。
ZI-data:Zero Initialie data,即0初始化数据,RW-data的区别是程序刚运行时这些数据初始值全都为0,例如C语言中使用定义的全局变量,且定义时赋予“0值
ZI-data的栈空间(Stack)及堆空间(Heap): 在C语言中,函数内部定义的局部变量属于栈空间,进入函数的时候从向栈空间申请内存给局部变量,退出时释放局部变量,归还内存空间。而使用malloc动态分配的变量属于堆空间。在程序中的栈空间和堆空间都是属于ZI-data区域的,这些空间都会被初始值化为0值。编译器给出的ZI-data占用的空间值中包含了堆栈的大小(经实际测试,若程序中完全没有使用malloc动态申请堆空间,编译器会优化,不把堆空间计算在内)。
在这里插入图片描述

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

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

相关文章

【LAMMPS学习】八、基础知识(1.7) LAMMPS 与 MDI 库代码耦合

8. 基础知识 此部分描述了如何使用 LAMMPS 为用户和开发人员执行各种任务。术语表页面还列出了 MD 术语,以及相应 LAMMPS 手册页的链接。 LAMMPS 源代码分发的 examples 目录中包含的示例输入脚本以及示例脚本页面上突出显示的示例输入脚本还展示了如何设置和运行各…

【现代C++】委托构造函数

现代C中的委托构造函数(Delegating Constructors)是C11引入的特性,它允许一个构造函数调用同一个类中的另一个构造函数,以避免代码重复。这种特性在初始化对象时提高了代码的复用性和清晰性。 1. 基本用法 在同一个类中&#xf…

(小红书平台)2024用户画像洞察报告

现今的小红书坐拥3亿月活用户,男女比例达到3:7,95后占比为50%,00后占比为35%,一二线城市用户占比50%。社区分享者超8000万,日均用户搜索渗透达到60%,UGC内容占比达90%。(数据来源:小…

[lesson16]类的真正形态

类的真正形态 类的关键字 struct在C语言中以及有了自己的含义,必须继续兼容 在C中提供了新的关键字class用于类的定义 class和struct的用法是完全相同的 在用struct定义类时,所有成员的默认访问级别为public 在用class定义类时,所有成员…

虚拟网络设备的真正使命:实现有控制的通信

在数字化时代📲,网络安全🔒成为了企业和个人防御体系中不可或缺的一部分。随着网络攻击的日益复杂和频繁🔥,传统的物理网络安全措施已经无法满足快速发展的需求。虚拟网络设备🖧,作为网络架构中…

谈谈功率IC巨头—士兰微

大家好,我是砖一。 今天给大家分享一下士兰微电子公司,,有做功率元器件&开关电源和IC的朋友可以了解一下,希望对你有用~ 1 公司介绍 士兰微电子成立于1997年,于2003年上市,总部位于杭州,…

unity按路径移动

using System; using System.Collections; using System.Collections.Generic; using UnityEngine;public class FollowPathMove : MonoBehaviour {public Transform[] wayPointArray;[SerializeField] private Transform PathA;//路径点的父物体[SerializeField]private Trans…

【春招面试篇】大厂面试干货分享

💓博主CSDN主页:杭电码农-NEO💓   🚚代码仓库:NEO的学习日记🚚   🌹关注我🫵带你学更多面经   🔝🔝 面试经验分享 1. 前言2. 去哪儿投简历?内推是否有用?3. 投递简历前的准备…

美团一面,面试官让介绍AQS原理并手写一个同步器,直接凉了

写在开头 今天在牛客上看到了一个帖子,一个网友吐槽美团一面上来就让手撕同步器,没整出来,结果面试直接凉凉。 就此联想到一周前写的一篇关于AQS知识点解析的博文,当时也曾埋下伏笔说后面会根据AQS的原理实现一个自定义的同步器…

【MySQL数据库 | 第二十五篇】深入探讨MVCC底层原理

前言: 在当今互联网时代,数据库扮演着数据存储和管理的关键角色。对于大型Web应用程序和企业级系统而言,高效地处理并发访问和事务管理是至关重要的。多版本并发控制(MVCC)是一种数据库事务处理的技术,旨…

【软件测试】个人博客系统测试

个人博客系统测试 一、项目背景1.1 技术背景1.2 功能背景 二、自动化测试2.1 什么是自动化测试2.2 通过使用selenium进行自动化测试的编写(Java实现)2.3 编写测试用例,执行自动化测试2.3.1 输入用户名:test,密码:123,登录成功2.3.…

CRM集成:解锁业务增长与客户关系管理的关键

预计从2021年至2028年,CRM领域的市场规模将大幅跃升,从约580亿美元增长至1290亿美元。这一显著的增长并非偶然,而是源于CRM平台为企业带来的巨大价值。客户关系管理平台助力销售高效开发潜在客户,客户成功经理有效支持客户&#x…

unable to find a medium containing a live file system解决办法!

背景: 用Ventoy制作U盘系统安装盘,只需要把ISO镜像拷进去就可以,可以放多少个镜像取决于U盘的大小,无需重复制作。Ventoy 将U盘的第一个分区默认格式化为exFAT文件系统来存放ISO文件。 但是,今天鲲鹏920平台安装银河…

Golang | Leetcode Golang题解之第16题最接近的三数之和

题目&#xff1a; 题解&#xff1a; func threeSumClosest(nums []int, target int) int {sort.Ints(nums)var (n len(nums)best math.MaxInt32)// 根据差值的绝对值来更新答案update : func(cur int) {if abs(cur - target) < abs(best - target) {best cur}}// 枚举 a…

心跳机制原理学习

心跳机制 应用场景&#xff1a; 在长连接下&#xff0c;有可能很长一段时间都没有数据往来。理论上说&#xff0c;这个连接是一直保持连接的&#xff0c;但是实际情况中&#xff0c;如果中间节点出现什么故障是难以知道的。更要命的是&#xff0c;有的节点&#xff08;防火墙…

【鸿蒙开发】组件状态管理@Prop,@Link,@Provide,@Consume,@Observed,@ObjectLink

1. Prop 父子单向同步 概述 Prop装饰的变量和父组件建立单向的同步关系&#xff1a; Prop变量允许在本地修改&#xff0c;但修改后的变化不会同步回父组件。当父组件中的数据源更改时&#xff0c;与之相关的Prop装饰的变量都会自动更新。如果子组件已经在本地修改了Prop装饰…

【数据结构练习题】队——1.用队实现栈2.用栈实现队

♥♥♥♥♥个人主页♥♥♥♥♥ ♥♥♥♥♥数据结构练习题总结专栏♥♥♥♥♥ ♥♥♥♥♥上一章&#xff1a;堆的练习题♥♥♥♥♥ 文章目录 1.用队去实现栈1.1问题描述1.2思路分析1.3绘图分析1.4代码实现2.用栈实现队2.1问题描述2.2思路分析1.3绘图分析2.4代码实现 1.用队去实现…

FreeRTOS学习 -- 再识

工作中一直使用FreeRTOS进行着开发&#xff0c;但是没有进行过系统的总结过。现在将快速使用几天时间将FreeRTOS相关知识点加以总结。 官网&#xff1a; https://www.freertos.org/zh-cn-cmn-s/ 参看资料&#xff1a; 正点原子 STM32F1 FreeRTOS开发手册_V1.2.pdf The FreeRTOS…

Linux CPU利用率

Linux CPU利用率 在线上服务器观察线上服务运行状态的时候&#xff0c;绝大多数人都是喜欢先用 top 命令看看当前系统的整体 cpu 利用率。例如&#xff0c;随手拿来的一台机器&#xff0c;top 命令显示的利用率信息如下 这个输出结果说简单也简单&#xff0c;说复杂也不是那么…

使用Mac自带终端进行远程ssh连接Linux服务器

废话不多说&#xff0c;直接上图 好吧&#xff0c;我承认我是多此一举&#xff0c;脱裤子放pi了&#xff0c;其实只需要在终端输入一行命令就可以了&#xff08;呜呜&#xff5e;&#xff09; ssh rootip -p 22 需要注意的是&#xff0c;命令里的ip地址同样要替换成你自己的服…