0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何用Keil生成bin、汇编、C与汇编混合文件?

Q4MP_gh_c472c21 来源:最后一个bug 作者:bug君 2021-03-09 13:59 次阅读

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菌对上面的输出简单的注释了下。

ARM image conversion utilityfromelf [options] input_file

Options: --help display this help screen //【显示帮助信息】 --vsn display version information//【显示版本信息】 --output file the output file. (defaults to stdout for -text format)//【输出文件。(-text格式默认为stdout)】 8 --nodebug do not put debug areas in the output image//【不在输出映像中放置调试域】 --nolinkview do not put sections in the output image//【不在输出映像中放置段信息】

Binary Output Formats: --bin Plain Binary//【bin文件】 --m32 Motorola 32 bit Hex//【motol格式的hex文件】 --i32 Intel 32 bit Hex//【Intel格式的hex文件】 --vhx Byte Oriented Hex format//【面向字节的hex格式】

--base addr Optionally set base address for m32,i32

Output Formats Requiring Debug Information --fieldoffsets Assembly Language Description of Structures/Classes --expandarrays Arrays inside and outside structures are expanded

Other Output Formats: --elf ELF --text Text Information

Flags for Text Information -v verbose -a print data addresses (For images built with debug)//【打印数据地址信息】 -c disassemble code//【输出汇编代码】 -d print contents of data section//【打印数据域内容】 -e print exception tables//【打印异常表】 -g print debug tables//【打印调试表】 -r print relocation information//【打印重定位信息】35 -s print symbol table//【打印符号表】 -t print string table//【打印字符串表】 -y print dynamic segment contents//【打印动态段内容】 -z print code and data size information//【打印代码与数据大小信息】

输出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文件。

7126eb62-7ec2-11eb-8b86-12bb97331649.png

3、查看.txt文件

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

71337f12-7ec2-11eb-8b86-12bb97331649.png

原文标题:用Keil生成bin、汇编、C与汇编混合文件,再也不想debug了!

文章出处:【微信公众号:嵌入式ARM】欢迎添加关注!文章转载请注明出处。

责任编辑:haq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 编程
    +关注

    关注

    88

    文章

    3628

    浏览量

    93823
  • keil
    +关注

    关注

    68

    文章

    1213

    浏览量

    167000

原文标题:用Keil生成bin、汇编、C与汇编混合文件,再也不想debug了!

文章出处:【微信号:gh_c472c2199c88,微信公众号:嵌入式微处理器】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    EE-134:为SHARC系列编写C兼容汇编代码中断处理程序

    电子发烧友网站提供《EE-134:为SHARC系列编写C兼容汇编代码中断处理程序.pdf》资料免费下载
    发表于 01-07 13:58 0次下载
    EE-134:为SHARC系列编写<b class='flag-5'>C</b>兼容<b class='flag-5'>汇编</b>代码中断处理程序

    EE-128:C语言中的DSP:从C调用汇编类成员函数

    电子发烧友网站提供《EE-128:C语言中的DSP:从C调用汇编类成员函数.pdf》资料免费下载
    发表于 01-07 13:48 0次下载
    EE-128:<b class='flag-5'>C</b>语言中的DSP:从<b class='flag-5'>C</b>调用<b class='flag-5'>汇编</b>类成员函数

    ARM汇编语言工具

    电子发烧友网站提供《ARM汇编语言工具.pdf》资料免费下载
    发表于 11-06 09:12 0次下载
    ARM<b class='flag-5'>汇编</b>语言工具

    TMS320C28x汇编语言工具

    电子发烧友网站提供《TMS320C28x汇编语言工具.pdf》资料免费下载
    发表于 11-01 09:32 0次下载
    TMS320<b class='flag-5'>C</b>28x<b class='flag-5'>汇编</b>语言工具

    C语言生成可执行二进制文件的具体过程

    C语言源码到生成可执行文件的过程通常包括预处理(Preprocessing)、编译(Compilation)、汇编(Assembly)、链接(Linking)等多个步骤,每个步骤都有其
    的头像 发表于 10-21 14:30 603次阅读
    <b class='flag-5'>C</b>语言<b class='flag-5'>生成</b>可执行二进制<b class='flag-5'>文件</b>的具体过程

    TMS320LF240x DSP的C语言和汇编代码快速入门

    电子发烧友网站提供《TMS320LF240x DSP的C语言和汇编代码快速入门.pdf》资料免费下载
    发表于 10-18 10:14 1次下载
    TMS320LF240x DSP的<b class='flag-5'>C</b>语言和<b class='flag-5'>汇编</b>代码快速入门

    hex文件怎么能转回去c语言

    的差异。 然而,如果你想要从 .hex 文件中获取一些有用的信息或者对程序进行分析,你可以采取以下步骤来尽可能接近原始的C语言逻辑: 反汇编 : 使用反汇编工具(如IDA Pro、Gh
    的头像 发表于 09-02 10:46 2359次阅读

    keil仿真查看反汇编,汇编窗口怎么跳转到指定行了呢?

    请问大神;如图所示,想在汇编窗口跳转到C:045F,查看汇编原码;怎么操作?有无直接跳转的办法现在只能用鼠标滚轮一直翻,有时候还到不了指定行;
    发表于 07-24 07:06

    请问STM32CubeIDE如何加载外部bin文件

    我有一个外部的bin文件,想要编译、链接到stm32工程里,如何用stm32cubeide来实现呢? 我知道在keil中可以添加一个.s文件
    发表于 05-30 06:41

    keil如何生成带有编译日期的BIN文件

    【求助】keil 如何生成带有编译日期的 BIN 文件
    发表于 04-18 08:13

    一招掌握C语言代码如何变成bin文件

    一、关键步骤将单片机的源代码转换成二进制文件bin文件)的过程涉及几个关键步骤,这些步骤是编译过程中的标准组成部分,主要包括以下步骤:预处理、编译、汇编、链接、二进制转换。01预处理
    的头像 发表于 04-13 08:10 3337次阅读
    一招掌握<b class='flag-5'>C</b>语言代码如何变成<b class='flag-5'>bin</b><b class='flag-5'>文件</b>?

    何用Keil生成bin汇编C汇编混合文件

    Keil生成bin汇编C汇编混合
    发表于 04-08 06:17

    keil仿真查看反汇编,汇编窗口怎么跳转到指定行?

    如图所示,想在汇编窗口跳转到C:045F,查看汇编原码;怎么操作?有无直接跳转的办法 现在只能用鼠标滚轮一直翻,有时候还到不了指定行;
    发表于 03-14 07:28

    tasking是如何生成bin文件的?

    有没大神做过Tasking生成bin文件呢?
    发表于 02-19 07:39

    C语言能够实现单片机功能,为什么还要使用汇编呢?

    C语言能够实现单片机功能,为什么还要使用汇编呢? C语言是一种高级编程语言,它具有跨平台、可移植性强、易于使用的特点,使得开发人员能够快速且方便地编写复杂的程序。然而,尽管C语言在许多
    的头像 发表于 01-15 14:59 1100次阅读