当前位置:首页 > > wenzi嵌入式软件
[导读]今天跟大家详细聊聊如何在Keil中生成bin文件、汇编文件、以及C与汇编混合文件,并且详细介绍一下生成fromelf.exe工具的使用。


1、聊一聊


一首《Five Hundred Miles》送给跟bug菌一样深漂的伙伴们! 今天跟大家详细聊聊如何在Keil中生成bin文件、汇编文件、以及C与汇编混合文件,并且详细介绍一下生成fromelf.exe工具的使用。

2、正文部分

1

话题引入

在使用Keil集成开发环境中大伙使用频率高的文件大概就是.hex吧,如果考虑内存布局等会使用到.map文件,如果遇到了疑难bug还会在仿真过程中看一看汇编窗口栏。 然而bin文件作为嵌入式最为直接的固件,同样也是我们非常需要获得的文件,比如进行远程升级等等,一方面可以直接通过其他hex转bin工具转化,另一方面通过集成开发环境自带的功能进行转化即可。 同样有时候我们不想通过debug状态下的汇编栏进行汇编查看,而是想直接分析每个源文件编译所生成的汇编文件来定位问题和优化性能,集成开发环境能够有生成汇编文件的功能就再方便不过了。

2

生成bin文件

1

formelf.exe介绍

fromelf.exe即keil下的一个处理elf文件的工具,elf文件英文名为Executable and Linking Format ,该文件包括符号表,调试信息,汇编等等,所以通过使用fromelf.exe可以输出较多信息文件,比如hex、bin、asm等。 对于此工具详细的说明文件可以参考: using_the_fromelf_utility.pdf


该文档网上很容易搜索到,这里就不板书了。 如果你想省点事,可以直接使用cmd输出formelf.exe的帮助信息,过程如下。

2

formelf.exe详细说明

1、首先在windows运行栏中找到cmd命令输入。


2、输入命令行 .\fromelf.exe --help


bug菌对上面的输出简单的注释了下。
 1ARM image conversion utility  2fromelf [options] input_file  3  4Options:  5 --help         display this help screen //【显示帮助信息】  6 --vsn          display version information//【显示版本信息】  7 --output file  the output file. (defaults to stdout for -text format)//【输出文件。(-text格式默认为stdout)】  8 --nodebug do not put debug areas in the output image//【不在输出映像中放置调试域】  9 --nolinkview do not put sections in the output image//【不在输出映像中放置段信息】 10 11Binary Output Formats: 12 --bin          Plain Binary//【bin文件】 13 --m32          Motorola 32 bit Hex//【motol格式的hex文件】 14 --i32          Intel 32 bit Hex//【Intel格式的hex文件】 15 --vhx          Byte Oriented Hex format//【面向字节的hex格式】 16 17 --base addr    Optionally set base address for m32,i32 18 19Output Formats Requiring Debug Information 20 --fieldoffsets Assembly Language Description of Structures/Classes 21 --expandarrays Arrays inside and outside structures are expanded 22 23Other Output Formats: 24 --elf         ELF 25 --text        Text Information 26 27 Flags for Text Information 28 -v          verbose 29 -a          print data addresses (For images built with debug)//【打印数据地址信息】 30 -c          disassemble code//【输出汇编代码】 31 -d          print contents of data section//【打印数据域内容】 32 -e          print exception tables//【打印异常表】 33 -g          print debug tables//【打印调试表】 34 -r          print relocation information//【打印重定位信息】 35 -s          print symbol table//【打印符号表】 36 -t          print string table//【打印字符串表】 37 -y          print dynamic segment contents//【打印动态段内容】 38 -z          print code and data size information//【打印代码与数据大小信息】 

3

‍‍‍‍‍

输出bin和汇编

在keil中进行如下配置 ,表示在工程编译以后所执行的命令行。 命令行如下,方便大伙copy:
  • fromelf --text -c -o "$L@L.asm" "#L"

  • fromelf --bin -o "$L@L.bin" "#L"

确定配置好以后重新编译,最终编译器输出如下信息。

从输出信息来可以了解到bin文件和asm文件均由.axf文件通过fromelf工具转化而来,相信转化命令的通配符大家也可以理解了,输出结果如下:

这样看来.axf文件所包含的信息非常之多,其 全称为:Arm executable File,其实.axf文件与gcc中的elf文件是类似的,Keil默认生成.axf文件

如果在Keil中没有勾选hex文件的生成,那么就用.axf文件来进行烧录。 而如果勾选 了Hex文件生成,其实就是Keil通过调用fromelf将axf转换为hex文件,所以编译后可以在输出文件中同时看到axf和hex文件。

3

C与汇编混合展示

我们打开前面的.asm文件如下图所示:

零零散散我们可以看到几个C函数,不过阅读起来稍微有点吃力,大伙应该还是比较喜欢阅读debug时候汇编框中C语言与汇编语言一一对应的形式,这样也更好理解汇编语言。

1

生成.txt和.i文件

我们在keil中勾选如下几项,然后进行重新编译


其中在工程目录的 *.txt即为汇编与C混合文件 ,而 *.i为经过了预处理的文件

2

对比.c和.i文件

对于预处理过程主要是去掉注释和展开宏等,下面我们对比一下源文件与.i文件。

3

查看.txt文件

生成的.txt即为C代码与汇编的混合文件。


2、最后

好了,本文到此结束,enjoy,持续的输出都需要一定的动力,大家懂的!

免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭