【嵌入式开发学习】__hex文件、bin文件、axf文件的区别

2023-11-02 01:28

本文主要是介绍【嵌入式开发学习】__hex文件、bin文件、axf文件的区别,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

前言

一、编译的过程

二、可烧录的文件

三、离线文件的烧录方法

(* ̄︶ ̄)创作不易!期待你们的 点赞、收藏和评论喔。 


前言

在STM32开发中,经常会碰到hex文件bin文件axf文件,这些都是可以烧写到板子里运行的文件。那么,你知道这三个文件有什么区别吗?

在回答这个问题之前,我们先来回顾一下C语言编译的过程。

一、编译的过程

在之前的C语言笔记《C程序的编译过程》中,有简单的分析了C程序编译的几个过程:

STM32也是用C语言来开发,也会经过类似的编译过程,只不过我们常常用MDK或者其它IDE来编译,其编译过程如下:

例如,我们的LED程序编译过程如下:

在IDE中进行编译时,我们只需点击编译按钮即可完成这些过程,编译过程用到的工具(.exe文件)在IDE的安装目录下的某个文件夹下,比如这里用的MDK的编译工具路径:

一般这些IDE或者工具集的一些编译工具都放在bin文件夹。再比如我们MinGW工具集(里面包含 gcc/g++编译器,可以编译在电脑上运行的程序)的编译工具所在路径为:

回归正题,我们的 MDK 编译时就是使用安装路径下的这些编译工具来完成我们的编译过程。

究其本质,我们在 cmd命令 窗口也是可以通过命令来编译我们的STM32程序的(前提是配好环境变量,否则得到编译工具所在的路径下进行编译)。

但我们不会这样干,因为IDE已经给我们提供了很大的便利。比如:

下面看一下我们在cmd窗口下运行 armcc命令 看会发生什么: 

我们看到了很多关于 armcc命令 的提示说明,有些常用的编译选项已经集成在MDK里供我们选择,比如:

二、可烧录的文件

axf文件、hex文件与bin文件都是可以运行在我们的stm32上的,它们都存储了编译器根据源代码生成的机器码,根据应用场合的不同,它们又有所区别:

  1. axf文件:包含调试信息。
  2. hex文件:包含地址信息。
  3. bin文件:最直接的代码映像。
  • axf文件是编译默认生成的文件,不仅包含代码数据,而且还包含着调试信息,在MDK里进行debug调试用的就是这个文件。

hex文件 在MDK里要勾选如下选项才可以生成:

  • hex文件 是一种使用十六进制符号表示的代码记录, 记录了代码应该存储到FLASH 的哪个地址,下载器可以根据这些信息辅助下载。
  • bin文件 是根据axf文件生成的,需要在MDK下添加类似如下格式命令来生成对应的bin文件:

bin文件就是最小的可以运行的文件了,其包含最直接的代码映像。这三个文件中axf文件最大,hex文件次之,bin文件最小,比如:

关于它们的区别这里只是简单的阐述说明,有时间、有精力、有兴趣的朋友可以去分析它们里面的内容。

三、离线文件的烧录方法

hex文件的烧录,我们可以使用 FlyMcu 工具通过 串口 来下载:.

FlyMcu 不可以烧 bin文件,因为上面说过了bin文件只包含最直接的代码映像,不包含地址信息,会出现如下错误: 

bin文件 可以使用 STM32CubeProgrammer软件 通过 STLINK 进行下载:


(* ̄︶ ̄)创作不易!期待你们的 点赞收藏评论喔。 

本文来源网络,免费分享知识,版权归原作者所有。如涉及作品版权问题,请联系我进行删除! 

这篇关于【嵌入式开发学习】__hex文件、bin文件、axf文件的区别的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/327141

相关文章

Springboot @Autowired和@Resource的区别解析

《Springboot@Autowired和@Resource的区别解析》@Resource是JDK提供的注解,只是Spring在实现上提供了这个注解的功能支持,本文给大家介绍Springboot@... 目录【一】定义【1】@Autowired【2】@Resource【二】区别【1】包含的属性不同【2】@

Java中的String.valueOf()和toString()方法区别小结

《Java中的String.valueOf()和toString()方法区别小结》字符串操作是开发者日常编程任务中不可或缺的一部分,转换为字符串是一种常见需求,其中最常见的就是String.value... 目录String.valueOf()方法方法定义方法实现使用示例使用场景toString()方法方法

Spring Boot + MyBatis Plus 高效开发实战从入门到进阶优化(推荐)

《SpringBoot+MyBatisPlus高效开发实战从入门到进阶优化(推荐)》本文将详细介绍SpringBoot+MyBatisPlus的完整开发流程,并深入剖析分页查询、批量操作、动... 目录Spring Boot + MyBATis Plus 高效开发实战:从入门到进阶优化1. MyBatis

Python基于wxPython和FFmpeg开发一个视频标签工具

《Python基于wxPython和FFmpeg开发一个视频标签工具》在当今数字媒体时代,视频内容的管理和标记变得越来越重要,无论是研究人员需要对实验视频进行时间点标记,还是个人用户希望对家庭视频进行... 目录引言1. 应用概述2. 技术栈分析2.1 核心库和模块2.2 wxpython作为GUI选择的优

分辨率三兄弟LPI、DPI 和 PPI有什么区别? 搞清分辨率的那些事儿

《分辨率三兄弟LPI、DPI和PPI有什么区别?搞清分辨率的那些事儿》分辨率这个东西,真的是让人又爱又恨,为了搞清楚它,我可是翻阅了不少资料,最后发现“小7的背包”的解释最让我茅塞顿开,于是,我... 在谈到分辨率时,我们经常会遇到三个相似的缩写:PPI、DPI 和 LPI。虽然它们看起来差不多,但实际应用

GORM中Model和Table的区别及使用

《GORM中Model和Table的区别及使用》Model和Table是两种与数据库表交互的核心方法,但它们的用途和行为存在著差异,本文主要介绍了GORM中Model和Table的区别及使用,具有一... 目录1. Model 的作用与特点1.1 核心用途1.2 行为特点1.3 示例China编程代码2. Tab

利用Python开发Markdown表格结构转换为Excel工具

《利用Python开发Markdown表格结构转换为Excel工具》在数据管理和文档编写过程中,我们经常使用Markdown来记录表格数据,但它没有Excel使用方便,所以本文将使用Python编写一... 目录1.完整代码2. 项目概述3. 代码解析3.1 依赖库3.2 GUI 设计3.3 解析 Mark

Nginx指令add_header和proxy_set_header的区别及说明

《Nginx指令add_header和proxy_set_header的区别及说明》:本文主要介绍Nginx指令add_header和proxy_set_header的区别及说明,具有很好的参考价... 目录Nginx指令add_header和proxy_set_header区别如何理解反向代理?proxy

利用Go语言开发文件操作工具轻松处理所有文件

《利用Go语言开发文件操作工具轻松处理所有文件》在后端开发中,文件操作是一个非常常见但又容易出错的场景,本文小编要向大家介绍一个强大的Go语言文件操作工具库,它能帮你轻松处理各种文件操作场景... 目录为什么需要这个工具?核心功能详解1. 文件/目录存javascript在性检查2. 批量创建目录3. 文件

Java中&和&&以及|和||的区别、应用场景和代码示例

《Java中&和&&以及|和||的区别、应用场景和代码示例》:本文主要介绍Java中的逻辑运算符&、&&、|和||的区别,包括它们在布尔和整数类型上的应用,文中通过代码介绍的非常详细,需要的朋友可... 目录前言1. & 和 &&代码示例2. | 和 ||代码示例3. 为什么要使用 & 和 | 而不是总是使