【Keil5-编译4个阶段】

news2024/10/7 2:29:51

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.coloradmin.cn/o/1583333.html

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

相关文章

在B站看课的进度助手

效果 代码 BilibiliVideoDurationCrawler import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; import java.io.IOException; import java.text.ParseException; import java.util.ArrayList; imp…

简单用Nodejs + express 编写接口

文章目录 get接口示范post接口示范注意点 准备工作可以看上一篇文章:文章链接》》 get接口示范 app.get(/, (req, res) > {res.send("Hello World"); })因为是get接口,所以可以直接在浏览器上请求(端口地址接口名)…

Java 二叉数(1)

一、认识树 树是一种非线性的数据结构,它是由n(n>0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点: 有一个特殊的…

零基础入门NLP - 新闻文本分类比赛方案分享 nano- Rank1

nano- 康一帅 简介 环境 Tensorflow 1.14.0Keras 2.3.1bert4keras 0.8.4 文件说明 EDA:用于探索性数据分析。data_utils:用于预训练语料的构建。pretraining:用于Bert的预训练。train:用于新闻文本分类模型的训练。pred&a…

Celery使用异步、定时任务使用

一、什么是Celery 1.1、celery是什么 Celery是一个简单、灵活且可靠的,处理大量消息的分布式系统,专注于实时处理的异步任务队列,同时也支持任务调度。 Celery的架构由三部分组成,消息中间件(message broker&#xf…

网络安全加密算法---对称加密

三位同学一组完成数据的对称加密传输。 三位同学分别扮演图中 A、B 和 KDC 三个角色,说明 KA、KB,KAB 和发送的数据Data 的内容。 给出图中 2 和 3 中的数据,以及 Data 加密后的密文。可以完成多轮角色互换的通信 过程。其中一轮过程要求 K…

【Entity Framework】聊聊EF中键

【Entity Framework】聊聊EF中键 文章目录 【Entity Framework】聊聊EF中键一、概述二、配置主键2.1 约定配置主键2.2 单个属性配置为实体主键2.3 组合主键 三、主键名称四、键类型和值五、备用键 一、概述 键用作每个实体实例的唯一标识符。EF中的大多数实体都有一个键&#…

Vue2电商前台项目(三):完成Search搜索模块业务

目录 一、请求数据并展示 1.写Search模块的接口 2.写Vuex中的search仓库(三连环) 3.组件拿到search仓库的数据 用getters简化仓库中的数据 4.渲染商品数据到页面 5.search模块根据不同的参数获取数据展示 (1)把派发actions…

layui中对table表格内容鼠标移入显示 tips内容

要在Layui中的表格中实现鼠标移入显示Tips,你可以使用Layui的事件监听和Tips组件。 有两种实现方式! 第一种是,通过自定义鼠标事件显示 tips。在渲染 table 时,对 filed 进行重构,增加相应的选择器标识,一…

冯喜运:4.10晚间黄金原油走势分析

黄金消息技术面分析:美国CPI年率创半年新高,美国3月未季调CPI年率录得3.5%,高于预期的3.4%水平,为2023年9月以来最高水平。美国CPI高于预期,现货黄金短线下挫16美元。日线当前的指标macd依旧属于金叉放量运行&#xff…

unipush+个推实现消息推送

1.注册个推平台的帐号个推,专业的数据智能服务商-为垂直领域提供数据智能解决方案 2.应用列表中选择新增应用/服务 3.填写下应用信息4.创建好应用后在manifest.json中的sdkConfigs配置上写入appid、appkey、appsecret "sdkConfigs" : {"ad" :…

tailwindcss+vue3+vite+preline项目搭建

最近原子化样式比较火,用了一下确实还不错,也确实是用一些标准的样式能够使网页看起来比较统一,而且能够极大的减轻起名字的压力,有利有弊,就不一一细说了。 之前开发都是习惯于使用vitevue3来开发的,此次搭…

ITK 重采样 resample

Itk 重新采样有二多种情况&#xff0c;这里说二种情况 1. 输入参数 &#xff0c;和输出相关数据&#xff0c;输出范围&#xff0c;spacing &#xff1b; typedef itk::Image< float, 3 > itkFloatImageType;typedef itk::ResampleImageFilter < itkFloatImageType, i…

观察者模式与发布-订阅模式的对决

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

基础算法(算法竞赛、蓝桥杯)--堆排序

1、B站视频链接&#xff1a;A15 堆 堆排序_哔哩哔哩_bilibili 题目链接&#xff1a;【模板】堆 - 洛谷 #include <iostream> using namespace std; int a[1000010],cnt; void up(int u){ //上浮if(u/2 && a[u/2]>a[u]) swap(a[u],a[u/2]), up(u/2); } void d…

练习题(2024/4/10)

1. 删除有序数组中的重复项 给你一个 非严格递增排列 的数组 nums &#xff0c;请你 原地 删除重复出现的元素&#xff0c;使每个元素 只出现一次 &#xff0c;返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。 考虑 nums 的唯一元…

Vue3---基础1(认识,创建)

变化 相对于Vue2&#xff0c;Vue3的变化&#xff1a; 性能的提升 打包大小减少 41% 初次渲染快 55%&#xff0c;更新渲染快133% 内存减少54% 源码的升级 使用 proxy 代替 defineProperty 实现响应式 重写虚拟 DOM 的实现和 Tree-shaking TypeScript Vue3就可以更好的支持TypeSc…

Harmony鸿蒙南向驱动开发-MMC

MMC&#xff08;MultiMedia Card&#xff09;即多媒体卡&#xff0c;是一种用于固态非易失性存储的小体积大容量的快闪存储卡。 MMC后续泛指一个接口协定&#xff08;一种卡式&#xff09;&#xff0c;能符合这种接口的内存器都可称作MMC储存体。主要包括几个部分&#xff1a;…

【java工具-灵活拉取数据库表结构和数据】

需求&#xff1a; 假设我们现在有一个需求&#xff0c;需要快速拉取数据库的某些表建表语句&#xff0c;和数据&#xff0c;平时做备份之类&#xff1b; 我这边自己写了个工具&#xff0c;不多废话&#xff0c;也不整虚的&#xff0c; 直接看代码&#xff1a; package com.…

SQL注入sqli_labs靶场第五、六题

第五题 根据报错信息&#xff0c;判断为单引号注入 没有发现回显点 方法&#xff1a;布尔盲注&#xff08;太耗时&#xff0c;不推荐使用&#xff09; 1&#xff09;猜解数据库名字&#xff1a;&#xff08;所有ASCII码值范围&#xff1a;0~127&#xff09; ?id1 and length…