发文章
发文工具
撰写
网文摘手
文档
视频
思维导图
随笔
相册
原创同步助手
其他工具
图片转文字
文件清理
AI助手
留言交流
注:本文主要内容来自野火STM32教程
在MDK工程下,点击编译按钮,MDK将会完成整个编译过程,如下图所示
编译,MDK 软件使用的编译器是 armcc 和 armasm,它们根据每个c/c++和汇编源文件编译成对应的以“.o”为后缀名的对象文件(Object Code,也称目标文件),其内容主要是从源文件编译得到的机器码,包含了代码、数据以及调试使用的信息;
链接,链接器 armlink 把各个.o 文件及库文件链接成一个映像文件“.axf”或“.elf”;
格式转换,一般来说 Windows 或 Linux 系统使用链接器直接生成可执行映像文件 elf后,内核根据该文件的信息加载后,就可以运行程序了,但在单片机平台上,需要把该文件的内容加载到芯片上,所以还需要对链接器生成的 elf 映像文件利用格式转换器fromelf 转换成“.bin”或“.hex”文件,交给下载器下载到芯片的 FLASH 或 ROM 中。
MDK工程下点击编译按钮,在MDK的“Build Output”窗口会看到编译过程信息
1、提示信息的第一部分说明构建过程调用的编译器。图中的编译器名字是“V5.06(build20)”,后面附带了该编译器所在的文件夹。在电脑上打开该路径,即\ARM\ARMCC\bin,可看到该编译器包含 armar、 armasm、 armcc、 armlink 及 fromelf,后面四个工具上面内容已有讲解,而 armar 是用于把.o 文件打包成 lib 文件的
2、使用 armasm 编译汇编文件。图中列出了编译 startup 启动文件时的提示,编译后每个汇编源文件都对应有一个独立的.o 文件
3、使用 armcc 编译 c/c++文件。图中列出了工程中所有的 c/c++文件的提示,同样地,编译后每个 c/c++源文件都对应有一个独立的.o 文件。
4、使用 armlink 链接对象文件,根据程序的调用把各个.o 文件的内容链接起来,最后生成程序的 axf 映像文件,并附带程序各个域大小的说明,包括 Code、 RO-data、 RW-data及 ZI-data 的大小。
5、使用 fromelf 生成下载格式文件,它根据 axf 映像文件转化成 hex 文件,并列出编译过程出现的错误(Error)和警告(Warning)数量。
6、最后一段提示给出了整个构建过程消耗的时间
编译完成后,可在工程的“Output”及“Listing”目录下找到由以上过程生成的各种文件,每个 C 源文件都对应生成了.o、 .d 及.crf 后缀的文件,还有一些额外的.dep、 .hex、 .axf、 .htm、 .lnp、 .sct、 .lst 及.map 文件
来自: myallmy > 《嵌入式软件架构》
0条评论
发表
请遵守用户 评论公约
痞子衡嵌入式:MCUXpresso IDE下添加C++源文件进SDK工程编译的方法
痞子衡嵌入式:MCUXpresso IDE下添加C++源文件进SDK工程编译的方法。现在开始重新Build加了sw_delay.cpp文件的工程,得到如下错误,这个...
MDK5(KEIL5)中生成bin文件
MDK5(KEIL5)中生成bin文件MDK5(KEIL5)中如何生成bin文件。D:\keil5\ARM\ARMCC\bin\fromelf.exe --bin --output ../OBJ/PWM.bin ../O...
ARM SDT 2.5开发环境
ARM SDT 2.5开发环境五、步骤1.建立工程文件。重新命名模板后可以保存该工程,并把该空工程(还没有添加工程文件)复制到SDT安装路径下...
Keil综合(01)_一些常见文件类型的作用和功能说明
Keil综合(01)_一些常见文件类型的作用和功能说明。微主我习惯在工程文件中放一个“删除编译产生垃圾文件.bat”文件,在最后源代码存档...
STM32系列开发-揭开MDK下__main的面纱--非常详解
STM32系列开发-揭开MDK下__main的面纱--非常详解。之前,是大体了解了MDK下的__main函数所做的事情,一直没有深究,最近突然很想知道,M...
如何在Keil-MDK开发环境生成Bin格式文件
如何在Keil-MDK开发环境生成Bin格式文件。fromelf --bin -o ''''''''$L@L.bin''''...
手把手教你VSCode搭建STM32开发环境
C/C++插件安装完成之后,首先就要安装Keil Assistant插件,同样点击软件最右边的扩展按钮,在出来的搜索框中输入keil,选择最上面一个Ke...
MDK(uVsion3)问题总结及解决方法
电子论坛,电子设计论坛,电子开发论坛+M5E%`;N/k(r电子论坛,电子设计论坛,电子开发论坛;@;l1O2`)|,_&X-{问题八:Error:C3900:Unrecognized option ‘-O3‘.电子论坛,电子设计论坛,电子开发论坛.y3...
使用keil编译软件的常见错误
void a(void) //函数a的实体{ b(); //调用函数b}void b(void) //函数b的实体{ ...}这样如果点编译,就会产生error: #159的错误,因为当函数a调用函数b时,发现在这之前都没有函数b的任何声明...
微信扫码,在手机上查看选中内容