MDK编译过程及文件类型

news2024/11/28 4:44:03

编译过程

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

.c和.s文件通过armcc编译器转为.o

其中的code、RO、RW、ZI-data
在这里插入图片描述
在这里插入图片描述

程序运行时rom中的rw-data复制到SRAM中,SRAM中一般存储可读写的变量,所以ZI-data和RW-data的数据存储在这
在这里插入图片描述

经典问题

C语言的全局变量存放在哪里?

C语言的全局变量存放在静态数据区或全局数据区。这个区域在程序启动时就会被分配,并在程序结束时释放。全局变量的作用域是整个程序,可以被程序中的所有函数访问。在不同的编译器和操作系统中,静态数据区或全局数据区的位置可能不同。

是栈吗?

全局变量不存放在栈中。栈是一种内存分配方式,用于存储函数的局部变量和函数调用的参数、返回值等。全局变量存储在静态数据区或全局数据区中,而不是栈中。栈的大小是动态分配的,而静态数据区或全局数据区的大小是在程序编译时确定的。

静态数据区是什么?

静态数据区是程序中用于存储静态变量、全局变量和常量的一块固定大小的内存区域。在程序运行时,静态数据区会被分配一次,直到程序结束才会被释放。
静态数据区的大小在程序编译时就已经确定,因此它的大小是固定的,不会像栈一样动态地增长或缩小。静态数据区中的变量在程序运行期间都可以被访问,因此具有全局作用域。
静态数据区通常被划分为两个部分,即BSS段和数据段。BSS段用于存储未初始化的全局变量和静态变量,而数据段用于存储已初始化的全局变量和静态变量,以及常量。在程序加载时,未初始化的变量会被自动初始化为0或者NULL。
需要注意的是,静态数据区与堆、栈是不同的内存区域,它们的分配和释放方式也不同,并且静态数据区的生命周期与程序的生命周期相同,而堆和栈的生命周期则与函数的调用关系相关。

函数存放在哪?

函数存放在代码区,也称为文本区或者只读数据区。代码区是程序中用于存储可执行代码的一块内存区域,它通常是只读的,不能被修改。在程序编译时,所有的函数代码都会被编译成机器码,并被存储在代码区中。当程序运行时,代码区中的指令会被 CPU 依次执行,这样程序才能正常运行。
代码区的大小取决于程序的代码大小,因此它的大小是固定的。代码区通常被划分为只读代码段和可执行代码段,只读代码段用于存储只读数据,如字符串常量等,可执行代码段用于存储可执行代码,如函数、指令等。需要注意的是,代码区与堆、栈、静态数据区是不同的内存区域,它们的分配和释放方式也不同,并且代码区的生命周期与程序的生命周期相同。

堆跟栈的意义?

堆和栈是两种不同的内存分配方式,它们分别具有不同的意义和用途。堆是一种动态内存分配方式,它的大小可以在程序运行时动态地增长或缩小。堆的分配和释放是由程序员手动控制的,通常使用malloc()、calloc()、realloc() 等函数来分配内存,并使用free()函数来释放内存。堆的主要作用是为程序提供灵活的内存分配方式,可以实现动态数据结构,如链表、树等。
栈是一种静态内存分配方式,它的大小是在程序编译时就已经确定的,通常在程序运行时不能改变。栈的分配和释放是由编译器自动控制的,通常用于存储函数的局部变量和函数调用的参数返回值等。栈的主要作用是为程序提供快速的内存分配方式,由于栈的大小是固定的,因此可以在编译期间将栈的大小分配好,不需要在程序运行时动态分配内存,从而提高程序的执行效率。总的来说,堆和栈具有不同的意义和用途,程序员可以根据需要选择适合的内存分配方式,以实现程序的功能和性能要求。

烧录出来固件太大?flash 装不下咋整

试试编译器优化
等级0换成3后 .hex文件从46k变为38k
若工程较大,语法不规范可能会造成问题
在这里插入图片描述

想同时生成.hex 和 .bin文件怎么办?

在build生成.axf 文件后
运用fromelf命令行生成.bin 文件
下图是fromelf生成各种类型文件的命令
在这里插入图片描述
在这里插入图片描述
勾选run,是在生成.axf文件后执行的命令 填入fromelf生成命令,就可以同时生成bin文件啦、】
在这里插入图片描述

编译中所有生成文件的类型

在这里插入图片描述
uvprojx 文件就是我们平时双击打开的工程文件,它记录了整个工程的结构,如芯片类型、工程包
含了哪些源文件等内容,见图工程包含的文件 _ 芯片类型等内容。

uvoptx 文件记录了工程的配置选项,如下载器的类型、变量跟踪配置、断点位置以及当前已打开
的文件等等,见图代码编辑器中已打开的文件。

uvguix 文件记录了 MDK 软件的 GUI 布局,如代码编辑区窗口的大小、编译输出提示窗口的位置等等。
在这里插入图片描述

生成可执行文件

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

.o和.axf怎么查看和debug

正常打开.o和axf文件都是乱码无法查看的
在这里插入图片描述

此时要通过fromelf编译器反汇编,如果fromelf命令不存在,就是要去添加一下系统的环境变量,把编译器的目录添加进去path,shift加右键在文件夹打开终端,以下是例子
在这里插入图片描述
在这里插入图片描述

反汇编生成的txt文件
在这里插入图片描述

elf文件生成

生成elf文件勾选上后,文件空间变小了,是非常有好处的。ROdata和RWdata空间都变小了在这里插入图片描述

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

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

相关文章

HTB-Magic

HTB-Magic信息收集80端口立足www-data -> theseustheseus -> root信息收集 80端口 主页如下。 左下角有一个Login。 抓包后尝试sql注入。 上传一个图片并保存请求。 上传的文件会在/uploads/上传文件名后缀。 只允许我们上传jpg,jpeg,png文…

C/C++每日一练(20230418)

目录 1. 搜索插入位置 🌟 2. 最长有效括号 🌟🌟🌟 3. 子集 🌟🌟 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专栏…

2023软件测试银四如何逆势涨薪,开头30秒给你想要的答案

引言 2023软件测试银四逆势涨薪,这是一个让人兴奋的话题。毕竟,在当前就业市场的背景下,很多人正在面临着困境,而能够在逆势中实现薪资上涨的机会,显然是非常值得我们去关注的。 那么,到底是什么让这些软…

C语言实现惯导更新算法(机械编排)

四元数 四元数可用于描述刚体转动或姿态变换,与方向余弦阵相比,表达简洁。四元数是一个包含四个元素的列向量,列向量的第一个元素表示刚体围绕旋转轴转过的角度大小,其余3个元素代表了旋转轴的方向。 姿态更新算法 本程序姿态的递推计算采用四元数来实现,姿态的变化采…

coinex02// 撮合引擎 RingBuffer Disruptor的构建与使用

目录 0. 课程视频地址 0.1 撮合引擎课程 0.1 RocketMQ安装 0.3 RocketMQ搭建成功后登录 1. docker 配置rocketmq 2 逻辑树 : 构建RingBuffer -> 使用RingBuffer 2.1 生产者往RingBuffer中放数据 Disruptor把数据推给消费者cpu 2.2 RingBuffer, Disruptor的创建 ->…

麻了,别再为难测试工程师了...

前言 有不少技术友在测试群里讨论,近期的面试越来越难了,要背的八股文越来越多了,考察得越来越细,越来越底层,明摆着就是想让我们徒手造航母嘛!实在是太为难我们这些测试工程师了。 这不,为了帮大家节约时…

Stable Diffusion XL:更快,更强

Stable Diffusion XL:更快,更强 今天,Stability AI 的创始人兼首席执行官 Emad Mostaque 发推宣布,Stable Diffusion XL 进入公测阶段。 核心信息总结起来有2点: “XL”不是新模型的官方名称,Stability …

计算机图形学——游戏方向 第一章 计算机图形学概述

计算机图形学——游戏方向 第一章 计算机图形学概述前言第一章 计算机图形学概述1.为什么设计专业要学习计算机图形学?计算机图形学与计算机视觉等领域的关系计算机图形学基础自学体系2.计算机图形学的辨析3.计算机图形(学)的发展历史1951:N…

〖Python网络爬虫实战⑭〗- BeautifulSoup详讲

订阅:新手可以订阅我的其他专栏。免费阶段订阅量1000python项目实战 Python编程基础教程系列(零基础小白搬砖逆袭) 说明:本专栏持续更新中,目前专栏免费订阅,在转为付费专栏前订阅本专栏的,可以免费订阅付费…

Flume系列:Flume Source使用

目录 Apache Hadoop生态-目录汇总-持续更新 1:taildir source 2:kafka source 3:exec source(tail -F) 4:netcat source(采集端口) 5:spoolDir读取目录文件&#xf…

Axios请求(对ajax的二次封装)——Axios API、Axios实例、请求配置、Axios响应结构

axios起步——介绍和使用基本用例post请求场景复现核心干货axios APIaxios(config)axios(url[,config])请求方式别名axios实例创建一个axios实例axios.create([config])实例方法axios请求配置axios响应结构场景复现 最近学习与前端相关的小程序时,接触了异步请求ap…

医学图像配准 (Medical Image Registration)

目录 Classification Transformation Registration Algorithms Landmark Based Surfaced Based Voxel Intensity Based Information Theory Based Registration using basis functions Registration using splines Other Physics Based Registration Optimization V…

OctoClock CDA 2990

CDA 2990 CDA 2990为时钟和PPS分发设备,支持外部一路时钟和PPS输入,最高支持8路时钟和PPS输出。同时CDA 2990可选配带GPS模块版本,可外接GPS天线,支持通过GPS锁定时钟和PPS信号输出。CDA 2990主要用于多台USRP设备进行同步。 CDA…

C++之 继承 (inheritance)

目录 启示 一、基本语法 二、继承的方式 三种: 公共基础 / 保护继承 / 私有继承 三、继承中的对象模型 ①父类中所有非静态成员属性都会继承给子类 ②而私有成员属性同样继承过去,但是被编译器隐藏,因此无法访问 四、继承中构造和析…

2023年,送你一份最新的后端架构师知识图谱

这是一个能让你成为架构师的文章,请耐心读完。 为什么写这个 前几天心血来潮搜了下《后端架构师》的技术图谱。发现最新最火的文章更新时间还停留在5年前。最新的技术体系并没有罗列在内。而且文章的颗粒度特别细,是从数据结构和常用算法开始的。这是典…

【加餐 2】Tab 标签页管理

【加餐 2】Tab 标签页管理 对于管理系统,经常需要开启多个标签页,但是每次都需要手动去关闭,很麻烦,所以就有了这个功能,可以一键关闭所有标签页,或者关闭除当前标签页外的所有标签页,对于重要的标签页,可以进行固定至前列,方便下次快速打开。 一、实现效果 实现效…

论文浅尝 | 利用知识图谱增强的Transformer进行跨领域方面抽取

笔记整理:沈小力,东南大学硕士,研究方向为知识图谱链接:https://dl.acm.org/doi/pdf/10.1145/3511808.3557275动机情感分析是自然语言处理的基础任务,它包含介绍了细粒度情感分析中的一个常见任务——基于方面的情感分…

【CSS】鼠标移动到元素上方显示 / 移出盒子范围隐藏案例 ( 子绝父相 | 显示隐藏元素对象 | 鼠标经过样式设置 | 半透明遮罩设置 )

文章目录一、鼠标移动到元素上方显示 / 移出盒子范围隐藏案例要点分析1、子绝父相2、显示隐藏元素对象3、鼠标经过样式设置4、半透明遮罩设置二、代码示例一、鼠标移动到元素上方显示 / 移出盒子范围隐藏案例要点分析 1、子绝父相 这里要 在一个 div 盒子上方套一层遮罩 , 遮罩…

【原理图专题】OrCAD Capture 设计规则(DRC)检查

在原理图设计完成后,需要进行DRC检查,DRC检查能协助工程师快速检查原理图的物理、电气规则是否正确,能快速定位错误和原因。 DRC检查从Capture 工具栏中如下图红框所示的图标中Design Rules Check进入 进入后将打开DRC窗口,有四个选项卡。分别是Design Rules Options、Elec…

带你了解攻击与防护相关知识

目录 一、攻击篇 1.什么是恶意软件? 2.恶意软件有哪些特征? 3. 恶意软件的可分为那几类? 4. 恶意软件的免杀技术有哪些? 5. 反病毒技术有哪些? 6. 反病毒网关的工作原理是什么&#xff1f…