你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

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

[复制链接]
gaosmile 提问时间:2021-3-7 16:58 /
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
微信图片_20210307164815.png
该文档网上很容易搜索到,这里就不板书了。
如果你想省点事,可以直接使用cmd输出formelf.exe的帮助信息,过程如下。
2、formelf.exe详细说明
1、首先在windows运行栏中找到cmd命令输入。
微信图片_20210307164820.png
微信图片_20210307164823.png
2、输入命令行.\fromelf.exe --help
微信图片_20210307164827.png 微信图片_20210307164829.png
bug菌对上面的输出简单的注释了下。

  1. ARM image conversion utility
  2. fromelf [options] input_file

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

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

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

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

  17. Other Output Formats:
  18.        --elf         ELF
  19.        --text        Text Information

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

输出bin和汇编
在keil中进行如下配置 ,表示在工程编译以后所执行的命令行。
命令行如下,方便大伙copy:

  • fromelf --text -c -o "$[url=mailto@L.asm]L@L.asm[/url]" "#L"
  • fromelf --bin -o "$[url=mailto@L.bin]L@L.bin[/url]" "#L"

微信图片_20210307164832.png
确定配置好以后重新编译,最终编译器输出如下信息。
微信图片_20210307164835.png
从输出信息来可以了解到bin文件和asm文件均由.axf文件通过fromelf工具转化而来,相信转化命令的通配符大家也可以理解了,输出结果如下:

微信图片_20210307164838.png
这样看来.axf文件所包含的信息非常之多,其全称为:Arm executable File,其实.axf文件与gcc中的elf文件是类似的,Keil默认生成.axf文件。
微信图片_20210307164840.png
如果在Keil中没有勾选hex文件的生成,那么就用.axf文件来进行烧录。
而如果勾选了Hex文件生成,其实就是Keil通过调用fromelf将axf转换为hex文件,所以编译后可以在输出文件中同时看到axf和hex文件。
3、C与汇编混合展示
我们打开前面的.asm文件如下图所示:

微信图片_20210307164843.png
零零散散我们可以看到几个C函数,不过阅读起来稍微有点吃力,大伙应该还是比较喜欢阅读debug时候汇编框中C语言与汇编语言一一对应的形式,这样也更好理解汇编语言。
1、生成.txt和.i文件
我们在keil中勾选如下几项,然后进行重新编译。
微信图片_20210307164845.png
其中在工程目录的*.txt即为汇编与C混合文件,而*.i为经过了预处理的文件。
微信图片_20210307164848.png
2、对比.c和.i文件
对于预处理过程主要是去掉注释和展开宏等,下面我们对比一下源文件与.i文件。

微信图片_20210307164850.png
微信图片_20210307164853.png
3、查看.txt文件
生成的.txt即为C代码与汇编的混合文件。
微信图片_20210307164856.png


收藏 评论0 发布时间:2021-3-7 16:58

举报

0个回答

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版